Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 cláusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar solamente algunas filas de la
tabla que cumplan una determinada condición.
El valor de la condición 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
ND OR
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.
Condición1 AND condición2
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
También 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
ORDER BY
ORDER BY se utiliza para ordenar los resultados de una consulta, según el valor de la columna especificada.
Por defecto, se ordena de forma ascendente (ASC) según 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 ordenación descendiente (DES)
SELECT nombre, apellido1
FROM personas
ORDER BY apellido1 DESC
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 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
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 cláusula SET establece los nuevos valores para las columnas indicadas.
La cláusula WHERE sirve para seleccionar las filas que queremos modificar.
Ojo: Si omitimos la cláusula 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
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
TOP
La sentencia SQL TOP se utiliza para especificar el número de filas a mostrar en el resultado.
Esta cláusula SQL TOP es útil en tablas con muchos registros, para limitar el número de filas a mostrar en la
consulta, y así sea más rápida la consulta, consumiendo también menos recursos en el sistema.
Esta cláusula se especifica de forma diferente según el sistema de bases de datos utilizado.
Cláusula SQL TOP para SQL SERVER
SELECT TOP número
PERCENT nombre_columna
FROM nombre_tabla
Cláusula SQL TOP para MySQL
SELECT columna(s) FROM tabla
LIMIT númerofilas
Cláusula SQL TOP para ORACLE
SELECT columna(s) FROM tabla
WHERE ROWNUM <= númerofilas
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
Obtendríamos el siguiente resultado:
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
LITE
El operador LIKE se utiliza en la cláusula WHERE para buscar por un patrón.
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', ejecutaría el comando siguiente:
SELECT * FROM personas
WHERE nombre LIKE 'AN%'
El character '%' es un comodín, que sirve para uno o más 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, ejecutaríamos:
SELECT * FROM personas
WHERE apellido1 LIKE '%Z%'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
WILDCARDS
Los caracteres Wildcards (comodines) son caracteres especiales que se utilizan para realizar búsquedas 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 más caracteres
_ sustituye a 1 carácter cualquiera
[lista] sustituye a cualquier carácter de la lista
[^lista] o [! sustituye a cualquier carácter excepto los caracteres de la
lista] 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 * FROM personas
WHERE nombre LIKE '%R%'
Resultado:
nombre apellido1 apellido2
PEDRO RUIZ GONZALEZ
Seleccionar las personas cuyo apellido1 empiece por 'GA'
SELECT * FROM personas
WHERE apellido1 LIKE 'PE_EZ'
Resultado:
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
Seleccionar las personas cuyo apellido1 empiece por P o G
SELECT * FROM personas
WHERE apellido1 LIKE '[PG]%'
Resultado:
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
IN
El operador IN permite seleccionar múltiples valores en una cláusula WHERE
Sintaxis SQL IN
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
BETWEEN
El operador BETWEEN se utiliza en la cláusula WHERE para seleccionar valores entre un rango de datos.
Sintaxis de SQL BETWEEN
SELECT columna
FROM tabla WHERE columna
BETWEEN valor1 AND valor2
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 personas
WHERE apellido1
BETWEEN 'FERNANDEZ' AND 'HUERTAS'
nombre apellido1 apellido2
ANTONIO GARCIA RODRIGUEZ
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
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
Sin utilizar el alias, la sentencia SELECT quedaría un poco más larga:
SELECT personas.apellido1, personas.apellido2
FROM personas
WHERE personas.nombre = 'ANTONIO'
apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ
JOINS
La sentencia SQL JOIN permite consultar datos de 2 o más tablas.
Dichas tablas estarán relacionadas entre ellas de alguna forma, a través 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 propósito del JOIN es unir información 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
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
Si queremos saber los nombres de las personas que trabajan en INFORMATICA, tendríamos que hacer un JOIN de
las 2 tablas "personas" y "departamentos", que se relacionarían por la columna "dep".
Es decir, que desde la tabla "personas" y mediante la columna "dep", podemos acceder a la información 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 condición.
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
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 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 condición.
SELECT * FROM tabla1
LEFT JOIN tabla2
WHERE tabla1.columna1 = tabla2.columna1
Ejemplo de SQL LEFT JOIN
Tabla personas, con la clave primaria "per "
per nombre apellido1 apellido2 dep
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 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.
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 condición.
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
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 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
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 condición.
La sentencia FULL JOIN es la unión 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
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 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
UNION
La sentencia SQL UNION es utilizada para acumular los resultados de dos sentencias SELECT.
Las dos sentencias SELECT tienen que tener el mismo número 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
Tabla "personas_empresa1"
per nombre apellido1 apellido2
1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
Tabla "personas_empresa2"
per nombre apellido1 apellido2
1 JUAN APARICIO TENS
2 ANTONIO GARCIA RODRIGUEZ
3 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
La persona 'ANTONIO GARCIA RODRIGUEZ' aparecerá solo una vez en el resultado, porque no aparecerán las filas
repetidas.
UNION ALL
La sentencia SQL UNION ALL es utilizada para acumular los resultados de dos sentencias SELECT, incluso
aparecerán las filas que estén repetidas en los resultados de ambas SELECT.
Las dos sentencias SELECT tienen que tener el mismo número de columnas, con el mismo tipo de dato y en el
mismo orden.
Sintaxis SQL UNION
SELECT columna1, columna2 FROM tabla1
UNION ALL
SELECT columna1, columna2 FROM tabla2
Ejemplo SQL UNION ALL
Tabla "personas_empresa1"
per nombre apellido1 apellido2
1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
Tabla "personas_empresa2"
per nombre apellido1 apellido2
1 JUAN APARICIO TENS
2 ANTONIO GARCIA RODRIGUEZ
3 LUIS LOPEZ VAZQUEZ
SELECT 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.
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
También se pueden seleccionar sólo algunas columnas
SELECT columna1, columna2
INTO personasBackup
FROM personas
También se puede incluir una condición (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'
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 TABLE nombretabla
{
nombrecolumna1 tipodato1,
nombrecolumna2 tipodato2,
nombrecolumna3 tipodato3,
..
}
Ejemplo CREATE TABLE
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 alfanuméricos hasta
una longitud máxima de 255 caracteres.
La columna 'dep' es de tipo 'int', es decir, acepta sólo números.
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 restricción NOT NULL sirve para especificar que una columna no acepta el valor NULL, es decir, que esa columna
siempre tiene que tener algún valor, no puede estar vacía.
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 algún valor para las columnas 'nombre' y 'apellido1'.
UNIQUE
La restricción 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 según 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.
Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQLSERVIR, ACCESS
CREATE TABLE personas
{
identificador int NOT NULL UNIQUE,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
}
UNIQUE ALTER TABLE
La restricción UNIQUE se puede añadir a una columna de una tabla, después de ser creada, mediante la sentencia
ALTER TABLE.
Sintaxis de UNIQUE ALTER TABLE
ALTER TABLE personas
ADD UNIQUE (identificador)
Crea una restricción UNIQUE (valor único en toda la tabla) para la columna 'identificador'.
Se puede crear también restricciones para varias columnas a la vez
ALTER TABLE peronas
ADD CONSTRAINT copersonas
UNIQUE (identificador, apellido1)
Para eliminar una restricción en la base de datos MySQL
ALTER TABLE personas
DROP INDEX copersonas
Para eliminar una restricción en ORACLE, SQLSERVER y ACCESS
ALTER TABLE personas
DROP CONSTRAINT copersonas
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 sólo 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 también se puede definir después 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 señalar cual es la clave
primaria de otra tabla.
La columna o columnas señaladas como FOREIGN KEY, solo podrán 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
1 ADMINISTRACION
2 INFORMATICA
3 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
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4
Definiciones de FOREIGN KEY en CREATE TABLE para MySQL
CREATE TABLE departamentos { dep int NOT NULL,
departamento varchar(255),
PRIMARY KEY (dep)
}
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)
}
Definiciones de FOREIGN KEY en CREATE TABLE para ORACLE, ACCESS, SQLSERVER
CREATE TABLE departamentos
{
dep int NOT NULL PRIMARY KEY,
departamento varchar(255),
}