Sunteți pe pagina 1din 41

CURSO DE SQL

El SQL es un lenguaje estndar de programacin para el acceso a bases de datos.


El lenguaje SQL se utiliza para acceder y manipular datos en cualquier base de datos del
mercado, como por ejemplo, para las bases de datos MySQL, Oracle, DB2, SQL Server, Access.
Este tutorial se divide en las siguientes partes:

SQL Bsico: Las instrucciones SQL bsicas para la consulta de datos de cualquier base
de datos relacional.
SQL Avanzado: Las instrucciones SQL avanzadas para un control completo sobre
cualquier base de datos relacional.
Funciones SQL: SQL tiene multiples funciones predefinidas para realizar ciertos
clculos sobre los datos.
Comandos SQL: Listado de todos los comandos SQL disponibles en este curso, para
una referencia rpida de los mismos.

El SQL es un lenguaje estructurado y un estndar ANSI para el acceso y manipulacin de los


datos de cualquier base de datos.
El SQL se compone de sentencias SQL, cada una con una utilidad diferente, como por ejemplo:

Creacin de una base de datos (CREATE DATABASE)


Creacin de una tabla (CREATE TABLE)
Creacin de una vista (CREATE VIEW)
Creacin de un ndice de una tabla (CREATE INDEX)
Creacin de procedimientos almacenados (CREATE PROCEDURE)
Creacin de disparadores (CREATE TRIGGER)
Consultar los datos almacenados en una tabla (SELECT)
Insertar datos en una tabla (INSERT)
Modificar datos ya existentes en una tabla (UPDATE)
Borrar datos almacenados en una tabla (DELETE)
Dar permiso de acceso a los datos de una tabla (GRANT)
Eliminar permisos de acceso a datos de una tabla (REVOKE)
Finalizar la transaccin de una sentencia SQL (COMMIT)
Retroceder la transaccin de una sentencia SQL (ROLLBACK).

Estas son las instrucciones SQL bsicas para el acceso a cualquier base de datos relacional.

SQL SELECT: SELECT se utiliza para consultar datos.


SQL DISTINCT: DISTINCT sirve para eliminar los duplicados de las consultas de datos.
SQL WHERE: WHERE se utiliza incluir las condiciones de los datos que queremos
consultar.
AND OR: AND y OR se utilizan para incluir 2 o ms condiciones a una consulta.
SQL ORDER BY: ORDER BY se utiliza para ordenar los resultados de una consulta.
SQL INSERT: INSERT se utiliza para insertar datos.
SQL UPDATE: UPDATE se utiliza actualizar o modificar datos ya existentes.
SQL DELETE: DELETE se utiliza borrar datos.

SELECT
Una de las sentencias SQL ms importantes es SELECT, ya que permite realizar consultas
sobre los datos almacenados en la base de datos.

Sintaxis SQL SELECT

SELECT * FROM nombretabla


SELECT columna1, columna2 FROM nombretabla
Para los ejemplos, tendremos la siguiente tabla de personas denominada personas
Estos son los datos almacenados en la tabla personas

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

LUIS

LOPEZ

PEREZ

Si queremos consultar todos los datos de la tabla personas

SELECT * FROM personas


Este ser el resultado:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

LUIS

LOPEZ

PEREZ

Si queremos consulta todos los nombres y primer apellido de todas las personas

SELECT nombre, apellido1 FROM personas


Este ser el resultado:

nombre

apellido1

ANTONIO

PEREZ

ANTONIO

GARCIA

LUIS

LOPEZ

DISTINCT
Al realizar una consulta puede ocurrir que existan valores repetidos para algunas columnas.
Por ejemplo

SELECT nombre FROM personas

nombre
ANTONIO
LUIS
ANTONIO
Esto no es un problema, pero a veces queremos que no se repitan, por ejemplo, si queremos
saber los nombre diferentes que hay en la tabla personas", entonces utilizaremos DISTINCT.

SELECT DISTINCT nombre FROM personas

nombre
ANTONIO
LUIS
WHERE
La clusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar
solamente algunas filas de la tabla que cumplan una determinada condicin.
El valor de la condicin debe ir entre comillas simples ''.
Por ejemplo:
Seleccionar las personas cuyo nombre sea ANTONIO

SELECT
*
WHERE nombre = 'ANTONIO'

FROM

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

personas

AND
Los operadores AND y OR se utilizan para filtrar resultados con 2 condiciones.
El operador AND mostrar los resultados cuando se cumplan las 2 condiciones.

Condicin1 AND condicin2


El operador OR mostrar los resultados cuando se cumpla alguna de las 2 condiciones.

OR

Condicion1 OR condicion2
En la tabla personas

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

LUIS

LOPEZ

PEREZ

La siguiente sentencia (ejemplo AND) dar el siguiente resultado:

SELECT
*
WHERE
nombre
AND apellido1 = 'GARCIA'

FROM
=

nombre

apellido1

apellido2

ANTONIO

GARCIA

BENITO

personas
'ANTONIO'

La siguiente sentencia (ejemplo OR) dar el siguiente resultado:

SELECT
*
WHERE
nombre
OR apellido1 = 'GARCIA'

FROM
=

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

personas
'ANTONIO'

Tambin se pueden combinar AND y OR, como el siguiente ejemplo:

SELECT
*
FROM
WHERE
nombre
=
AND (apellido1 = 'GARCIA' OR apellido1 = 'LOPEZ)

nombre

apellido1

apellido2

ANTONIO

GARCIA

BENITO

ORDER

personas
'ANTONIO'

BY

ORDER BY se utiliza para ordenar los resultados de una consulta, segn el valor de la
columna especificada.
Por defecto, se ordena de forma ascendente (ASC) segn los valores de la columna.
Si se quiere ordenar por orden descendente se utiliza la palabra DES

SELECT
FROM
ORDER BY nombre_columna(s) ASC|DESC

nombre_columna(s)
nombre_tabla

Por ejemplo, en la tabla personas :

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

BENITO

SELECT
FROM
ORDER BY apellido1 ASC

nombre,

apellido1
personas

Esta es la consulta resultante:

nombre

apellido1

LUIS

LOPEZ

ANTONIO

GARCIA

ANTONIO

PEREZ

Ejemplo de ordenacin descendiente (DES)

SELECT
FROM
ORDER BY apellido1 DESC

nombre,

apellido1
personas

Esta es la consulta resultante:

nombre

apellido1

ANTONIO

PEREZ

ANTONIO

GARCIA

LUIS

LOPEZ
INSERT

La sentencia INSERT INTO se utiliza para insertar nuevas filas en una tabla.
Es posible insertar una nueva fila en una tabla de dos formas distintas:

INSERT
VALUES (valor1, valor2, valor3, .)

INTO

INSERT
INTO
nombre_tabla
VALUES (valor1, valor2, valor3, .)

nombre_tabla

(columna1,

columna2,

columna3,.)

Ejemplo:
Dada la siguiente tabla personas:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

BENITO

Si queremos insertar una nueva fila en la tabla personas, lo podemos hacer con cualquiera
de las dos sentencias siguientes:

INSERT
INTO
VALUES
('PEDRO',
'RUIZ',
INSERT
INTO
personas
(nombre,
VALUES ('PEDRO', 'RUIZ', 'GONZALEZ')

apellido1,

personas
'GONZALEZ')
apellido2)

Cualquiera de estas sentencias anteriores produce que se inserte una nueva fila en la tabla
personas, quedando as dicha tabla:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

BENITO

PEDRO

RUIZ

GONZALEZ

UPDATE
La sentencia UPDATE se utiliza para modificar valores en una tabla.
La sintaxis de SQL UPDATE es:

UPDATE
SET
columna1
WHERE columna3 = valor3

valor1,

columna2

La clusula SET establece los nuevos valores para las columnas indicadas.

nombre_tabla
valor2

La clusula WHERE sirve para seleccionar las filas que queremos modificar.
Ojo: Si omitimos la clusula WHERE, por defecto, modificar los valores en todas las filas de la
tabla.
Ejemplo del uso de SQL UPDATE

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

BENITO

PEDRO

RUIZ

GONZALEZ

Si queremos cambiar el apellido2 'BENITO' por 'RODRIGUEZ' ejecutaremos:

UPDATE
SET
apellido2
WHERE
nombre
AND
apellido1
AND apellido2 = 'BENITO'

=
=
=

personas
'RODRIGUEZ'
'ANTONIO'
'GARCIA'

Ahora la tabla 'personas' quedar as:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

La sentencia DELETE sirve para borrar filas de una tabla.


La sintaxis de SQL DELETE es:

DELETE
WHERE nombre_columna = valor

FROM

nombre_tabla

Si queremos borrar todos los registros o filas de una tabla, se utiliza la sentencia:

DELETE * FROM nombre_tabla;


Ejemplo de SQL DELETE para borrar una fila de la tabla personas

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Si queremos borrar a la persona LUIS LOPEZ PEREZ, podemos ejecutar el comando:

DELETE
WHERE
nombre
AND
apellido1
AND apellido2 = 'PEREZ'

FROM
=
=

personas
'LUIS'
'LOPEZ'

La tabla 'personas' resultante ser:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

AVANZADO
La sentencia SQL TOP se utiliza para especificar el nmero de filas a mostrar en el resultado.
Esta clusula SQL TOP es til en tablas con muchos registros, para limitar el nmero de filas a
mostrar en la consulta, y as sea ms rpida la consulta, consumiendo tambin menos recursos
en el sistema.
Esta clusula se especifica de forma diferente segn el sistema de bases de datos utilizado.
Clusula SQL TOP para SQL SERVER

SELECT
PERCENT
FROM nombre_tabla

TOP

nmero
nombre_columna

Clusula SQL TOP para MySQL

SELECT
LIMIT nmerofilas

columna(s)

FROM

tabla

FROM

tabla

Clusula SQL TOP para ORACLE

SELECT
columna(s)
WHERE ROWNUM <= nmerofilas
Ejemplo SQL TOP para MySQL:

Dada la siguiente tabla 'personas', quiero obtener los 2 primeros valores.

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

SELECT * FROM personas LIMIT 2


Obtendramos el siguiente resultado:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

LIKE
El operador LIKE se utiliza en la clusula WHERE para buscar por un patrn.
Sintaxis de SQL LIKE

SELECT columna(s) FROM tabla WHERE columna LIKE '%patron%'


Ejemplos del uso de SQL LIKE
Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Si quiero seleccionar los nombres que empiezan por 'AN' en la tabla 'personas', ejecutara el
comando siguiente:

SELECT
*
WHERE nombre LIKE 'AN%'

FROM

El character '%' es un comodn, que sirve para uno o ms caracteres.


Este es el resultado

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

Otro ejemplo de SQL LIKE

personas

Para seleccionar las personas que tienen un 'Z' en su apellido1, ejecutaramos:


SELECT
*
WHERE apellido1 LIKE '%Z%'

FROM

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

PEDRO

RUIZ

GONZALEZ

personas

WILDCARDS
Los caracteres Wildcards (comodines) son caracteres especiales que se utilizan para realizar
bsquedas especiales, como por ejemplo, buscar palabras que empiecen por una letra
determinada (letra%) o que contengan la letra a (%a%), o que contengan alguna vocal
([aeiou]), etc.
Los caracteres Wildcards se utilizan con el operador SQL LIKE en una sentencia
SELECT.Los caracteres Wildcards son :

sustituye a cero o ms caracteres

sustituye a 1 carcter cualquiera

[lista]

sustituye a cualquier carcter de la lista

[^lista]
[!lista]

o sustituye a cualquier carcter excepto los caracteres de la


lista

Ejemplos:
Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Ejemplos Wildcards
Seleccionar las personas cuyo nombre contenga una 'R'

SELECT
*
WHERE nombre LIKE '%R%'

FROM

Resultado:

nombre

apellido1

apellido2

PEDRO

RUIZ

GONZALEZ

personas

Seleccionar las personas cuyo apellido1 empiece por 'GA'

SELECT
*
WHERE apellido1 LIKE 'PE_EZ'

FROM

personas

Resultado:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

Seleccionar las personas cuyo apellido1 empiece por P o G

SELECT
*
WHERE apellido1 LIKE '[PG]%'

FROM

personas

Resultado:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ
IN

El operador IN permite seleccionar mltiples valores en una clusula WHERE


Sintaxis SQL IN

SELECT
FROM
WHERE
IN (valor1, valor2, valor3, .)

columna
tabla
columna

Ejemplo SQL IN
Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Queremos seleccionar a las personas cuyo apellido1 sea 'PEREZ' o 'RUIZ'

SELECT
WHERE
IN ('PEREZ','RUIZ')

FROM

personas
apellido1

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

PEDRO

RUIZ

GONZALEZ

BETWEEN
El operador BETWEEN se utiliza en la clusula WHERE para seleccionar valores entre un
rango de datos.
Sintaxis de SQL BETWEEN

SELECT
FROM
tabla
BETWEEN valor1 AND valor2

WHERE

columna
columna

Ejemplo de SQL BETWEEN


Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Seleccionar personas cuyo apellido1 est entre 'FERNANDEZ y 'HUERTAS'

SELECT
FROM
WHERE
BETWEEN 'FERNANDEZ' AND 'HUERTAS'

*
personas
apellido1

nombre

apellido1

apellido2

ANTONIO

GARCIA

RODRIGUEZ

Seleccionar personas cuyo apellido1 no est entre 'FERNANDEZ y 'HUERTAS'

SELECT
FROM
WHERE
NOT BETWEEN 'FERNANDEZ' AND 'HUERTAS'

nombre

apellido1

apellido2

*
personas
apellido1

ANTONIO

PEREZ

GOMEZ

PEDRO

RUIZ

GONZALEZ

JOINS
La sentencia SQL JOIN permite consultar datos de 2 o ms tablas.
Dichas tablas estarn relacionadas entre ellas de alguna forma, a travs de alguna de sus
columnas.
Existen 3 tipos de JOINS: JOIN interno, JOIN externo y JOIN cruzado.
Una clave primaria es una columna con un valor nico para cada registro de una tabla.
El propsito del JOIN es unir informacin de diferentes tablas, para no tener que repetir datos
en diferentes tablas.
Ejemplo:
Si tenemos las siguientes tablas
Tabla personas, con la clave primaria "per "

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

Si queremos saber los nombres de las personas que trabajan en INFORMATICA, tendramos
que hacer un JOIN de las 2 tablas "personas" y "departamentos", que se relacionaran por la
columna "dep".
Es decir, que desde la tabla "personas" y mediante la columna "dep", podemos acceder a la
informacin de la tabla "departamentos".

INNER JOIN

La sentencia INNER JOIN es el sentencia JOIN por defecto, y consiste en combinar cada fila de
una tabla con cada fila de la otra tabla, seleccionado aquellas filas que cumplan una determinada
condicin.

SELECT * FROM tabla1 INNER JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1


Ejemplo SQL INNER JOIN
Tabla personas, con la clave primaria "per "

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

SELECT nombre, apellido1, departamento FROM personas INNER JOIN departamentos


WHERE personas.dep = departamentos.dep

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

INFORMATICA

LEFT JOIN
La sentencia LEFT JOIN combina los valores de la primera tabla con los valores de la
segunda tabla. Siempre devolver las filas de la primera tabla, incluso aunque no cumplan la
condicin.

SELECT
*
LEFT
JOIN
WHERE tabla1.columna1 = tabla2.columna1
Ejemplo de SQL LEFT JOIN
Tabla personas, con la clave primaria "per "

FROM

tabla1
tabla2

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

SELECT
nombre,
FROM
LEFT
JOIN
WHERE personas.dep = departamentos.dep

apellido1,

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

departamento
personas
departamentos

Aunque el departamento '4' de PEDRO RUIZ no existe en la tabla de departamentos,


devolver la fila con esa columna 'departamento' en blanco.
RIGHT JOIN
La sentencia RIGHT JOIN combina los valores de la primera tabla con los valores de la segunda
tabla. Siempre devolver las filas de la segunda tabla, incluso aunque no cumplan la condicin.
En algunas bases de datos, la sentencia RIGHT JOIN es igual a RIGHT OUTER JOIN

SELECT * FROM tabla1 RIGHT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1


EJEMPLO SQL RIGHT JOIN

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

SELECT
nombre,
FROM
RIGHT
JOIN
WHERE personas.dep = departamentos.dep

apellido1,

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

departamento
personas
departamentos

COMERCIAL
Aunque no exista ninguna persona del departamento 'COMERCIAL' (3), esta fila aparecer con
las otras columnas en blanco
FULL

JOIN

La sentencia FULL JOIN combina los valores de la primera tabla con los valores de la
segunda tabla. Siempre devolver las filas de las dos tablas, aunque no cumplan la condicin.
La sentencia FULL JOIN es la unin de LEFT JOIN y RIGHT JOIN

SELECT * FROM tabla1 FULL JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1


EJEMPLO SQL FULL JOIN

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

SELECT
FROM

nombre,

apellido1,

departamento
personas

FULL
JOIN
WHERE personas.dep = departamentos.dep

departamentos

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

COMERCIAL

UNION
La sentencia SQL UNION es utilizada para acumular los resultados de dos sentencias
SELECT.
Las dos sentencias SELECT tienen que tener el mismo nmero de columnas, con el mismo
tipo de dato y en el mismo orden.
Sintaxis SQL UNION

SELECT
columna1,
columna2
UNION
SELECT columna1, columna2 FROM tabla2

FROM

tabla1

Ejemplo SQL UNION


Tabla "personas_empresa1"

per

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "personas_empresa2"

per

nombre

apellido1

apellido2

JUAN

APARICIO

TENS

ANTONIO

GARCIA

RODRIGUEZ

LUIS

LOPEZ

VAZQUEZ

SELECT
nombre,
apellido1
FROM
UNION
SELECT nombre, apellido1 FROM personas_empresa2

nombre

apellido1

ANTONIO

PEREZ

personas_empresa1

ANTONIO

GARCIA

PEDRO

RUIZ

JUAN

APARICIO

LUIS

LOPEZ

La persona 'ANTONIO GARCIA RODRIGUEZ' aparecer solo una vez en el resultado,


porque no aparecern las filas repetidas.
UNION

ALL

La sentencia SQL UNION ALL es utilizada para acumular los resultados de dos sentencias
SELECT, incluso aparecern las filas que estn repetidas en los resultados de ambas
SELECT.
Las dos sentencias SELECT tienen que tener el mismo nmero de columnas, con el mismo
tipo de dato y en el mismo orden.
Sintaxis SQL UNION

SELECT
columna1,
columna2
UNION
SELECT columna1, columna2 FROM tabla2

FROM

tabla1
ALL

Ejemplo SQL UNION ALL


Tabla "personas_empresa1"

per

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "personas_empresa2"

per

nombre

apellido1

apellido2

JUAN

APARICIO

TENS

ANTONIO

GARCIA

RODRIGUEZ

LUIS

LOPEZ

VAZQUEZ

SELECT
nombre,
apellido1
FROM
UNION
SELECT nombre, apellido1 FROM personas_empresa2

nombre

apellido1

ANTONIO

PEREZ

personas_empresa1
ALL

ANTONIO

GARCIA

PEDRO

RUIZ

JUAN

APARICIO

ANTONIO

GARCIA

LUIS

LOPEZ

La persona 'ANTONIO GARCIA RODRIGUEZ' aparecer dos veces, porque est en los dos
resultados de las sentencias SELECT.
SELECT

INTO

La sentencia SQL SELECT INTO se utiliza para seleccionar datos de una tabla y copiarlos
en otra tabla diferente.
Se suele utilizar para hacer una copia de seguridad (backup) de los datos de una tabla.
Sintaxis SQL SELECT INTO

SELECT * INTO nuevatabla FROM tablaactual


Esta sentencia copiar todos los registros de la tabla 'tablaactual' en la tabla 'nuevatabla'.
La nueva tabla puede incluso estar en una base de datos diferente

SELECT
INTO
FROM tablaactual

nuevatabla

[IN

*
nuevabasedatos]

Si queremos hacer un backup de una tabla en otra

SELECT
INTO
FROM personas

*
personasBackup

Tambin se pueden seleccionar slo algunas columnas

SELECT
INTO
FROM personas

columna1,

columna2
personasBackup

Tambin se puede incluir una condicin (WHERE)

SELECT
INTO
FROM
WHERE nombre = 'ANTONIO'

*
personasBackup
personas

Se puede utilizar SELECT INTO con JOIN

SELECT
personas.nombre,
personas.apellido1,
departamentos.departamento
INTO
personasInformatica
FROM
personas
INNER
JOIN
departamentos
ON personas.dep = 'INFORMATICA'
CREATE

DATABASE

La sentencia CREATE DATABASE se utiliza para crear bases de datos.


Sintaxis CREATE DATABASE:

CREATE DATABASE nombreBaseDatos


Ejemplo CREATE DATABASE

CREATE DATABASE mibasededatos


CREATE

TABLE

La sentencia CREATE TABLE se utiliza para crear una tabla en una base de datos existente.
Sintaxis CREATE TABLE

CREATE
{
nombrecolumna1
nombrecolumna2
nombrecolumna3
..
}

TABLE

nombretabla
tipodato1,
tipodato2,
tipodato3,

Ejemplo CREATE TABLE

CREATE
{
nombre
apellido1
apellido2
dep
}

TABLE

personas
varchar(255),
varchar(255),
varchar(255),
int

Esta sentencia crear la base de datos 'personas' con 4 columnas.


Las columnas 'nombre', 'apellido1' y 'apellido2' son de tipo 'varchar', es decir, acepta valores
alfanumricos hasta una longitud mxima de 255 caracteres.
La columna 'dep' es de tipo 'int', es decir, acepta slo nmeros.

Existen diferentes tipos de datos, algunos son iguales en todas las bases de datos (MySQL,
ORACLE, DB2, ..) y otros pueden ser particulares para ser usados nicamente en alguna de
estas bases de datos.
Restricciones
Las CONSTRAINTS son restricciones que se utilizan para limitar el tipo de dato que puede
recibir una columna de una tabla.
Las restricciones se puede definir cuando creamos la tabla (CREATE TABLE) o
posteriormente con la sentencia ALTER TABLE.
Las posibles restricciones son:

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
NOT

NULL

La restriccin NOT NULL sirve para especificar que una columna no acepta el valor NULL,
es decir, que esa columna siempre tiene que tener algn valor, no puede estar vaca.
Ejemplo SQL NULL

CREATE TABLE personas { nombre varchar(255) NOT NULL, apellido1 varchar(255)


NOT NULL, apellido2 varchar(255) }
Esta sentencia crea una tabla denominada 'personas', donde tenemos 3 columnas.
Las columnas 'nombre' y 'apellido' llevan NOT NULL, esto quiere decir que cualquier fila
insertada en esta tabla tiene que tener algn valor para las columnas 'nombre' y 'apellido1'.
UNIQUE
La restriccin UNIQUE identifica de manera nica a cada fila de una tabla.
Puede haber varias restricciones UNIQUE en diferentes columnas de una tabla.
Existen varias formas diferentes de sintaxis segn el sistema de base de datos utilizado:
Ejemplo SQL UNIQUE para la base de datos MySQL

CREATE
{
identificador
nombre
apellido1
apellido2

TABLE
int
varchar(255)
varchar(255)

personas
NOT
NOT
NOT

NULL,
NULL,
NULL,
varchar(255),

UNIQUE
}

(identificador)

La sentencia anterior crea la tabla 'personas' con 4 columnas, donde la columna 'identifcador'
tiene un valor diferente para cada fila de la tabla.
Si intentamos insertar un fila con un identificador que ya exista, nos dar un error, y no nos
dejar insertarlo.
Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQLSERVIR, ACCESS

CREATE
{
identificador
nombre
apellido1
apellido2
}

TABLE
int
NOT
varchar(255)
varchar(255)

UNIQUE

personas
NULL
NOT
NOT

ALTER

UNIQUE,
NULL,
NULL,
varchar(255),
TABLE

La restriccin UNIQUE se puede aadir a una columna de una tabla, despus de ser creada,
mediante la sentencia ALTER TABLE.
Sintaxis de UNIQUE ALTER TABLE

ALTER
ADD UNIQUE (identificador)

TABLE

personas

Crea una restriccin UNIQUE (valor nico en toda la tabla) para la columna 'identificador'.
Se puede crear tambin restricciones para varias columnas a la vez

ALTER
TABLE
ADD
CONSTRAINT
UNIQUE (identificador, apellido1)

peronas
copersonas

Para eliminar una restriccin en la base de datos MySQL

ALTER
DROP INDEX copersonas

TABLE

personas

Para eliminar una restriccin en ORACLE, SQLSERVER y ACCESS

ALTER
DROP CONSTRAINT copersonas
PRIMARY

TABLE

personas
KEY

La clave primaria, PRIMARY KEY, identifica de manera nica cada fila de una tabla.
La columna definida como clave primaria (PRIMARY KEY) debe ser UNIQUE (valor nico) y
NOT NULL (no puede contener valores nulos).
Cada tabla slo puede tener una clave primaria (PRIMARY KEY).
Ejemplo PRIMARY KEY , clave primaria en MySQL

CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT
NULL, apellido1 varchar(255) NOT NULL, PRIMARY KEY (identificador) }
Ejemplo PRIMARY KEY , clave primaria en ORACLE, SQLSERVER, ACCESS

CREATE TABLE personas { identificador int NOT NULL PRIMARY KEY, nombre
varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, }
La clave primaria (PRIMARY KEY) puede estar compuesta por varias columnas, por ejemplo
por las columnas 'identificador' y 'nombre', entonces se define as:

CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT
NULL, apellido1 varchar(255) NOT NULL, CONSTRAINT pers PRIMARY KEY
(identificador, nombre) }
La clave primaria tambin se puede definir despus de haber creado la tabla, para eso
utilizaremos el comando ALTER TABLE

Ejemplo PRIMARY KEY con ALTER TABLE ALTER TABLE personas ADD PRIMARY
KEY (identificador)
Ejemplo PRIMARY KEY multiple ALTER TABLE ALTER TABLE personas CONSTRAINT
pers PRIMARY KEY (identificador, nombre)

FOREIGN KEY
La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para sealar
cual es la clave primaria de otra tabla.
La columna o columnas sealadas como FOREIGN KEY, solo podrn tener valores que ya
existan en la clave primaria PRIMARY KEY de la otra tabla.
Ejemplo de FOREIGN KEY
Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

Tabla personas, con una clave externa FOREIGN KEY 'dep', que hace referencia a la clave
primaria 'dep' de la tabla anterior 'departamentos' y por tanto, solo puede tener un valor de los
que tiene en esa tabla

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Definiciones de FOREIGN KEY en CREATE TABLE para MySQL

CREATE
TABLE
departamento
PRIMARY
}
CREATE
{
per
nombre
apellido1
dep
PRIMARY
FOREIGN
}

departamentos

dep

KEY

int

NOT
NULL,
varchar(255),
(dep)

TABLE
int

NOT

int
KEY

personas

NOT
KEY
REFERENCES

(dep)

NULL,
varchar(255),
varchar(255),
NULL,
(per),
departamentos(dep)

Definiciones de FOREIGN KEY en CREATE TABLE para ORACLE, ACCESS, SQLSERVER

CREATE
{
dep
int
departamento
}
CREATE
{
per
nombre
apellido1
dep
int
}

TABLE
NOT

departamentos
NULL

PRIMARY

KEY,
varchar(255),

TABLE
int

NOT
FOREIGN

KEY

NULL
REFERENCES

personas
PRIMARY

KEY,
varchar(255),
varchar(255),
departamentos
(dep)

Si la clave externa o fornea (FOREIGN KEY) est compuesta por varias columnas o queremos
ponerle un nombre, utilizaremos la frmula siguiente:

CONSTRAINT fkpersonas FOREIGN KEY (dep, id) REFERENCES departamentos(dep,id).


Ejemplo FOREIGN KEY con ALTER TABLE

ALTER TABLE ADD FOREIGN KEY (dep) REFERENCES departamentos(dep)

