Orígenes y Evolución
- (Por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas. Una de sus características es el manejo del álgebra y el cálculo relacional que permiten efectuar consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como hacer cambios en ellas.
- Entre 1974 y 1975 se implementó en un prototipo llamado SEQUEL-XRM.
- Entre 1976 y 1977, condujeron a una revisión del lenguaje (SEQUEL/2)
- Cambio de nombre por motivos legales, convirtiendose en SQL.
- A partir de 1981, IBM comenzó a entregar sus productos relacionales.
- En 1983 empezó a vender DB2
- En 1986, el ANSI adoptó SQL como estándar para los lenguajes relacionales.
- En 1987 se transformó en estándar ISO, con el nombre de SQL/86.
- Luego se presento la versión SQL/89.
- En 1992 se lanza un nuevo estándar ampliado y revisado del SQL llamado "SQL-92"
- SQL3 nuevo estándar de SQL en 1999, después de más de 7 años de debate.
Con SQL podemos hacer entre otras las siguientes operaciones en el programa que gestiona las bases de datos:
- Crear nuevas bases de datos.
- Crear nuevas tablas en una base de datos.
- Crear nuevos registros en las tablas de una base de datos
- Crear tablas de consulta en una base de datos.
- Borrar tablas o bases de datos.
- Cambiar uno o varios datos de un registro.
- Mostrar los datos de una tabla o consulta.
- Buscar y mostrar sólo algunos datos de una tabla o consulta, poniendo una serie de condiciones para la búsqueda.
Funciones de SQL:
- DDL – Data Definition Language
-Creación de estructuras de la base de datos.
- Integridad de los datos.
Create: crear.
alter: modificar objeto.
drop: borra objeto.
- DML – Data Manipulation Language
-Recuperación de datos.
-Manipulación de datos.
Insert: insertar datos.
Update: actualizar datos.
Delete: borrar datos.
- DCL – Data Control Language
-Control acceso.
- Compartición de datos.
Grant: da permisos al usuario.
Remoke: quita permisos a un usuario.
Ventajas de SQL:
- Independencia de los fabricantes.
- Portabilidad a cualquier tipo de plataforma.
- SQL está estandarizado.
- Basado en el modelo relacional.
- Lenguaje de alto nivel.
- Consultas interactivas ad-hoc.
- Utilización en Lenguaje de programación.
- Múltiples vistas de los datos.
- Lenguaje de base de datos.
- Definición dinámica de datos.
- Arquitectura cliente/servidor.
Tipos de datos:
Char[10]: Deja en vacio caracteres que no lo ocupa.(cédula)
VarChar[10]:Menor performance a la base de datos.(comentario)
En Oracle se usa el VarChar2.
Creación de Dominios:
Los dominios se pueden utilizar como tipos de datos.
Permite cambiar el tipo simultaneamente a varios atributos.
CREATE DOMAIN dominio [AS] tipotipodatos
[DEFAULT valor_defecto]
[CRECK condicion]
Operadores:
Creación de Objetos: Tablas
- Se utiliza el comando CREATE TABLE.
- Se especifican los atributos de la relación y sus tipos.
- Se especifica la clave primaria.
- Se especifica las restricciones de integridad.
- Se especifica la integridad referencial.
Restricciones de tabla
UNIQUE (nombre_atributo, ……)
PRIMARY KEY (nombre_atributo, ……)
FOREIGN KEY (nombre_atributo, ……) REFERENCES
nombre_tabla(nombre_atributo) accion_referencial
CHECK (condición)
Acciones referenciales
ON UPDATE acción
ON DELETE acción
RESTRICT
Si no se especifica nada, se considera RESTRICT
CASCADE
SET NULL
SET DEFAULT valor
Restrcciones de columna:
- UNIQUE
- NOT NULL
- DEFAULT<valor_por_defecto>
- CHECK(Condicion)
- PRIMARY KEY
- REFERENCES nombre_tabla(nombre_atributo)
Restricción de tabla:
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
Acciones referenciales:
- ON UPDATE
- ON DELETE
- RESTRICT
Ejemplo:
Pelicula (titulo, anio, duracion, color,
nombre_estudio, productora)
, Protagoniza (titulo_pelicula, anio_pelicula,
nombre_actor)
, Actor (nombre, direccion, sexo,
fecha_nacimiento)
, Productora (numero, nombre, direccion)
, Estudio (nombre, direccion)
CREATE TABLE pelicula (
titulo VARCHAR(50),
anio CHAR(4),
duracion INTEGER,
color CHAR(12),
nombre_estudio VARCHAR(30),
productora INTEGER,
PRIMARY KEY (titulo, anio),
FOREIGN KEY nombre_estudio
REFERENCES
estudio (nombre)
ON DELETE SET NULL
ON
UPDATE CASCADE,
FOREIGN KEY productora REFERENCES productora (numero) ON
DELETE CASCADE
);
Borrado de tablas:
DROP TABLE nombre_tabla [CASCADE CONSTRAINT]
Si se utiliza CASCADE CONSTRAINT se elimina la
tabla y todas sus restricciones.
Si no se utiliza CASCADE CONSTRAINT, si la tabla
tiene restricciones asociadas no se elimina, hasta
que no se eliminen las restricciones.
Al eliminar una tabla de la base de datos, también
se eliminan los datos que tuviera almacenados.
Modificar una tabla:
Acciones de modificación.
Añadir atributos.
- ADD nuevo_atributo tipo restricciones.
- Las restricciones sólo pueden ser NOT NULL, CHECK y DEFAULT.
- Un atributo NOT NULL sólo se puede añadir a una tabla si esta vacía.
Borrar atributos.
- DROP (nombre_atributo, …).
- DROP COLUMN nombre atributo [CASCADE CONSTRAINT].
Modificar atributos.
MODIFY nombre_atributo nuevo_tipo restricciones.
- Se puede cambiar el tipo o disminuir el tamaño de un atributo si todas
las tuplas tienen ese campo vacío.
- Un atributo existente se puede hacer NOT NULL si todas las tuplas
tienen valor en ese atributo.
- Si no se especifica algo en la modificación, permanece como estaba.
EJEMPLOS
Borrado de tabla
DROP TABLE pelicula CASCADE CONSTRAINT
DROP TABLE pelicula
Modificación de tabla
ALTER TABLE pelicula ADD fecha_estreno DATE
Manipulación de datos:
Inserción de datos:
INSERT INTO nombre_tabla (lista_atributos)
VALUES (lista_valores);
- Introduce información en la tabla y atributos
indicados.
- El orden y el tipo de los atributos debe coincidir
con el orden y tipo de los valores.
- Los valores se pueden obtener mediante una
consulta.
- Si un atributo no se indica, toma valor NULL.
INSERT INTO nombre_tabla
VALUES (lista_valores);
- Si se omite la lista de atributos, los valores se
almacenan de acuerdo al orden de definición
de los mismos en el CREATE TABLE.
- Los tipos de la lista de valores deben coincidir
con los tipos de definición en el CREATE TABLE.
Ejemplo:
Todos los valores de la tupla:
INSERT INTO empleados
VALUES (‘Juan’, ‘Pérez’, 555);
Algunos valores de la tupla:
INSERT INTO empleados (nombre, codigo)
VALUES (‘Juan’, 555);
Valores desde consulta:
INSERT INTO empleados
SELECT nombre, apellido, codigo
FROM personal
WHERE codigo > 555;
Modificación de Datos:
UPDATE nombre_tabla
SET nombre_atributo = nuevo_valor, …
WHERE condicion;
- Actualiza en la tabla indicada los valores del
atributo siempre y cuando se cumpla la condición
especificada.
- Los valores se pueden obtener mediante una
subconsulta o mediante fórmulas matemáticas.
- Si no hay condición, se actualizan todas las filas
de la tabla (PELIGRO).
Borrado de datos:
DELETE nombre_tabla
WHERE condición
- Borra de la tabla las tuplas que cumplen cierta
condición.
- Si no hay condición se borran todas las filas de
la tabla (PELIGRO).
- A diferencia de DROP TABLE no borra la
estructura de la tabla
Consulta de datos:
SELECT lista_atributos
FROM lista_tablas
WHERE condición
GROUP BY lista_atributos
HAVING condición
ORDER BY lista_atributos [ASC/DESC]
- Consulta valores de una o varias tablas de acuerdo a las
condiciones impuestas en la sentencia.
- Las únicas partes obligatorias son SELECT y FROM, el
resto son opcionales.
- Si aparecen deben ir en el orden que aparecen en la
sentencia.
- HAVING sólo puede aparecer si hay GROUP BY
En la cláusula
SELECT se indican los atributos que se
quieren obtener como respuesta a la consulta.
La cláusula
FROM indica la tabla o tablas que son
necesarias para obtener la información.
En la cláusula
WHERE se indican las condiciones que deben
cumplir las tuplas obtenidas como resultado de la consulta.
GROUP BY se utiliza para formar grupos de datos en función
de algún atributo.
HAVING establece condiciones sobre los grupos que se
formen.
ORDER BY indica si muestra el resultado ordenado en
función de algún atributo.
Select:
Lista de atributos separados por comas.
SELECT at1
, at2
, …, atn
…
Se indican solamente aquellos atributos que queremos que aparezcan en el
resultado.
Se utiliza * si queremos todos los atributos de las tablas involucradas.
SELECT * …
Pueden aparecen filas duplicas.
Para evitarlos se puede utilizar DISTINCT.
SELECT DISTINCT lista_atributos …
Sólo se obtienen como resultado filas no duplicadas para la combinación de los atributos
que aparecen en el SELECT.
Los nombres de los atributos se pueden cambiar en el resultado de la
consulta (alias de atributo)
SELECT nombre_atributo [AS] nuevo_nombre …
From:
Lista de tablas que se utilizan en la consulta separadas
por comas.
…FROM tab1
, tab2
, …, tabn
…
Realiza el producto cartesiano (X) de las mismas
Las condiciones (WHERE, GROUP BY) se imponen sobre
el producto cartesiano
Los atributos que aparecen en el SELECT se toman del
producto cartesiano
Dentro de la consulta una tabla se puede renombrar
(alias de tabla)
… FROM nombre_tabla nuevo_nombre_tabla …
Where:
- Indica las condiciones que deben cumplir las
filas obtenidas como resultado.
- Si no aparece se recuperan todas las filas del
producto cartesiano de las tablas que hay en el
FROM.
- La condición es una expresión n booleana.
- Sólo se obtienen aquellas filas que cumplen la
condición.
Join(reunión):
- No se realiza automaticamente.
- Hay que escribir la condición en la consulta.
- Si no se pone la condición de join, se obtiene el producto
cartesiano (X).
Escritura de join:
- Las tablas tienen que estar relacionadas mediante claves foráneas
(atributos comunes).
- Igualar los atributos comunes de las tablas participantes en la consulta.
Ambiguedades:
Cuando el mismo nombre de atributo aparece en
más de una tabla:
- Hay que distinguir a que atributo se refiere.
- Se cualifica el atributo con el nombre de la tabla.
nombre_tabla.nombre_atributo
SELECT empleado.nombre, CI
FROM empleado, departamento
WHERE empleado.codigo = departamento.codigo
AND departamento.nombre = ‘nomina’
Alias en tablas:
- Cuando la misma relación se la usa más de
una vez en la consulta.
- En ese caso se utilizan alias para las tablas.
SELECT E.nombre, J.nombre
FROM empleado E, empleado J
WHERE E.ID_jefe = J.ID
Referencias: