Vous êtes sur la page 1sur 43

SQL

Manual SQL
1.

Introduccin

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.
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).

SQL

2.

Sintaxis

Un sistema de base de datos suele contener varias bases de datos. Cada base de datos suele
contener varias tablas. Las tablas almacenan los datos organizados por filas. Cada fila
contiene varios campos.
Cada campo tiene una serie de propiedades, como por ejemplo, el nombre del campo, su
longitud, tipo de dato que se va a almacenar, etc. Las sentencias SQL no son sensibles a
maysculas y minsculas, es decir, 'SELECT' y 'select' son dos palabras iguales para SQL.
Algunos sistemas de bases de datos necesitan un punto y coma despus de cada sentencia
SQL para ejecutarse correctamente
CREATE DATATABASE mibasedeatos;
Este punto y coma tambin puede servir para separar una sentencia SQL de otra sentencia
SQL en la misma lnea.
CREATE DATATABASE mibasedeatos; CREATE TABLE mitabla1;
Las sentencias SQL se pueden agrupar por funcionalidades:
A.- Lenguaje de definicin de datos (DDL).
DDL est compuesto por sentencias para la creacin (CREATE), modificacin (ALTER) y
borrado (DROP) de los componentes principales de una base de datos:
base de datos (DATABASE), tablas (TABLE), vistas (VIEW), ndices (INDEX),
procedimientos almacenados (PROCEDURE), disparadores (TRIGGER).
B.- Lenguaje de manipulacin de datos (DML).
DML est compuesto por sentencias que sirven para :
consultar (SELECT), insertar (INSERT), modificar (UPDATE), borrar (DELETE)
C.- Lenguaje de control de datos (DCL).
DCL est compuesto por sentencias SQL para controlar las funciones de administracin :
Confirmar la operacin (COMMIT), retroceder la operacin (ROLLBACK), dar permisos
(GRANT), quitar permisos (REVOKE).

SQL

3.

Sentencia 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 consultar todos los nombres y primer apellido de todas las personas:
SELECT nombre, apellido1 FROM personas
nombre

apellido1

ANTONIO

PEREZ

ANTONIO

GARCIA

LUIS

LOPEZ

SQL

4.

Sentencia DISTINC

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

5.

Sentencia 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 * FROM personas WHERE nombre = 'ANTONIO'
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

SQL

6.

Operadores OR y 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.
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 * FROM personas WHERE nombre='ANTONIO' AND apellido1 = 'GARCIA'
nombre

apellido1

apellido2

ANTONIO

GARCIA

BENITO

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


SELECT * FROM personas WHERE nombre = 'ANTONIO' OR apellido1 = 'GARCIA'
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

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


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

apellido1

apellido2

ANTONIO

GARCIA

BENITO

SQL

7.

ORDER 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 nombre_columna(s) FROM nombre_tabla
ORDER BY nombre_columna(s) ASC|DESC
Por ejemplo, en la tabla personas :
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

BENITO

SELECT nombre, apellido1 FROM personas ORDER BY apellido1 ASC


Esta es la consulta resultante:
nombre

apellido1

LUIS

LOPEZ

ANTONIO

GARCIA

ANTONIO

PEREZ

Ejemplo de ordenacin descendiente (DES):


SELECT nombre, apellido1 FROM personas ORDER BY apellido1 DESC
nombre

apellido1

ANTONIO

PEREZ

ANTONIO

GARCIA

LUIS

LOPEZ

SQL

8.

Sentencia 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 INTO nombre_tabla
VALUES (valor1, valor2, valor3, .)
INSERT INTO nombre_tabla (columna1, columna2, columna3,.)
VALUES (valor1, valor2, valor3, .)
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 personas VALUES ('PEDRO', 'RUIZ', 'GONZALEZ')
INSERT INTO personas (nombre, apellido1, apellido2)
VALUES ('PEDRO', 'RUIZ', 'GONZALEZ')
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

SQL

9.