Ejemplo FOREIGN KEY mltiple (varias columnas) con ALTER TABLE:

ALTER TABLE ADD CONSTRAINT fkpersonas FOREIGN KEY (dep) REFERENCES


departamentos(dep)
Para borrar un clave externa (FOREIGN KEY) utilizamos DROP, pero vara segn la base de
dato:

Borrar FOREIGN KEY en MySQL ALTER TABLE personas DROP FOREIGN KEY dep
Borrar FOREIGN KEY en ORACLE, SQLSERVER y ACCESS

ALTER TABLE personas DROP CONSTRAINT dep


CHECK
La restriccin CHECK se utiliza para limitar el rango de valores que puede tener una columna.
Se pueden definir varias restricciones CHECK en una tabla.
Ejemplo CHECK en MySQL

CREATE TABLE departamentos { dep int NOT NULL, departamento varchar(255),


CHECK (dep>0) }
Ejemplo CHECK en ORACLE, SQLSERVER y ACCESS:

CREATE TABLE departamentos { dep int NOT NULL CHECK (dep>0) departamento
varchar(255), }
Ejemplo CHECK en ALTER TABLE en MySQL

ALTER TABLE departamentos ADD CHECK (dep>0)


Ejemplo CHECK (con mltiples columnas) en ALTER TABLE en MySQL

ALTER TABLE personas ADD CHECK (per>0, edad>35)


Ejemplo CHECK en ALTER TABLE en ORACLE, SQLSERVER y ACCESS

ALTER TABLE departamentos ADD CONSTRAINT ckdepart CHECK (dep>0)


Ejemplo CHECK en ALTER TABLE con varias columnas

ALTER TABLE personas


nombre='antonio')
DEFAULT

ADD

CONSTRAINT

ckpersona

CHECK

