SQL
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.
- 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.
- Borrar registros.
- 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).
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
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
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:
- Galaza. M (2016) "Normalización". Recuperado el 23-11-2016 de http://www2.udla.edu.ec/udlapresencial/mod/resource/view.php?id=905785
- (2007) "Fundamentos de la normalización de bases de datos ". Recuperado el 23-11-2016 de https://support.microsoft.com/es-ec/kb/283878
- (2007) "Fundamentos de la normalización de bases de datos ". Recuperado el 23-11-2016 de https://support.microsoft.com/es-ec/kb/283878
- Orígenes y Evolución de SQL. (Sin fecha). Recuperado el 23 de noviembre de 2016 de http://sql3.wikispaces.com/4.-+Or%C3%ADgenes+y+Evoluci%C3%B3n+de+SQL.
- Características de SQL. (Sin fecha). Recuperado el 23 de noviembre de 2016 de http://aprende-web.net/progra/sql/sql_2.php