Sentencia UPDATE

La sentencia UPDATE se utiliza para modificar valores en una tabla. La sintaxis de SQL
UPDATE es:
UPDATE nombre_tabla SET columna1 = valor1, columna2 = valor2
WHERE columna3 = valor3
La clusula SET establece los nuevos valores para las columnas indicadas. 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 personas SET apellido2 = 'RODRIGUEZ' WHERE nombre = 'ANTONIO'
AND apellido1 = 'GARCIA' AND apellido2 = 'BENITO'
Ahora la tabla 'personas' quedar as:
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

SQL

10. Sentencia DELETE


La sentencia DELETE sirve para borrar filas de una tabla. La sintaxis de SQL DELETE es:
DELETE FROM nombre_tabla WHERE nombre_columna = valor
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 FROM personas WHERE nombre = 'LUIS'
AND apellido1 = 'LOPEZ' AND apellido2 = 'PEREZ'
La tabla 'personas' resultante ser:
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

11. Sentencia TOP


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.

SQL

Clusula SQL TOP para SQL SERVER:


SELECT TOP nmero PERCENT nombre_columna FROM nombre_tabla
Clusula SQL TOP para MySQL:
SELECT columna(s) FROM tabla LIMIT nmerofilas
Clusula SQL TOP para ORACLE:
SELECT columna(s) FROM tabla 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


nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

12. Operador 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

10

SQL

Si quiero seleccionar los nombres que empiezan por 'AN' en la tabla 'personas', ejecutara el
comando siguiente:
SELECT * FROM personas WHERE nombre LIKE 'AN%'
El carcter '%' 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, para seleccionar las personas que tienen un 'Z' en su apellido1,
ejecutaramos:
SELECT * FROM personas WHERE apellido1 LIKE '%Z%'
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

PEDRO

RUIZ

GONZALEZ

13. 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] o [!lista] sustituye a cualquier carcter excepto los caracteres de la lista

11

SQL

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 * FROM personas WHERE nombre LIKE '%R%'
Resultado:
nombre

apellido1

apellido2

PEDRO

RUIZ

GONZALEZ

Seleccionar las personas cuyo apellido1 empiece por 'GO'


SELECT * FROM personas
WHERE apellido1 LIKE GO%
Resultado:
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

Seleccionar las personas cuyo apellido1 empiece por P o G


SELECT * FROM personas WHERE apellido1 LIKE '[PG]%'
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

12

SQL

14. Operador IN
El operador IN permite seleccionar mltiples valores en una clusula WHERE. La sintaxis
SQL IN es:
SELECT columna FROM tabla WHERE columna IN (valor1, valor2, valor3, .)
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 * FROM personas WHERE apellido1 IN ('PEREZ','RUIZ')
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

PEDRO

RUIZ

GONZALEZ

15. Operador BETWEEN


El operador BETWEEN se utiliza en la clusula WHERE para seleccionar valores entre un
rango de datos. Sintaxis de SQL BETWEEN
SELECT columna FROM tabla WHERE columna BETWEEN valor1 AND valor2
Seleccionar personas cuyo apellido1 est entre 'FERNANDEZ y 'HUERTAS':
SELECT * FROM personas WHERE
apellido1 BETWEEN 'FERNANDEZ' AND 'HUERTAS'
nombre

apellido1

apellido2

ANTONIO

GARCIA

RODRIGUEZ

13

SQL

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


SELECT * FROM personas WHERE apellido1
NOT BETWEEN 'FERNANDEZ' AND 'HUERTAS'
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

PEDRO

RUIZ

GONZALEZ

16. ALIAS
Un alias, es otra forma de llamar a una tabla o a una columna, y se utiliza para simplificar
las sentencias SQL cuando los nombre de tablas o columnas son largos o complicados.
Sintaxis SQL ALIAS para una tabla:
SELECT columna FROM nombretabla AS aliastabla
Sintaxis SQL ALIAS para una columna
SELECT nombrecolumna AS aliascolumna FROM tabla
Ejemplos SQL ALIAS dada la siguiente tabla 'personas':
nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Utilizamos el alias 'p' para la tabla 'personas', para simplificar la sentencia SELECT
SELECT p.apellido1, p.apellido2 FROM personas AS p WHERE p.nombre = 'ANTONIO'
apellido1

apellido2

PEREZ

GOMEZ

GARCIA

RODRIGUEZ

14

SQL

Sin utilizar el alias, la sentencia SELECT quedara un poco ms larga:


SELECT personas.apellido1, personas.apellido2 FROM personas
WHERE personas.nombre = 'ANTONIO'
apellido1

apellido2

PEREZ

GOMEZ

GARCIA

RODRIGUEZ

17. Sentencia JOIN


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

15

SQL

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".
A.- 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
tabla2.columna1

tabla1

INNER

JOIN

tabla2

WHERE

tabla1.columna1

Ejemplo SQL INNER JOIN de la 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

16

SQL

B.- 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 * FROM tabla1 LEFT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1
Ejemplo de SQL LEFT JOIN de la 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


LEFT JOIN departamentos WHERE personas.dep = departamentos.dep
nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

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


devolver la fila con esa columna 'departamento' en blanco.

17

SQL

C.- 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, apellido1, departamento FROM personas


RIGHT JOIN departamentos WHERE personas.dep = departamentos.dep
nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA
COMERCIAL

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

18

SQL

D.- 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 nombre, apellido1, departamento FROM personas


FULL JOIN departamentos WHERE personas.dep = departamentos.dep
nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

COMERCIAL

19

SQL

18. Sentencia 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 FROM tabla1
UNION
SELECT columna1, columna2 FROM tabla2
Ejemplo SQL UNION de la 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 personas_empresa1


UNION
SELECT nombre, apellido1 FROM personas_empresa2
nombre

apellido1

ANTONIO

PEREZ

ANTONIO

GARCIA

PEDRO

RUIZ

JUAN

APARICIO

LUIS

LOPEZ

20

SQL

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


porque no aparecern las filas repetidas. 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:
SELECT columna1, columna2 FROM tabla1
UNION ALL
SELECT columna1, columna2 FROM tabla2
Ejemplo SQL UNION ALL de la 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

ELECT nombre, apellido1 FROM personas_empresa1


UNION ALL
SELECT nombre, apellido1 FROM personas_empresa2
nombre

apellido1

ANTONIO

PEREZ

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.

21

SQL

19. Sentencia 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 nuevatabla [IN nuevabasedatos]
FROM tablaactual
Si queremos hacer un backup de una tabla en otra:
SELECT * INTO personasBackup FROM personas
Tambin se pueden seleccionar slo algunas columnas:
SELECT columna1, columna2 INTO personasBackup FROM personas
Tambin se puede incluir una condicin (WHERE):
SELECT * INTO personasBackup FROM personas WHERE nombre = 'ANTONIO'
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'
20. Sentencia CREATE DATABASE
La sentencia CREATE DATABASE se utiliza para crear bases de datos. Sintaxis CREATE
DATABASE:
CREATE DATABASE nombreBaseDatos
Ejemplo:
CREATE DATABASE mibasededatos

22

SQL

21. Sentencia CREATE TABLE


La sentencia CREATE TABLE se utiliza para crear una tabla en una base de datos existente.
Sintaxis CREATE TABLE.
CREATE TABLE nombretabla
{
nombrecolumna1 tipodato1,
nombrecolumna2 tipodato2,
nombrecolumna3 tipodato3,
..
}
Ejemplo de crear una tabla:
CREATE TABLE personas
{
nombre varchar(255),
apellido1 varchar(255),
apellido2 varchar(255),
dep 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.
22. Tabla con campo calculado
CREATE TABLE productos(id_productos varchar (50) not null primary key, producto
varchar(50, costo decimal (8,2), preciosugerido decimal(8,2) as (costo*1.2))

23

SQL

23. 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.
24.

Restriccin 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'.
25. Restriccin 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 TABLE personas (
identificador int NOT NULL,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 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.

24

SQL

Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQL SERVER, ACCESS:
CREATE TABLE personas (
identificador int NOT NULL UNIQUE,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255))
26. Restriccin UNIQUE ALTER 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 TABLE personas ADD UNIQUE (identificador)
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
personas
UNIQUE (identificador, apellido1)

ADD

CONSTRAINT

copersonas

Para eliminar una restriccin en la base de datos MySQL:


ALTER TABLE personas DROP INDEX copersonas
Para eliminar una restriccin en ORACLE, SQL SERVER y ACCESS:
ALTER TABLE personas DROP CONSTRAINT copersonas
27. Restriccin PRIMARY 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) )
25

SQL

Ejemplo PRIMARY KEY , clave primaria en ORACLE, SQL SERVER, 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:
ALTER TABLE personas ADD PRIMARY KEY (identificador)
Ejemplo PRIMARY KEY mltiple:
ALTER TABLE personas CONSTRAINT pers PRIMARY KEY (identificador, nombre)
28. Restriccin 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 la Tabla "departamentos", con la clave primaria "dep":
dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

26

SQL

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 para MySQL:


Tabla 1:
CREATE TABLE departamentos (
dep int NOT NULL,
departamento varchar(255),
PRIMARY KEY (dep))
Tabla 2:
CREATE TABLE personas(
per int NOT NULL,
nombre varchar(255),
apellido1 varchar(255),
dep int NOT NULL,
PRIMARY KEY (per),
FOREIGN KEY (dep) REFERENCES departamentos(dep))

27

SQL

Definiciones para ORACLE, ACCESS, SQL SERVER:


Tabla 1:
CREATE TABLE departamentos (
dep int NOT NULL PRIMARY KEY,
departamento varchar(255))
Tabla 2:
CREATE TABLE personas (
per int NOT NULL PRIMARY KEY,
nombre varchar(255),
apellido1 varchar(255),
dep int FOREIGN KEY REFERENCES 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:
ALTER TABLE ADD FOREIGN KEY (dep) REFERENCES departamentos(dep)
Ejemplo 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:
En MySQL:
ALTER TABLE personas DROP FOREIGN KEY dep
En ORACLE, SQLSERVER y ACCESS:
ALTER TABLE personas DROP CONSTRAINT dep
28

SQL

29. Restriccin 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.
En MySQL:
CREATE TABLE departamentos ( dep int NOT NULL,
departamento varchar(255),
CHECK (dep>0) )
En ORACLE, SQLSERVER y ACCESS:
CREATE TABLE departamentos ( dep int NOT NULL CHECK (dep>0) departamento
varchar(255) )
Ejemplo en MySQL:
ALTER TABLE departamentos ADD CHECK (dep>0)
Ejemplo con mltiples columnas en MySQL:
ALTER TABLE personas ADD CHECK (per>0, edad>35)
Ejemplo en ORACLE, SQL SERVER y ACCESS:
ALTER TABLE departamentos ADD CONSTRAINT ckdepart CHECK (dep>0)
Ejemplo con varias columnas:
ALTER TABLE
nombre='antonio')

personas

ADD

CONSTRAINT

29

ckpersona

CHECK

(pers>0,

SQL

30. Restriccin DEFAULT


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 funcin 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

30

SQL

31. Sentencia 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:
CREATE INDEX nombreindice ON nombretabla (nombrecolumna)
La columna que forma parte de este ndice admite valores duplicados en su columna.
CREATE UNIQUE INDEX nombreindice ON nombretabla (nombrecolumna)
La columna que forma parte de este ndice NO admite valores duplicados en su columna,
porque es una clave nica.
Ejemplos:
Creamos la ndice 'indicepersonas' sobre la columna 'persona' de la tabla 'personas':
CREATE INDEX indicepersonas ON personas (persona)
Si queremos crear un ndice sobre varias columnas, por ejemplo, apellido1 y apellido2:
CREATE INDEX indice2personas ON personas(apellido1, apellido2)

31

SQL

32. Sentencia DROP


La sentencia DROP se utiliza para borrar definitivamente un ndice, tabla o base de datos.
Sintaxis para MySQL
ALTER TABLE nombretabla DROP INDEX nombreindice
Sintaxis para DB2 y ORACLE:
DROP INDEX nombreindice
Sintaxis para ACCESS:
DROP INDEX nombreindice ON nombretabla
Sintaxis para SQL SERVER:
DROP INDEX nombretabla.nombreindice
Se utiliza DROP TABLE para borrar definitivamente una tabla:
DROP TABLE nombretabla
Se utiliza para borrar una base de datos definitivamente:
DROP DATABASE nombrebasededatos
33. Sentencia 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
34. Sentencia ALTER
Se utiliza para aadir, eliminar o modificar columnas de una tabla. Sintaxis para aadir una
nueva columna a una tabla:
ALTER TABLE nombretabla ADD nombrecolumna tipodatocolumna
Para borrar una columna de una tabla:
ALTER TABLE nombretabla DROP COLUMN nombrecolumna
Para modificar el tipo de dato de una columna de una tabla:

32

SQL

ALTER TABLE nombretabla ALTER COLUMN nombrecolumna tipodatocolumna


Ejemplos:
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 TABLE personas ADD fechadenacimiento date
per

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

fechadenacimiento

Si queremos modificar el tipo de dato de la columna 'fecha', y ponerle tipo 'year' en lugar de
tipo 'date':
ALTER TABLE personas ALTER COLUMN fechadenacimiento year
Si queremos borrar la columna 'fechadenacimiento' y dejarlo igual que al principio:
ALTER TABLE personas DROP COLUMN fechadenacimiento:
per

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

33

SQL

35. Sentencia 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:
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
36. Sentencia VIEWS
Una vista es una tabla virtual, basada en el resultado de una consulta (SELECT) a una tabla.
CREATE VIEW nombrevista AS
SELECT nombrecolumnas FROM nombretabla WHERE condicin
Las vistas muestran 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.

34

SQL

Ejemplo, de 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 que se llaman ANTONIO] AS
SELECT nombre, apellido1, apellido2, edad FROM personas
WHERE nombre = 'ANTONIO'
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

Para reemplazar o modificar los datos de una vista:


REPLACE VIEW [personas que se llama ANTONIO] AS
SELECT nombre, apellido1, apellido2, edad FROM personas
WHERE edad > 20
Para borrar una vista:
DROP VIEW nombrevista
Ejemplo borrado de la vista antes creada:
DROP VIEW [personas que se llama ANTONIO]

35

SQL

37. 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: 2008-11-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

36

SQL

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 TABLE pedidos (
idpedido int NOT NULL,
nombreproducto varchar(50) NOT NULL,
fechapedido datetime NOT NULL,
PRIMARY KEY (idpedido) )
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'.

37

SQL

38. Datos 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

38

SQL

39. 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 producto,
preciounidad * (unidadesstock + ISNULL(unidadespedido, 0)
FROM productos
Ejemplo para ORACLE se utiliza NVL:
SELECT producto,
preciounidad * (unidadesstock + NVL(unidadespedido, 0)
FROM productos
Ejemplo para MySQL, hay 2 funciones equivalentes (IFNULL, COALESCE):
SELECT producto,
preciounidad * (unidadesstock + IFNULL(unidadespedido, 0)
FROM productos
SELECT producto,
preciounidad * (unidadesstock + COALESCE(unidadespedido, 0)
FROM productos

39

SQL

40. Datos de Texto MySQL


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

40

SQL

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'.
41. Datos de Nmero MySQL
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
41

SQL

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 numrico 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.

42

SQL

42. Datos de Fechas 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

43

Vous aimerez peut-être aussi