(pers>0,

La restriccin DEFAULT se utiliza para establecer un valor por defecto a una columna.
Si no se especifica un valor al insertar una fila, entonces se podr el valor por defecto
(DEFAULT) que tenga cada columna.
SQL DEFAULT en la sentencia CREATE TABLE
CREATE TABLE pedidos { idpedido int, producto int, cantidad int, fecha date DEFAULT
GETDATE() }
Si al crear un pedido, no especificamos el valor de la columna 'fecha', entonces para esa
columna se insertar por defecto obtenido de ejecutar la funcion GETDATE(), que devuelve
la fecha del sistema
En lugar de una funcin, podemos insertar una valor concreto '2001-01-01' o cualquier otro
valor.
SQL DEFAULT en la sentencia ALTER TABLE para MySQL

ALTER TABLE pedidos ALTER fecha DEFAULT '2012-01-01'


SQL DEFAULT en la sentencia ALTER TABLE para ORACLE, SQLSERVER, ACCESS:

ALTER TABLE pedidos ALTER COLUMN fecha SET DEFAULT '2012-01-01'


Para borrar DEFAULT en MySQL

ALTER TABLE pedidos ALTER fecha DROP DEFAULT


Para borrar DEFAULT en ORACLE, SQLSERVER, ACCESS:

ALTER TABLE pedidos ALTER COLUMN fecha DROP DEFAULT


CREATE

INDEX

CREATE INDEX se utiliza para crear ndices en una tabla.


Un ndice sirve para buscar datos rpidamente, y no tener que recorrer toda la tabla
secuencialmente en busca alguna fila concreta.
Si una columna es ndice de una tabla, al buscar por un valor de esa columna, iremos
directamente a la fila correspondiente. La bsqueda as es mucho ms ptima en recursos y
ms rpida en tiempo.
Si esa columna de bsqueda no fuese ndice, entonces tendramos que recorrer de forma
secuencial la tabla en busca de algn dato. Por eso, es importante crear un ndice por cada
tipo de bsqueda que queramos hacer en la tabla.
Actualizar una tabla con ndices tarda ms tiempo porque tambin hay que actualizar los
ndices, as que solo se deben poner ndices en las columnas por las que buscamos
frecuentemente.

Se pueden crear ndices NICOS, es decir, ndices que no admiten valores duplicados.
Sintaxis para SQL CREATE INDEX

CREATE
ON nombretabla (nombrecolumna)

INDEX

nombreindice

La columna que forma parte de este ndice admite valores duplicados en su columna.
Sintaxis para SQL CREATE UNIQUE INDEX

CREATE
UNIQUE
ON nombretabla (nombrecolumna)

INDEX

nombreindice

La columna que forma parte de este ndice NO admite valores duplicados en su columna,
porque es una clave nica.
Ejemplos para SQL CREATE INDEX
Creamos la ndice 'indicepersonas' sobre la columna 'persona' de la tabla 'personas'

CREATE
ON personas (persona)

INDEX

indicepersonas

Si queremos crear un ndice sobre varias columnas, por ejemplo, apellido1 y apellido2

CREATE
ON personas(apellido1, apellido2)

INDEX

indice2personas

DROP
La sentencia DROP se utiliza para borrar definitivamente un ndice, tabla o base de datos.
DROP INDEX
Sintaxis DROP INDEX para MySQL

ALTER
DROP INDEX nombreindice

TABLE

nombretabla

Sintaxis DROP INDEX para DB2 y ORACLE

DROP INDEX nombreindice


Sintaxis DROP INDEX para ACCESS

DROP
ON nombretabla

INDEX

nombreindice

Sintaxis DROP INDEX para SQLSERVER

DROP INDEX nombretabla.nombreindice


DROP TABLE
Se utiliza DROP TABLE para borrar definitivamente una tabla

DROP TABLE nombretabla


DROP DATABASE
Se utiliza para borrar una base de datos definitivamente.

DROP DATABASE nombrebasededatos


TRUNCATE
Este comando SQL TRUNCATE se utiliza para eliminar o borrar los datos que contiene una
tabla.
Es til cuando slo se quiere borrar los datos, pero no se quiere borrar la tabla.
Este comando deja vaca una tabla, es decir, sin datos.

TRUNCATE TABLE nombretabla

La sentencia SQL ALTER se utiliza para aadir, eliminar o modificar columnas de una tabla.
Sintaxis SQL ALTER
Para aadir una nueva columna a una tabla

ALTER
TABLE
ADD nombrecolumna tipodatocolumna

nombretabla

Para borrar una columna de una tabla

ALTER
DROP COLUMN nombrecolumna

TABLE

nombretabla

Para modificar el tipo de dato de una columna de una tabla

ALTER
TABLE
ALTER COLUMN nombrecolumna tipodatocolumna
Ejemplos de SQL ALTER

nombretabla

per

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Dada la siguiente tabla de 'personas', queremos aadir una nueva columna, denominada
'fechadenacimiento'

ALTER
ADD fechadenacimiento date

TABLE

per nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

personas

fechadenacimiento

Si queremos modificar el tipo de dato de la columna 'fecha', y ponerle tipo 'year' en lugar de tipo
'date'

ALTER
TABLE
ALTER COLUMN fechadenacimiento year

personas

Si queremos borrar la columna 'fechadenacimiento', y dejarlo igual que al principio

ALTER
DROP COLUMN fechadenacimiento

TABLE

personas

per

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

AUTO

INCREMENT

AUTO INCREMENT permite generar un nmero nico cuando insertamos un nuevo registro
en la tabla.
Se utiliza para tener una clave primaria de una tabla mediante la generacin automtica de
un nmero secuencial nico en la tabla.
Sintaxis SQL AUTO INCREMENT

CREATE TABLE personas { persona int NOT NULL AUTO_INCREMENT, nombre


varchar(255), apellido1 varchar(255), apellido2 varchar(255) }
El valor inicial de una valor auto incremental (AUTO_INCREMENT) es 1, y se le va sumando
1 cada nuevo registro grabado en la tabla.
Si queremos que el valor inicial sea 100 en lugar de 1

ALTER TABLE personas AUTO_INCREMENT=100


Para SQL SERVER se utiliza IDENTITY en lugar de AUTO_INCREMENT
Para ACCESS se utiliza AUTOINCREMENT en lugar de AUTO_INCREMENT
Para ORACLE se define de forma diferente

CREATE SEQUENCE persona MINVALUE 1 START WITH 1 INCREMENT BY 1


CACHE 10
VIEWS
Una vista es una tabla virtual.
SQL CREATE VIEW
Una vista es una tabla virtual basada en el resultado de una consulta (SELECT) a una tabla.

CREATE
SELECT
FROM
WHERE condicin

VIEW

nombrevista

AS
nombrecolumna(s)
nombretabla

Las vista muestran siempre datos reales de una o varias tablas.


Cada vez que un usuario pregunta o consulta una vista, el sistema de base de datos, actualiza
los datos de la vista, para mostrar siempre datos reales.
Ejemplo SQL CREATE VIEW
En la tabla personas
>

nombre

apellido1

apellido2

edad

ANTONIO

PEREZ

GOMEZ

30

ANTONIO

GARCIA

RODRIGUEZ

45

PEDRO

RUIZ

GONZALEZ

50

Creamos una vista con las personas que se llaman ANTONIO

CREATE
VIEW
[personas
SELECT
nombre,
FROM
WHERE nombre = 'ANTONIO'

que

se
llaman
apellido1,

ANTONIO]
AS
apellido2,edad
personas

Para consultar los datos de una vista

SELECT * FROM [personas que se llama ANTONIO]


En la vista [personas que se llama ANTONIO] tenemos los datos siguientes:
>

nombre

apellido1

apellido2

edad

ANTONIO

PEREZ

GOMEZ

30

ANTONIO

GARCIA

RODRIGUEZ

45

SQL REPLACE VIEW


Para reemplazar o modificar los datos de una vista:

REPLACE
VIEW
[personas
SELECT
nombre,
FROM
WHERE edad > 20

que
se
apellido1,

llama
ANTONIO]
AS
apellido2,
edad
personas

SQL DROP VIEW


Para borrar una vista

DROP VIEW nombrevista


Ejemplo borrado de la vista antes creada:

DROP VIEW [personas que se llama ANTONIO]

DATES
Existen diferentes formatos para almacenar las fechas y horas en los distintos sistemas de
bases de datos.
Los tipos de datos de cada columna se definen cuando se crea la tabla.
Tipos de Datos para las fechas y horas en la base de datos MySQL

Tipo

Formato

Ejemplo

DATE

YYYY-MM-DD

2008-11-11

DATETIME

YYYY-MM-DD HH:MM:SS

2008-11-11 13:23:44

TIMESTAMP YYYY-MM-DD HH:MM:SS


YEAR

YYYY o YY

Funciones para MySQL sobre estos tipos de datos de fecha anteriores

NOW

Muestra la fecha y hora actuales. Por ejemplo: 200811-11 12:45:34

CURDATE

Muestra la fecha actual. Por ejemplo: 2008-11-11

CURTIME

Muestra la hora actual. Por ejemplo: 12:45:34

DATE

Muestra la parte fecha de una expresin fecha/hora

EXTRACT

Muestra una parte de una expresin fecha/hora

DATE_ADD

Muestra una fecha como suma de un intervalo de


tiempo a una fecha

DATE_SUB

Muestra una fecha como resta de un intervalo de


tiempo a una fecha

DATEDIFF

Muestra el nmero de das entre 2 fechas

DATE_FORMAT Muestra una fecha y hora con diferentes formatos


Tipos de Datos para fechas y horas en la base de datos SQL Server

DATE

Formato YYYY-MM-DD

DATETIME

Formato YYYY-MM-DD HH:MM:SS

SMALLDATETIME Formato YYYY-MM-DD HH:MM:SS


TIMESTAMP

Se genera un valor basado en la hora del sistema.


Se actualiza automticamente.

Funciones para SQL Server sobre los tipos de datos de fecha y hora anteriores

GETDATE

Muestra la fecha y hora actuales

DATEPART Muestra parte de una fecha y hora


DATEADD Muestra una fecha como suma o resta de un intervalo de
tiempo sobre una fecha
DATEDIFF Muestra el tiempo entre 2 fechas
CONVERT Muestra la fecha y hora en diferentes formatos
Ejemplos del uso de fecha y hora

CREATE
(
idpedido
nombreproducto

TABLE
int
varchar(50)

pedidos
NOT
NOT

NULL,
NULL,

fechapedido
PRIMARY
)

datetime

NOT

NULL
(idpedido)

KEY

idpedido

nombreproducto

fechapedido

papel oficina

2012-02-23 14:05:00

Si queremos almacenar solo la fecha (y no la hora) utilizaremos el tipo de datos 'date' en


lugar de 'datetime'.
VALORES

NULL

El valor NULL representa a un valor desconocido.


Este valor NULL puede ser asignado como valor a cualquier columna de una tabla.
Si el valor de una columna es opcional, quiere decir, que podemos insertar una fila en la tabla
sin asignarle ningn valor a esa columna opcional, as que esa columna tomar el valor
NULL.
El valor NULL es un valor especial, y por tanto, no se puede comparar con los operadores
aritmticos normales (=, >, <, <>), y en su lugar debemos utilizar los operadores IS y IS NOT.
En la tabla personas, tenemos la columna 'apellido2' que es opcional y puede tener valores
nulos:
>

nombre

apellido1

ANTONIO

PEREZ

LUIS

LOPEZ

ANTONIO

GARCIA

apellido2

edad
30

PEREZ

45
50

Ejemplo de uso de IS NULL

SELECT * FROM personas WHERE apellido2 IS NULL


>

nombre

apellido1

apellido2

edad

ANTONIO

PEREZ

30

ANTONIO

GARCIA

50

Ejemplo de uso de IS NOT NULL

SELECT * FROM personas WHERE apellido2 IS NOT NULL


>

nombre

apellido1

apellido2

edad

LUIS

LOPEZ

PEREZ

45

FUNCIONES

NULL

Si queremos cambiar un valor NULL por otro valor cualquiera, utilizaremos las siguientes
funciones (ISNULL, IFNULL, NVL, COLACESCE) segn el sistema de base de datos.
Para nuestros ejemplos, queremos que si el valor es NULL se cambie por el valor 0
Ejemplo para SQL SERVER se utiliza ISNULL:

SELECT
preciounidad
*
FROM productos

(unidadesstock

producto,
ISNULL(unidadespedido,
0)

Ejemplo para ORACLE se utiliza NVL:

SELECT
preciounidad
FROM productos

(unidadesstock

producto,
NVL(unidadespedido,
0)

Ejemplo para MySQL, hay 2 funciones equivalentes (IFNULL, COALESCE):

SELECT
preciounidad
*
FROM productos
SELECT
preciounidad
*
FROM productos
DATOS

(unidadesstock

(unidadesstock
TEXTO

producto,
IFNULL(unidadespedido,
0)

producto,
COALESCE(unidadespedido,
0)
para

MySQL

Tipos de datos y rango de datos para el sistema de gestin de bases de datosMySQL


Tipos de datos de TEXTO en MySQL
CHAR
El tipo de dato CHAR sirve para almacenar una cadena de datos de longitud fija.
Puede contener caracteres, nmeros y caracteres especiales.
La longitud fija se define entre parntesis, y siempre reservar espacio para esta longitud
aunque no se utilice.
Por ejemplo, CHAR(50), ser un campo de longitud fija de 50 posiciones.
La longitud mxima que podemos definir un campo CHAR es de 255.

VARCHAR
El tipo de datos VARCHAR sirve para almacenar una cadena de datos (caracteres, nmeros
y caracteres especiales) de longitud variable.
La longitud mxima es de 255 caracteres.
Hace un buen uso del espacio en disco, porque no reserva el espacio de la longitud mxima
definida, si no que solo ocupa espacio el tamao real de los datos almacenados en ese
campo.
Es el tipo de dato ms utilizado para campos pequeos.

TINYTEXT
El tipo de datos TINYTEXT sirve para almacenar una cadena de datos (solo caracteres, no
admite nmero ni caracteres especiales) de una longitud mxima de 255 caracteres.

TEXT
El tipo de dato TEXT sirve para almacenar una cadena de caracteres de longitud mxima de
65,535 caracteres.

BLOB
El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large Object).
Admite una longitud mxima de 65,535 bytes de datos.

MEDIUMTEXT
El tipo de dato MEDIUMTEXT sirve para almacenar una cadena con una longitud mxima de
16.777.215 caracteres.

MEDIUMBLOB
El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con longitud mxima
16.777.215 bytes.

LONGTEXT

El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud mxima de
4.294.967.295 caracteres.

LONGBLOB
El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud mxima de de
4.294.967.295 bytes.

ENUM
El tipo de dato ENUM sirve para introducir una lista de posibles valores.
La longitud mxima es de 65.535 posibles valores.
Si se intenta introducir un valor en este campo, que no est incluido en la lista, no se insertar
nada y tendr un valor vaco ('').
Por ejemplo si definimos una columna como ENUM('uno', 'dos'), entonces en esta columna
solo puede almacenar los valores 'uno' o 'dos'.
Si queremos insertar cualquier otro valor (por ejemplo 'tres'), no se grabar 'tres' y en su lugar
quedar el campo vaco, sin valor ('').

SET
El tipo de dato SET es similar a ENUM pero la longitud mxima de valores posibles es de 64,
y los valores posibles se pueden combinar.
Por ejemplo, si definimos una columna como SET ('uno', 'dos) entonces esa columna podr
tomar los siguientes valores 'uno' o 'dos' o 'uno,dos', 'dos,uno'
DATOS

NUMRICOS

para

MySQL

Tipos de datos numricos para el sistema de gestin de bases de datosMySQL


MySQL admite los siguientes tipos de datos numricos para sus columnas
TINYINT
El tipo de dato numrico TINYINT permite nmeros desde -128 hasta 127.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 255.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis (tamao).

SMALLINT
El tipo de dato numrico SMALLINT permite nmeros desde -32768 hasta 32767.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 65535.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis

MEDIUMINT
El tipo de dato numrico MEDIUMINT permite nmeros desde -8388608 hasta 8388607.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 16777215.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis

INT
El tipo de dato numrico INT permite nmeros desde -2147483648 hasta 2147483647.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 4294967295.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis

BIGINT
El tipo de dato numrico BIGINT permite nmeros desde -9223372036854775808 hasta
9223372036854775807.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 18446744073709551615.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis

FLOAT
El tipo de dato numrico FLOAT permite almacenar pequeos nmeros decimales (de punto
flotante).
Al ser de punto flotante, sus clculos son aproximados. Podemos especificar el nmero
mximo de dgitos (tamao) y el nmero de decimales (decimal).

FLOAT(6,2) tendr 4 dgitos enteros y 2 decimales, por ejemplo, 5467.67

DOUBLE
El tipo de dato numrico DOUBLE permite almacenar grandes nmeros decimales (de punto
flotante).
Al ser de punto flotante, sus clculos son aproximados. Podemos especificar el nmero
mximo de dgitos (tamao) y el nmero de decimales (decimal).
DOUBLE(5,1) tendr 4 dgitos enteros y 1 dgito decimal, por ejemplo, 5467.1

DECIMAL
El tipo de dato numric DECIMAL permite almacenar grandes nmeros decimales de punto
fijo, por tanto, los clculos con este tipo DECIMAL son exactos.
Podemos especificar el nmero mximo de dgitos (tamao) y el nmero de decimales
(decimal). El nmero mximo de dgitos es de 65.
Por ejemplo DECIMAL(20,6) quiere decir que tendr 14 dgitos enteros y 4 dgitos decimales.
SQL DATOS FECHA MYS
DATOS

FECHA

para

MySQL

En MySQL pueden existir los siguientes tipos de datos para fechas

DATE
El tipo de dato DATE sirve para almacenar una fecha con el formato YYYY-MM-DD (4 dgitos
para el ao, guin, 2 dgitos para el mes, guin, 2 dgitos para el da).

DATETIME
El tipo de dato DATETIME sirve para almacenar fecha y hora, con el formato YYYY-MM-DD
HH:MM:SS

TIMESTAMP
El tipo de dato TIMESTAMP es equivalente al tipo anterior, DATETIME, YYYY-MM-DD
HH:MM:SS

TIME
El tipo de dato TIME sirve para almacenar la hora con el formato HH:MM:SS

YEAR
El tipo de dato YEAR sirve para almacenar el ao con el formato YYYY
DATOS

NUMRICOS

para

MySQL

Tipos de datos numricos para el sistema de gestin de bases de datosMySQL


MySQL admite los siguientes tipos de datos numricos para sus columnas
TINYINT
El tipo de dato numrico TINYINT permite nmeros desde -128 hasta 127.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 255.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis (tamao).

SMALLINT
El tipo de dato numrico SMALLINT permite nmeros desde -32768 hasta 32767.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 65535.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis

MEDIUMINT
El tipo de dato numrico MEDIUMINT permite nmeros desde -8388608 hasta 8388607.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 16777215.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis

INT

El tipo de dato numrico INT permite nmeros desde -2147483648 hasta 2147483647.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 4294967295.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis

BIGINT
El tipo de dato numrico BIGINT permite nmeros desde -9223372036854775808 hasta
9223372036854775807.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 18446744073709551615.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis

FLOAT
El tipo de dato numrico FLOAT permite almacenar pequeos nmeros decimales (de punto
flotante).
Al ser de punto flotante, sus clculos son aproximados. Podemos especificar el nmero
mximo de dgitos (tamao) y el nmero de decimales (decimal).
FLOAT(6,2) tendr 4 dgitos enteros y 2 decimales, por ejemplo, 5467.67

DOUBLE
El tipo de dato numrico DOUBLE permite almacenar grandes nmeros decimales (de punto
flotante).
Al ser de punto flotante, sus clculos son aproximados. Podemos especificar el nmero
mximo de dgitos (tamao) y el nmero de decimales (decimal).
DOUBLE(5,1) tendr 4 dgitos enteros y 1 dgito decimal, por ejemplo, 5467.1

DECIMAL
El tipo de dato numric DECIMAL permite almacenar grandes nmeros decimales de punto
fijo, por tanto, los clculos con este tipo DECIMAL son exactos.
Podemos especificar el nmero mximo de dgitos (tamao) y el nmero de decimales
(decimal). El nmero mximo de dgitos es de 65.
Por ejemplo DECIMAL(20,6) quiere decir que tendr 14 dgitos enteros y 4 dgitos decimales.

S-ar putea să vă placă și