SQL ("Structured Query Language") es un lenguaje para realizar consultas en BD relacionales. Un schema SQL es identificado por un nombre de schema, e incluye un identificador de autorización que indica el usuario dueño del schema, así como los descriptores para cada elemento en el schema. Los elementos del schema incluyen las tablas, vistas, dominios y otros constructores que describen el schema.
Instrucciones SQL Básicas
SQL tiene una instrucción principal para recuperar información de una base de datos: el comando SELECT. Esta instrucción tiene muchas opciones.
Cláusula WHERE
La cláusula WHERE permite especificar condiciones para la selección de datos:
- <condición> es una expresión de búsqueda condicional (lógica) que identifica las tuplas que van a ser recuperadas por la consulta.
- En la cláusula WHERE, la condición DNOMBRE = "Investigación" es una condición de selección.
- La condición DNUMERO = NDEPTO es una condición de asociación, y asocia la llave foránea NDEPTO de la relación EMPLEADO, con el correspondiente número de departamento (DNUMERO) de la relación DEPARTAMENTO.
Nombres de Atributos y Alias
En SQL, un mismo nombre puede ser usado por dos (o más) atributos en diferentes relaciones. Cuando esto sucede, y una consulta se refiere a dos o más atributos con el mismo nombre, el nombre de la relación debe ser puesto como prefijo del nombre de cada atributo, para evitar ambigüedad.
En este caso, se pueden declarar nombres alternativos para la misma relación, llamados alias. El nombre del alias se escribe inmediatamente después del nombre de la relación. También se puede declarar usando la palabra "AS", por ejemplo: EMPLEADO AS E.
También es posible renombrar (como alias) todos los atributos de una relación en la cláusula FROM, de esta manera: EMPLEADO AS E(NP, AP1, AP2, RUT, FN, DIR, SE, SU, RUTS, ND).
Los alias pueden ser usados en cualquier consulta, no sólo cuando hay nombres repetidos. Los alias tienen sentido sólo en la consulta en que son definidos.
Omisión de la Cláusula WHERE
En una consulta puede omitirse la cláusula WHERE, lo que indica que no hay condiciones sobre las tuplas a seleccionar (TODAS las tuplas son seleccionadas). Si más de una relación es especificada en la cláusula FROM, y no existe cláusula WHERE, entonces el producto cruz (todas las posibles combinaciones de tuplas) de estas relaciones es seleccionado.
Es importante especificar cada condición de selección y cada condición de asociación en la cláusula WHERE.
Asterisco (*) para Todos los Atributos
Para recuperar todos los valores de los atributos de las tuplas seleccionadas, se puede usar un asterisco (no es necesario poner todos los nombres), el cual significa todos los atributos.
Tuplas Duplicadas y DISTINCT
En una consulta SQL pueden aparecer tuplas duplicadas. Si no queremos que esto suceda, se puede usar la palabra DISTINCT en la cláusula SELECT, en cuyo caso sólo tuplas distintas aparecen en la relación.
En la consulta anterior obtenemos una tabla con la lista de salarios de todos los empleados. Sin embargo, si dos o más empleados ganan lo mismo, el mismo valor aparece varias veces en la tabla.
Operación UNION
En SQL existe una operación UNION que regresa la unión (como en conjuntos) de relaciones, es decir, regresa todas las tuplas que aparecen en alguna de las relaciones. Las tuplas duplicadas son eliminadas del resultado, a menos que se especifique la cláusula ALL después de la operación.
El primer SELECT recupera los proyectos que involucran a "Pérez" como gerente del departamento que controla el proyecto, y el segundo SELECT regresa los proyectos que involucran a "Pérez" como trabajador en el proyecto. Al aplicar la operación UNION a los dos SELECT, se obtiene el resultado deseado.
Creación y Modificación de Tablas
CREATE SCHEMA y CREATE TABLE
La instrucción CREATE SCHEMA es usada para crear un nuevo schema. La instrucción CREATE TABLE es usada para especificar una nueva relación, dándole un nombre y especificando sus atributos y restricciones. A cada atributo se le da un nombre, un tipo de datos (para especificar su dominio de valores) y opcionalmente algunas restricciones. También se puede agregar explícitamente el nombre del schema a cada tabla, separado por un punto.
Tipos de Datos
Los tipos de datos disponibles para los atributos incluyen: numérico, tira de caracteres, caracter, fecha y hora. Los tipos numéricos pueden incluir números enteros de varios tamaños (INT y SMALLINT), números reales de varias precisiones (FLOAT, REAL, DOUBLE PRECISION). Además se pueden declarar números con formato, usando DECIMAL(i,j).
Las tiras de caracteres pueden ser de largo fijo (CHAR(n)) o de largo variable (VARCHAR(n), donde n es el máximo número de caracteres). La fecha tiene 10 posiciones, típicamente AAAA-MM-DD. La hora tiene al menos 8 posiciones, típicamente HH:MM:SS.
Restricciones NOT NULL, PRIMARY KEY y UNIQUE
Debido a que SQL permite el "NULL" (nulo) como valor de sus atributos, es necesario especificar la restricción "NOT NULL" para los atributos que no permiten este valor (por violaciones de integridad).
La cláusula PRIMARY KEY especifica uno o más atributos que forman la llave primaria de la relación. La cláusula UNIQUE especifica llaves alternas.
Integridad Referencial
Como se discutió en secciones anteriores, las restricciones de integridad referencial pueden ser violadas cuando las tuplas son insertadas o borradas, o cuando se cambia el valor de un atributo que es llave foránea.
Al crear el schema es posible especificar las acciones a ser tomadas cuando una restricción de integridad referencial es violada, ya sea por borrado de una tupla referenciada en otra tabla, o por modificación del valor de una llave primaria referenciada en otra tabla. Estas acciones son: ON DELETE (cuando la tupla se borra) y ON UPDATE (cuando la tupla se modifica), que pueden tener las opciones: SET NULL (ponga en nulo), CASCADE (actualice todas las referencias "en cascada"), y SET DEFAULT (ponga el valor por defecto).
En el ejemplo anterior, si la tupla de un empleado supervisor es borrada, el valor de RUTSUPERV es puesto en nulo (NULL) para todas las tuplas de empleados que referencian al empleado de la tupla borrada.
DROP SCHEMA y DROP TABLE
Para borrar un schema completo se usa la instrucción DROP SCHEMA, con dos opciones: CASCADE o RESTRICT. Si en la instrucción anterior se reemplaza la opción CASCADE por RESTRICT, el schema es borrado solamente si no tiene elementos.
Una relación o tabla puede ser borrada del schema de BD usando la instrucción DROP TABLE. Si la opción RESTRICT es usada en lugar de CASCADE, la tabla es borrada solamente si ésta no es referenciada en ninguna restricción (por ejemplo como llave foránea en otra tabla).
ALTER TABLE
La definición de una tabla puede ser modificada usando la instrucción ALTER TABLE. Con esta instrucción es posible agregar o borrar atributos (columnas), cambiar la definición de una columna, y agregar o borrar restricciones.
Para borrar una columna se puede usar CASCADE o RESTRICT. Con CASCADE todas las restricciones son borradas automáticamente del schema, junto con la columna.
También es posible borrar una cláusula por defecto así como definir una nueva. Finalmente, se pueden borrar o agregar restricciones en una tabla. Para borrar una restricción ésta debe tener un nombre (dado con CONSTRAINT).
Ejemplos Prácticos de Consultas SQL
Los más relevantes y básicos ejemplos del uso de SQL para la captura de datos tabulares:
- Obtener el porcentaje de personas que ya no están vivas. Alias el resultado como porcentaje_muerto.
- Número de años entre la película más vieja y la más nueva.
- Definir una serie de categorías en base al precio.
JOINs en SQL
La herramienta más potente en el modelo relacional son las sentencias JOIN. Permiten el uso de datos provenientes de dos o más tablas utilizando como conector entre ellas una columna común.
LEFT JOIN o LEFT OUTER JOIN obtiene todos los datos de la primera tabla (o tabla izquierda), y solamente las filas que coinciden desde la segunda tabla (o tabla derecha).
- Seleccionar registros de dos tablas y luego correlacionar con una tercera tabla.
- Apilando registros de 2 o más tablas. Deben tener las mismas cantidad de columnas y tipo de dato.
Tablas de Pivoteo
Una tabla de pivoteo es una manera de resumir datos en forma de filas y columnas.
- El promedio de la compensación según el cargo y el género del empleado. La compensación se calcula agregando el salario y el bono de cada empleado. No todos los empleados reciben el bono.
- Encontrar la mayor diferencia en el total de puntajes de todas las tareas.
- Cuadro comparativo de ventas de cada artículo según fecha de venta.
TAG: #Empleado

