Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL PDF
SQL PDF
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Consultas Básicas
Subconsultas
M. Andrea Rodrı́guez-Tastets Null y Unknown
Restricciones a
Universidad de Concepción,Chile nivel de esquema y
triggers
www.inf.udec.cl\ ∼andrea
andrea@udec.cl Views
Indices en SQL
Introducción
Manipulación de Tablas
Manipulación de
Tablas
Especificación de Restricciones Especificación de
Restricciones
Subconsultas
Subconsultas Null y Unknown
Restricciones a
Null y Unknown nivel de esquema y
triggers
Views
Restricciones a nivel de esquema y triggers
Indices en SQL
Recursividad en
Views SQL
Indices en SQL
Recursividad en SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Restricciones
Consultas Básicas
Objetivos de la Unidad
Subconsultas
Estudiar SQL y su relación con otros lenguajes de manipulación en Null y Unknown
un modelo relacional Restricciones a
nivel de esquema y
triggers
Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Introducción Especificación de
Restricciones
Subconsultas
I SQL emplea los términos tabla, fila y columna en vez de
Null y Unknown
relación, tupla y atributo, respectivamente.
Restricciones a
nivel de esquema y
I Las instrucciones SQL para definir datos son CREATE, triggers
ALTER y DROP Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Evolution
Manipulación de
Existen los siguientes estándares: Tablas
Especificación de
I ANSI (American National Standard Institute) SQL con sus Restricciones
actualizaciones en 1992, llamado SQL2. Más reciente es el Consultas Básicas
SQL-1999 (SQL3) que extiende el SQL2 con caracterı́sticas Subconsultas
objecto-relacional y otras funcionalidades. Null y Unknown
I Existe una colección de extensiones al SQL:99 llamadas Restricciones a
nivel de esquema y
SQL:2003 que incluyen, por ejemplo soporte para XML. triggers
Views
I También hay versiones de SQL producidas por vendedores de
Indices en SQL
DBMS, las cuales cumplen con las propiedades del SQL
original y el SQL2, tendiendo variaciones en cuanto al SQL3 Recursividad en
SQL
y el SQL:2003.
Concepto de Esquema y Catálogo Bases de Datos
Andrea Rodrı́guez
I Un esquema SQL se identifica con un nombre de esquema y
Introducción
consta de un identificador de autorización, que indica el
usuario o la cuenta propietaria del esquema, además de los Manipulación de
Tablas
descriptores de cada elemento del esquema. Especificación de
Restricciones
I Los elementos del esquema comprenden tablas, restricciones,
Consultas Básicas
vistas, dominios y otros.
Subconsultas
I Un esquema se crea mediante la sentencia CREATE Null y Unknown
SCHEMA, por ejemplo: Restricciones a
nivel de esquema y
CREATE SCHEMA EMPRESA AUTHORIZATION JPEREZ; triggers
Views
I Catálogo es un conjunto de esquemas, con un nombre. El
catálogo, siempre contiene un esquema especial, llamado Indices en SQL
Introducción
I La instrucción CREATE TABLE permite crear relaciones,
Manipulación de
dándole un nombre y especificando atributos y restricciones. Tablas
Andrea Rodrı́guez
Tipos de Datos y Dominios (1/2)
Introducción
I Tipos de Datos para atributos: numéricos, cadena de Manipulación de
caracteres, cadena de bits, fecha y hora. Tablas
Especificación de
I Numéricos (de distintos tamaños, enteros): INTEGER o INT Restricciones
Andrea Rodrı́guez
Introducción
Tipos de Datos y Dominios (2/2) Manipulación de
Tablas
I Tipo de dato para fecha es DATE, tiene 10 posiciones y sus Especificación de
Restricciones
componentes son YEAR, MONTH y DAY, por lo regular de
Consultas Básicas
la forma YYYY-MM-DD.
Subconsultas
I Tipo de dato para tiempo es TIME, tiene 8 posiciones, con Null y Unknown
los componentes HOUR, MINUTE y SECOND, por lo Restricciones a
general de la forma HH:MM:SS nivel de esquema y
triggers
I Dominios: esto permite cambiar tipos de datos de un dominio Views
utilizado por un gran número de atributos más fácilmente. Indices en SQL
Por ejemplo, dominio TIPO NUMERO ası́: CREATE Recursividad en
DOMAIN TIPO NUMERO AS CHAR(9) SQL
Bases de Datos
Andrea Rodrı́guez
Manipulación de
I Existen dos opciones para eliminar: CASCADE y RESTRICT. Tablas
Especificación de
I Si se desea eliminar el esquema EMPRESA con todas sus Restricciones
tablas, dominios, etc., se utiliza CASCADE: DROP SCHEMA Consultas Básicas
EMPRESA CASCADE; Subconsultas
Views
I DROP TABLE DEPENDIENTE CASCADE; Elimina la tabla
Indices en SQL
DEPENDIENTE. Con la opción CASCADE, todas las
restricciones y vistas que hagan referencia a la tabla se Recursividad en
SQL
eliminarán automáticamente del esquema, junto con la propia
tabla.
Bases de Datos
Andrea Rodrı́guez
Manipulación de
I Las posibles acciones de alterar tablas incluyen agregar Tablas
I Dado que SQL permite NULL como valor para un atributo, Introducción
se puede especificar la restricción NOT NULL, si es que no
Manipulación de
queremos nulos. Tablas
Especificación de
I Valor por omisión de un atributo, añadiendo la cláusula Restricciones
DEFAULT <valor> a la definición de un atributo Consultas Básicas
Restricciones a
I La cláusula UNIQUE especifica claves alternativas nivel de esquema y
triggers
I El diseñador debe especificar las acciones que deben Views
realizarse cuando se transgrede una restricción, asociada a la Indices en SQL
inserción, modificación y eliminación de un valor de atributo Recursividad en
de clave foránea y asociada al modificarse un valor de clave SQL
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Consultas Básicas
CREATE TABLE EMPLEADO
(..., Subconsultas
NRO DEPTO INT NOT NULL DEFAULT 1, Null y Unknown
PRIMARY KEY (NUMERO),
Restricciones a
FOREIGN KEY (NRO SUP) REFERENCES EMPLEADO (NUMERO) nivel de esquema y
ON DELETE SET NULL ON UPDATE CASCADE, triggers
FOREIGN KEY (NRO DEPTO) REFERENCES DEPARTAMENTO (ND) Views
ON DELETE SET DEFAULT ON UPDATE CASCADE);
Indices en SQL
Recursividad en
SQL
Bases de Datos
Introducción
I Se tiene SET NULL ON DELETE y CASCADE ON UPDATE
para la clave externa NRO SUP de EMPLEADO. Esto Manipulación de
Tablas
significa que si se elimina la tupla de empleado supervisor, el Especificación de
valor de NRO SUP pasa automáticamente a NULL en todas Restricciones
Null y Unknown
I Si se actualiza el valor de NUMERO de un empleado
Restricciones a
supervisor, el nuevo valor se propaga a NRO SUP para todas nivel de esquema y
las tuplas de empleado que hagan referencia a la tupla del triggers
Indices en SQL
I En general, la acción emprendida por el SGBD cuando se
Recursividad en
especifica SET NULL o SET DEFAULT es la misma para ON SQL
DELETE que para ON UPDATE: el valor de los atributos
referenciados afectados se cambia a NULL en el caso de SET
NULL y al valor por omisión especificado en el caso de SET
DEFAULT.
Bases de Datos
Introducción
I La acción correspondiente a CASCADE ON DELETE es
Manipulación de
eliminar todas las tuplas referenciadoras, mientras que la Tablas
acción correspondiente a CASCADE ON UPDATE es cambiar Especificación de
el valor de la clave externa al nuevo valor actualizado de la Restricciones
Subconsultas
I Por lo general, la opción CASCADE es adecuada para tablas
Null y Unknown
del tipo TRABAJA EN, para relaciones que representan
Restricciones a
atributos multivaluados como LOCALIZACION DEPTO y nivel de esquema y
triggers
para relaciones que representan tipos de entidad débiles como
Views
DEPENDIENTE.
Indices en SQL
I Las relaciones declaradas con CREATE TABLE se denominan Recursividad en
tablas base. El SGBD las almacena como archivos. SQL
Andrea Rodrı́guez
Introducción
Andrea Rodrı́guez
Introducción
Manipulación de
SELECT-FROM-WHERE Tablas
Especificación de
SELECT <lista de atributos> Restricciones
I FROM <lista de tablas> Consultas Básicas
WHERE <condición> Subconsultas
Null y Unknown
I Considere: Recupere la fecha de nacimiento y direccin del
empleado cuyo nombre es Juan Pérez. Restricciones a
nivel de esquema y
SELECT FECHA NAC, DIRECCION triggers
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Ejercicio
Especificación de
Restricciones
EMPLEADO (Nombre, Apellido, NroEmpleado, FechaNacimiento, Direccion, Sexo,
Consultas Básicas
Salario, NroSuperior, NroDepto) FK NroDepto de DEPARTAMENTO
FK NroSupervisor de EMPLEADO Subconsultas
DEPARTAMENTO (NombreDepto, NroDepto, NroGerente, FechaInicioGerente)
FK NroGerente de EMPLEADO Null y Unknown
LUGARESDEPTO (NroDepto, LugarDepto)
FK NroDepto de DEPARTAMENTO Restricciones a
PROYECTO (NombreProyecto, NroProyecto, LugarProyecto, NroDepto) nivel de esquema y
FK NroDepto de DEPARTMENTO triggers
TRABAJAEN (NroEmpleado, NroProyecto, Horas)
Views
FK NroEmpleado de EMPLEADO, FK NroProyecto de PROYECTO
DEPENDIENTE (NroEmpleado, NombreDependiente, Sexo, FechaNacimiento, Parentesco) Indices en SQL
FK NroEmpleado de EMPLEADO
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Consultas 1
Especificación de
Restricciones
Recupere el nombre, apellido y dirección de todos los Consultas Básicas
empleados que trabajan en el departamento de Investigación
Subconsultas
Null y Unknown
SELECT E.NOMBRE, E.APELLIDO, E.DIRECCION
FROM EMPLEADO AS E, DEPARTAMENTO Restricciones a
WHERE DEPARTAMENTO.NOMBREDEPTO = ‘Investigación’ AND nivel de esquema y
DEPARTAMENTO.NRODEPTO = E.NRODEPTO; triggers
Equivalente:
SELECT NOMBRE, APELLIDO, DIRECCION Views
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
(DEPARTAMENTO.NRODEPTO = EMPLEADO.NRODEPTO AND Indices en SQL
DEPARTAMENTO.NOMBREDEPTO = ‘Investigación’);
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Consultas 2 Tablas
Especificación de
Restricciones
De cada proyecto ubicado en Concepción, haga una lista con Consultas Básicas
el número de proyecto, el número de departamento Subconsultas
Andrea Rodrı́guez
Introducción
Especificación de
Seleccione todos los números de empleado de EMPLEADO Restricciones
Consultas Básicas
Restricciones a
Seleccione todas las combinaciones posibles de números de nivel de esquema y
triggers
empleado y números de departamento (Esta consulta realiza
Views
el producto cartesiano).
Indices en SQL
Recursividad en
SELECT NROEMPLEADO, NRODEPARTAMENTO SQL
FROM EMPLEADO, DEPARTAMENTO;
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Restricciones
Uso del *
Consultas Básicas
Subconsultas
Uso del ∗: Recupera los valores de todos los atributos Null y Unknown
Restricciones a
SELECT ∗ nivel de esquema y
FROM EMPLEADO triggers
WHERE NroDepto = 5;
Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Tablas como Conjuntos en SQL
Andrea Rodrı́guez
distintos
SELECT ALL SALARIO (o SELECT simple)
FROM EMPLEADO; (incluye repetidos)
SELECT DISTINCT SALARIO
FROM EMPLEADO; (no incluye repetidos)
Bases de Datos
Andrea Rodrı́guez
UNION, EXCEPT e INTERSECT
Introducción
Consultas Básicas
relaciones sean compatibles en su esquema (mismos
Subconsultas
atributos y el orden). Por ejemplo, liste con todos los
Null y Unknown
números de proyecto en los que participa un empleado de
Restricciones a
apellido Pérez, sea como trabajador o como jefe del nivel de esquema y
triggers
departamento que controla el proyecto.
Views
Indices en SQL
(SELECT DISTINCT NROPROYECTO
FROM PROYECTO, DEPARTAMENTO, EMPLEADO Recursividad en
WHERE PROYECTO.NRODEPTO = DEPARTAMENTO.NRODEPTO AND SQL
DEPARTAMENTO.NROGERENTE = EMPLEADO.NROEMPLEADO
AND APELLIDO = ‘Pérez’)
UNION
(SELECT DISTINCT NROPROYECTO
FROM TRABAJA EN, EMPLEADO
WHERE TRABAJA EN. NROEMPLEADO = EMPLEADO.NROEMPLEADO
AND APELLIDO = ‘Pérez’);
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Comparación y ordenación Especificación de
Restricciones
Consultas Básicas
Comparación cadena de caracteres: operador LIKE, cadenas
Subconsultas
parciales %: sustituye un número arbitrareo de caracteres y
Null y Unknown
sustituye a un solo caracter. Por ejemplo, Recupere todos los
Restricciones a
empleados cuya dirección sea Talcahuano. nivel de esquema y
triggers
Views
SELECT NOMBRE, APELLIDO
FROM EMPLEADO Indices en SQL
WHERE DIRECCION LIKE ‘ % Talcahuano’;
Recursividad en
SQL
Bases de Datos
Introducción
Los operadores suma (+), resta (−), multiplicación (∗) y Manipulación de
división (/) se pueden aplicar a valores numéricos o atributos Tablas
Null y Unknown
SELECT NOMBRE, APELLIDO, 1.1*SALARIO
FROM EMPLEADO, TRABAJA EN, PROYECTO Restricciones a
WHERE TRABAJA EN. NROEMPLEADO = EMPLEADO.NROEMPLEADO AND nivel de esquema y
TRABAJA EN.NROPROYECTO = PROYECTO.NROPROYECTO AND triggers
NOMBREPROYECTO = ‘Producto X’;
Views
Indices en SQL
En el caso de tipos de datos de cadena, se puede usar el
Recursividad en
operador concatenación(//) en una consulta para anexar un SQL
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Consultas Básicas
Recupere todos los empleados del departamento 5 cuyo Subconsultas
salario esté entre 30000 y 40000 dólares. Null y Unknown
Restricciones a
SELECT * nivel de esquema y
FROM EMPLEADO triggers
WHERE (SALARIO BETWEEN 30000 AND 40000) AND NRODEPTO= 5;
Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Manipulación de
Tablas
Obtenga una lista de los empleados y de los proyectos en los Especificación de
que trabajan, ordenados por departamento, y dentro de cada Restricciones
Subconsultas
SELECT NOMBREDEPTO, APELLIDO, NOMBRE, NOMBREPROYECTO Null y Unknown
FROM DEPARTAMENTO, EMPLEADO, TRABAJA EN, PROYECTO
WHERE DEPARTAMENTO.NRODEPTO = EMPLEADO.NRODEPTO AND Restricciones a
EMPLEADO.NROEMPLEADO = TRABAJA EN.NROEMPLEADO AND nivel de esquema y
TRABAJA EN.NRO.PROY = PROYECTO.NROPROY triggers
ORDER BY NOMBREDEPTO, APELLIDO, NOMBRE;
Views
Indices en SQL
El orden por omisión es ascendente. Se usa la palabra DESC Recursividad en
para ordenar en forma descendente. Por ejemplo, ORDER SQL
Andrea Rodrı́guez
Introducción
Conjuntos Explı́citos y NULL Manipulación de
Tablas
Especificación de
Recupere el número de empleado de todos los que trabajan Restricciones
Subconsultas
SELECT DISTINCT NROEMPLEADO
Null y Unknown
FROM EMPLEADO
WHERE NROPROY IN (1,2,3); Restricciones a
nivel de esquema y
triggers
Recupere los nombres de todos los empleados que no tienen Views
supervisores. Indices en SQL
Recursividad en
SELECT NOMBRE, APELLIDO SQL
FROM EMPLEADO
WHERE NROSUPERVISOR IS NULL;
Bases de Datos
Andrea Rodrı́guez
Introducción
Subconsultas en el WHERE Manipulación de
Tablas
I Estas consultas requieren valores de la BD para usarlos Especificación de
después en una condición de comparación. Restricciones
Consultas Básicas
I Consultas anidadas: bloques select-from-where dentro
Subconsultas
de la cláusula where de otra consulta. A esta última Null y Unknown
consulta se le llama consulta externa. Restricciones a
SELECT DISTINCT NROPROY nivel de esquema y
FROM PROYECTO triggers
WHERE NROPROY IN ( SELECT NROPROY
FROM PROYECTO, EMPLEADO Views
WHERE PROYECTO.NRODEPTO=DEPTO. NRODEPTO AND
Indices en SQL
NRO NROGERENTE = NROSUPERIOR AND APELLIDO =‘Pérez’)
OR NROPROY IN (SELECT NROPROY Recursividad en
FROM TRABAJA EN, EMPLEADO SQL
WHERE EMPLEADO.NROEMP = TRABAJA EN.NROEMP
AND APELLIDO = ‘Pérez’);
Bases de Datos
Consultas anidadas (WHERE)
SELECT DISTINCT NROPROY Andrea Rodrı́guez
FROM PROYECTO
WHERE NROPROY IN ( SELECT NROPROY Introducción
FROM PROYECTO, EMPLEADO
WHERE PROYECTO.NRODEPTO=DEPTO. NRODEPTO AND Manipulación de
NRO NROGERENTE = NROSUPERIOR AND APELLIDO =‘Pérez’) Tablas
OR NROPROY IN (SELECT NROPROY
FROM TRABAJA EN, EMPLEADO Especificación de
WHERE EMPLEADO.NROEMP = TRABAJA EN.NROEMP Restricciones
AND APELLIDO = ‘Pérez’);
Consultas Básicas
Restricciones a
I La segunda consulta anidada selecciona los números de nivel de esquema y
triggers
proyectos en que un Pérez participa como trabajador.
Views
I La consulta externa selecciona una tupla PROYECTO si Indices en SQL
el valor de NROPROY de esa tupla está en el resultado Recursividad en
SQL
de cualquiera de las dos consultas anidadas.
I El operador de comparación IN compara el valor v con
un conjunto (o multiconjunto) de valores V y evalúa a
TRUE para comprobar si v es uno de los elementos de
V
Bases de Datos
Andrea Rodrı́guez
Recursividad en
SQL
SELECT E.NOMBRE, E.APELLIDO
FROM EMPLEADO AS E, DEPENDIENTE AS D
WHERE E.NROEMPLEADO =D.NROEMPLEADO AND
E.SEXO =D.SEXO AND E.NOMBRE =D.NOMBREDEP;
Bases de Datos
Andrea Rodrı́guez
EXISTS Introducción
Manipulación de
EXISTS sirve para comprobar si el resultado de una consulta Tablas
Especificación de
anidada correlacionada es o no vacı́o. Restricciones
Consultas Básicas
SELECT E.NOMBRE, E.APELLIDO
FROM EMPLEADO AS E Subconsultas
WHERE EXISTS ( SELECT *
FROM DEPENDIENTE Null y Unknown
WHERE E.NROEMP = DEPENDIENTE.NROEMP
AND SEXO = E.SEXO AND E.NOMBRE =NOMBREDEPENDIENTE); Restricciones a
nivel de esquema y
triggers
Recursividad en
SQL
SELECT NOMBRE, APELLIDO
FROM EMPLEADO
WHERE NOT EXISTS (SELECT *
FROM DEPENDIENTE
WHERE EMPLEADO.NROEMPLEADO = DEPENDIENTE.NROEMPLEADO);
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Null y Unknown
SELECT NOMBRE
Restricciones a
FROM EMPLEADO AS E, nivel de esquema y
(SELECT NroDEPTO FROM PROYECTO triggers
WHERE Lugar= ‘Concepción’) AS PRO Views
WHERE E.NroDepto = PRO.NroDepto);
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Funciones agregadas y agrupación (1/2)
Manipulación de
Tablas
Especificación de
Funciones COUNT (cuenta número de tuplas), SUM, MAX, Restricciones
MIN, AVG. Por ejemplo, Halle la suma de los salarios de Consultas Básicas
Restricciones a
nivel de esquema y
SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO), AVG(SALARIO) triggers
FROM EMPLEADO;
Views
Indices en SQL
Recupere el total de empleados de la empresa
Recursividad en
SQL
SELECT COUNT(*)
FROM EMPLEADO;
Bases de Datos
Andrea Rodrı́guez
Introducción
Especificación de
Restricciones
Recupere el número de empleados del departamento de
Consultas Básicas
Investigación
Subconsultas
Views
Contar valores de atributos en vez de tuplas Indices en SQL
Recursividad en
SELECT COUNT(DISTINCT SALARIO) SQL
FROM EMPLEADO;
Bases de Datos
Andrea Rodrı́guez
Introducción
Agrupación (1/4) Manipulación de
Tablas
I A veces es necesario aplicar funciones agregadas a Especificación de
Restricciones
subgrupos de tuplas de una relación, por ejemplo
Consultas Básicas
conocer el salario medio de los empleados de cada
Subconsultas
departamento, o el número de empleados que trabajan
Null y Unknown
en que cada proyecto.
Restricciones a
nivel de esquema y
I En estos casos se necesita agrupar las tuplas que tienen triggers
el mismo valor para ciertos atributos, que se llaman Views
atributos de agrupación y aplicar la función de manera Indices en SQL
Andrea Rodrı́guez
Introducción
Agrupación (2/4) Manipulación de
Tablas
Especificación de
Recupere el número de depto y el número de empleados de Restricciones
cada departamento y su salario medio. Consultas Básicas
Subconsultas
SELECT NRODEPTO, COUNT(*), AVG (SALARIO) Null y Unknown
FROM EMPLEADO GROUP BY NRODEPTO;
Restricciones a
nivel de esquema y
De cada proyecto, recupere su número, nombre y el número triggers
Views
de empleados que trabajan en él
Indices en SQL
Andrea Rodrı́guez
Introducción
Agrupación (3/4) Manipulación de
Tablas
I A veces se requiere recuperar valores agrupados cuando Especificación de
Restricciones
se cumplan ciertas condiciones. Por ejemplo, la consulta
Consultas Básicas
anterior, pero para aquellos proyectos que tengan más
Subconsultas
de dos empleados.
Null y Unknown
I Para estos casos se ocupa la cláusula HAVING, que Restricciones a
nivel de esquema y
puede aparecer con la cláusula GROUP BY. triggers
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Agrupación (4/4)
Especificación de
Restricciones
Consultas Básicas
De cada proyecto con un número de empleados mayor que
Subconsultas
dos, recupere su número, nombre y el número de empleados
Null y Unknown
que trabajan en él
Restricciones a
nivel de esquema y
SELECT NROPROY, NOMBREPROY, COUNT(*) triggers
FROM PROYECTO, TRABAJA EN
Views
WHERE PROYECTO.NROPROY = TRABAJA EN.NROPROY
GROUP BY NROPROY, NOMBREPROY Indices en SQL
HAVING COUNT(*) > 2;
Recursividad en
SQL
Bases de Datos
Introducción
SQL permite valores nulos (NULL). Sus interpretaciones son: Manipulación de
Tablas
Especificación de
I Valor desconocido Restricciones
Consultas Básicas
I Valor inaplicable
Subconsultas
I Valor restringido Null y Unknown
Views
I El resultado de una operación aritmética sobre nulos en
Indices en SQL
nulos
Recursividad en
I Cuando se hace una comparación sobre el NULL, el SQL
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Valor de verdad de UNKNOWN
Especificación de
Restricciones
x y x AND y x OR y NOT x
Consultas Básicas
TRUE FALSE FALSE TRUE FALSE
TRUE UNKNOWN UNKNOWN TRUE FALSE Subconsultas
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Null: Ejercicio
Especificación de
Restricciones
Considere la siguiente instancia de la relación PERSONA: Consultas Básicas
Views
Se quiere encontrar a la persona con el mayor grado cuya
Indices en SQL
edad sea menor que 21
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Null: Ejercicio (cont.) Especificación de
Restricciones
Para la consulta deseada anterior, ¿Hacen las dos siguientes consultas la Consultas Básicas
pregunta deseada? ¿Qué respuesta dan estas consultas? Subconsultas
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Restricciones a nivel de esquema
Especificación de
Restricciones
Consultas Básicas
I Una “assertion”(declaración) es una expresión SQL de Subconsultas
valor booleano que debe ser verdadera todo el tiempo. Null y Unknown
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Check constraints: atributos y tuplas Restricciones
Consultas Básicas
Null y Unknown
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Assertion (1/3)
Especificación de
Restricciones
CREATE ASSERTION RESTRIC SALARIO
CHECK(NOT EXISTS (SELECT * Consultas Básicas
FROM EMPLEADO E, EMPLEADO M, DEPARTAMENTO D Subconsultas
WHERE E.SALARIO > M.SALARIO AND E.ND = D.NUMEROD
AND D.NSS JEFE = M.NSS)) Null y Unknown
Restricciones a
nivel de esquema y
I Especifica cuándo se viola una restricción general, lo triggers
Indices en SQL
I Se puede usar CHECK es la creación de dominios.
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Restricciones
Assertion: Comparison de restricciones (2/3)
Consultas Básicas
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Triggers(1/2) Tablas
Especificación de
Restricciones
Son disparadores de acciones ante eventos. Esto posibilita no Consultas Básicas
que se aborte una actualización, sino que se avise o que Subconsultas
realice una acción determinada. Esto último relacionado al Null y Unknown
concepto de bases de datos activas. Restricciones a
nivel de esquema y
triggers
R1: CREATE TRIGGER SALTOTAL1
AFTER INSERT ON EMPLEADO Views
FOR EACH ROW
Indices en SQL
WHEN (NEW.ND IS NOT NULL)
UPDATE DEPARTAMENTO SET SAL TOTAL = SAL TOTAL + NEW.SALARIO
Recursividad en
WHERE ND = NEW.ND; SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Triggers(2/2) Especificación de
Restricciones
Consultas Básicas
<disparador>::= CREATE TRIGGER <nombre de disparador>
(AFTER — BEFORE) <eventos de disparador> ON <nombre tabla> Subconsultas
[FOR EACH ROW]
[WHEN <condicion>] Null y Unknown
<acciones del disparador>;
<eventos del disparador> ::= <evento del disparador> Restricciones a
{OR <evento del disparador>} nivel de esquema y
<evento del disparador> ::= INSERT | DELETE | UPDATE triggers
[OF <nombre de columna> {, <nombre de columna>}] Views
<acciones del disparador> ::= <bloque PL/SQL>
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Views
Manipulación de
Tablas
Especificación de
I Los usuarios que acceden a una base de datos relacional, lo Restricciones
Null y Unknown
I Una vista es una tabla virtual derivada, con nombre (Date,
Restricciones a
1995). El término virtual significa que la tabla no existe en sı́, nivel de esquema y
pero para el usuario parece existir. Por el contrario una tabla triggers
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Restricciones
Views:Ejemplo 1
Consultas Básicas
Subconsultas
CREATE VIEW TRABAJA EN1
Null y Unknown
AS SELECT NOMBRE,APPELLIDO,NOMBREP, HORAS
Restricciones a
FROM EMPLEADO,PROYECTO,TRABAJA EN nivel de esquema y
WHERE NSS=NSSE AND NP = NUMEROP; triggers
Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Views:Ejemplo 1 Especificación de
Restricciones
Views
Consulta pueden ser especificadas sobre vistas. Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Views:Ejemplo 3
Especificación de
Restricciones
CREATE VIEW TRABAJA EN1 Consultas Básicas
AS SELECT NOMBRE,APPELLIDO,NOMBREP,HORAS Subconsultas
FROM EMPLEADO, PROYECTO,TRABAJA EN Null y Unknown
WHERE NSS=NSSE AND NP = NUMEROP;
Restricciones a
nivel de esquema y
triggers
SELECT NOMBRE,APPELLIDO Views
FROM TRABAJA EN1
Indices en SQL
WHERE NOMBREP = ‘ProyectoX’;
Recursividad en
SQL
Bases de Datos
Implementación (1/2)
Andrea Rodrı́guez
Consultas Básicas
I La modificación de consultas es una estrategia ineficiente
para consultas complejas Subconsultas
Null y Unknown
I Otra estrategia es la materialización de vistas, la cual Restricciones a
conlleva crear fı́sicamente una tabla en el supuesto de que se nivel de esquema y
triggers
realicen otras consultas sobre la vista.
Views
I La materialización de vistas implica el desarrollar técnicas de Indices en SQL
actualización incremental, donde se determina qué tuplas Recursividad en
nuevas deben ser insertadas, borradas, o modificadas en la SQL
tabla materializada.
I La tabla materializada se mantiene por el tiempo en que se
consulta, si la vista no es consultada por un periodo de
tiempo, entonces es borrada.
Bases de Datos
Andrea Rodrı́guez
Introducción
Operaciones DML sobre Vistas
Manipulación de
Tablas
I Las operaciones sobre vistas deben convertirse en operaciones
Especificación de
equivalentes sobre las tablas base subyacentes. Restricciones
Consultas Básicas
I La forma en que se logra esta correspondencia es mediante el
Subconsultas
álgebra relacional, dado que la definición de vista es una
Null y Unknown
expresión algebraica, con nombre. Este proceso, de
Restricciones a
sustitución, funciona debido a la propiedad de cierre del nivel de esquema y
álgebra . triggers
Views
I Para unos casos muy simples, las vistas se pueden actualizar.
Indices en SQL
Además el comando ”instead of” de triggers puede ser usado
Recursividad en
para hacer que modificaciones en una vista se traduzcan en SQL
modificaciones en una tabla.
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Borrar vistas Especificación de
Restricciones
I El borrar una vista con DROP viewname; borra la definición Consultas Básicas
de una vista. Subconsultas
I El borrar una vista no altera de ninguna forma las tuplas que Null y Unknown
la definen. Restricciones a
nivel de esquema y
triggers
I Sin embargo, si se borra la relación subyacente a la view,
Views
hace que las vista que define queden inútiles.
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Actualización de Vistas: INSERT | DELETE | UPDATE Restricciones
Consultas Básicas
I No todas las vistas se pueden actualizar. Lo anterior, va a Subconsultas
depender del tipo de vista. Ası́, tenemos los siguientes tipos: Null y Unknown
(1) Vistas de subconjunto de columnas, (2) Vistas de
Restricciones a
subconjunto de filas, (3) Vistas de reunión, (4) Vistas de nivel de esquema y
triggers
resumen estadı́stico
Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Manipulación de
Si la vista ha sido creada incluyendo la clave primaria de la relación Tablas
Recursividad en
I CREATE VIEW ID CIUDAD
VISTA 1: SQL
AS SELECT ID PROV,CIUDAD FROM PROV;
Andrea Rodrı́guez
I Se puede insertar un nuevo proveedor en la vista, tal como (S6, OSORNO), insertando el Especificación de
registro (S6, NULL,NULL,OSORNO) en la tabla subyacente PROV. Restricciones
I Consultas Básicas
Se puede eliminar un registro existente de la vista, tal como (S1, CONCEPCION), eliminando el
registro (S1, LAPIZ LOPEZ, 20, CONCEPCION) de la tabla subyacente PROV. Subconsultas
I Se puede modificar un registro de la vista, tal como, cambiar la ciudad de un proveedor, Null y Unknown
modificándose el registro correspondiente de la tabla subyacente PROV.
Restricciones a
I CREATE VIEW SITUACION CIUDAD nivel de esquema y
VISTA 2:
AS SELECT SITUACION,CIUDAD FROM PROV; triggers
I Insertar un nuevo registro en la vista, tal como (40, VALPARAISO), el sistema intentará insertar Views
el registro (NULL, NULL, 40, VALPARAISO) en PROV. Esto no será posible ya que la clave
primaria no puede ser NULL. Indices en SQL
I Al eliminar un registro de la vista, no se sabrá cuál es el registro que corresponde a la tabla Recursividad en
PROV, ya que no se ha especificado el identificador de proveedor (ID PROV). Este no forma SQL
parte de la vista.
I Sucede lo mismo que en 2, al tratar de modificar un registro de la vista.
Bases de Datos
Andrea Rodrı́guez
Introducción
Vistas de subconjunto de filas
Manipulación de
Tablas
En estos casos sucede lo mismo que las vistas de subconjunto de Especificación de
Restricciones
columnas, de tal manera que si incluyen la clave primaria,
Consultas Básicas
será posible actualizarlas
Subconsultas
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Vistas de Join Restricciones
Consultas Básicas
Subconsultas
S = (S1, S2, S3, S4) Null y Unknown
P = (P1, P2, P3, P4) Restricciones a
nivel de esquema y
So
nP = (S1, S2, S3, S4, P1, P2, P3, P4) triggers
Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Vistas de resumen estadı́stico Restricciones
Consultas Básicas
CREATE VIEW PC (P, CANTTOTAL)
Subconsultas
AS SELECT P, SUM(CANT) FROM SP
Null y Unknown
GROUP Y P;
Restricciones a
nivel de esquema y
triggers
Esta vista no permite modificaciones ni inserciones en el atributo
Views
CANTTOTAL
Indices en SQL
Recursividad en
SQL
Bases de Datos
Null y Unknown
I La lista en SELECT debe incluir suficientes atributos que por Restricciones a
cada tupla insertada en al vista, se puede llenar los otros nivel de esquema y
triggers
atributos con valores NULOS o el defecto definido (debe
Views
poderse identificar únicamente la tupla a insertar).
Indices en SQL
I Los únicos valores insertados son los que deben aparecer en Recursividad en
el SELECT. SQL
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Resumen: Vistas actualizables (cont.)
Especificación de
Restricciones
I Se pueden también borrar vistas actualizables. El borrar, al Consultas Básicas
igual que insertar, se pasa a la relación R subyacente. Sin Subconsultas
embargo, para aseguar que solo las tuplas que son vistas sean
Null y Unknown
las que se borran, se agrega (usando AND) la condición del
Restricciones a
WHERE de la vista en el WHERE del borrado. nivel de esquema y
triggers
I Similarmente para el update, se actualizan las tuplas que Views
cumplen la condición del view. Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Manipulación de
Tablas
I Ofrecen independencia lógica de datos, en casos de
Especificación de
reestructuración de la base de datos. La independencia lógica Restricciones
ha de entenderse como la independencia de los usuarios con Consultas Básicas
respecto a la estructura lógica de la base de datos. Subconsultas
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Instead-of de Triggers sobre Vistas Especificación de
Restricciones
I Cuando un trigger es definido sobre una vista, se puede usar Consultas Básicas
INSTEAD OF en lugar de BEFORE o AFTER para que Subconsultas
cuando un evento active un trigger, la acción del trigger se Null y Unknown
realice en vez del event en sı́ mismo. Es decir, el instead-of Restricciones a
intercepta un intento de modificación de una vista y en su nivel de esquema y
triggers
lugar, realiza cualquier acción el diseñador de la base de
Views
datos intenta hacer.
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Instead-of de Triggers sobre Vistas (cont.) Tablas
Especificación de
Restricciones
CREATE VIEW EmpleadosMujeres AS
Consultas Básicas
SELECT nombre, apellido, salario
Subconsultas
FROM EMPLEADO
Null y Unknown
WHERE sexo=’F’;
Restricciones a
nivel de esquema y
Este ejemplo hace que cuando se insertar tuplas, el sistema no triggers
puede deducir que el empleado es en efecto una mujer ya que sexo Views
no es parte del la cláusua SELECT. Entonces se puede usar Indices en SQL
INSTEAD-OF para suplir este efecto. Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Consultas Básicas
CREATE TRIGGER EmpleadosMujerInsert AS
Subconsultas
INSTEAD OF INSERT ON EmpleadosMujer
Null y Unknown
REFERENCING NEW ROW AS NewRow
Restricciones a
FOR EACH ROW nivel de esquema y
INSERT INTO EMPLEADO(nombre,apellido,salario, sexo) triggers
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Vista Materializadas: costo de mantención
Especificación de
Restricciones
CREATE MATERIALIZED VIEW EmpleadosMujeres AS
Consultas Básicas
SELECT nombre, apellido, salario
Subconsultas
FROM EMPLEADO
WHERE sexo=’F’; Null y Unknown
Restricciones a
nivel de esquema y
En principio un DBMS necesita recalcular una vista materializada triggers
cada vez que una de sus tablas bases en actualizada. Para vistas Views
simples, es posible limitar el número de veces que uno necesita Indices en SQL
recalcular la vista. Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Especificación de
I No se necesita actualizar la vista cuando se actualizan Restricciones
atributos que no están en la definición de la vista. Consultas Básicas
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Vista Materializadas: mantención periódica Especificación de
Restricciones
Null y Unknown
I En esos casos, se puede considerar actualizaciones periódicas
Restricciones a
de manera de manejar esperas entre vistas actualizadas pero nivel de esquema y
triggers
que no afectan significativamente un proceso o análisis de
datos. Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Vista Materializadas: Reescritura de consultas Especificación de
Restricciones
Existe una simple regla para saber cuándo una consulta puede ser Consultas Básicas
Null y Unknown
Vista Consulta Restricciones a
nivel de esquema y
SELECT LV SELECT LQ triggers
FROM RV FROM RQ Views
WHERE CV WHERE CQ Indices en SQL
Recursividad en
SQL
Bases de Datos
Vista Materializadas: Reescritura de consultas (cont.)
Andrea Rodrı́guez
Vista Consulta
Introducción
SELECT LV SELECT LQ
Manipulación de
FROM RV FROM RQ Tablas
WHERE CV WHERE CQ Especificación de
Restricciones
Subconsultas
I La condición CQ es equivalente a CV [AND C ], para algún C .
Null y Unknown
I Si C es necesario, entonces los atributos de la relación en RV Restricciones a
nivel de esquema y
que C menciona son atributos en la lista LV triggers
Recursividad en
SQL
Entonces se puede reescribe Q para usar V como sigue:
I Reemplace la lista RQ por vista V y las relaciones que están
en la lista RQ pero no en RV .
I Reemplace CQ por C . Si C no es necesario (CV = CQ ),
entonces no existe el WHERE.
Bases de Datos
Andrea Rodrı́guez
Introducción
Vista Materializadas: Reescritura de consultas - Ejemplo Manipulación de
Tablas
Andrea Rodrı́guez
(cont.) Manipulación de
Tablas
Vista Consulta Especificación de
SELECT title, year,name SELECT startName Restricciones
name = ’Bialystock’;
Bases de Datos
Andrea Rodrı́guez
Vista Materializadas: creación automática
Uno puede pensar es usar una creación automática de vistas Introducción
materializadas de manera de agilizar el proceso de consultas. En Manipulación de
principio cualquier consulta puede ser considerada una vista, pero Tablas
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Indices: Motivación Especificación de
Restricciones
I Un ı́ndice sobre un atributo de una relación es una estructura Consultas Básicas
de datos que hace eficiente encontrar las tuplas que tienen un Subconsultas
valor del atributo. Null y Unknown
Views
I Uno de los ı́ndices más comunes es el Btree.
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Indices: Declaración Tablas
Aunque los ı́ndices no son parte del estándar de SQL hasta SQL99, Especificación de
Restricciones
la mayorı́a de los motores de bases de datos permiten crear ı́ndices
sobre ciertos atributos. Esto se puede hacer, por ejemplo, sobre el Consultas Básicas
Null y Unknown
CREATE INDEX YearIndex On Movie(year);
Restricciones a
Muchos de los motores también permiten definir ı́ndices sobre nivel de esquema y
triggers
múltiples atributos (ej. claves de múltiples atributos). En esos
Views
casos uno puede pensar en un order particular para los atributos
combinados que sea más conveniente, dejando como primer Indices en SQL
Andrea Rodrı́guez
Introducción
Manipulación de
Indices: Selección Tablas
Especificación de
Dos factores importantes son: Restricciones
Consultas Básicas
I La existencia de un ı́ndice sobre un atributo puede acelerar la
ejecución de consultas en la cual un valor o rango de valores Subconsultas
Andrea Rodrı́guez
Introducción
Indices: Selección (cont.)
Manipulación de
Tablas
Andrea Rodrı́guez
Lo más frecuente es hacer ı́ndices sobre las claves. Esto porque: Manipulación de
Tablas
I Consultas en las cuales el valor de la clave es especificado es Especificación de
Restricciones
común.
Consultas Básicas
I Debido a que a lo más hay una tupla por un valor de la clave, Subconsultas
los ı́ndices retornan una o ninguna tupla. Entonces, a lo más Null y Unknown
se requiere recuperar una página a memoria principal. Restricciones a
nivel de esquema y
Además, hay dos casos en los cuales un ı́ndice para atributos no triggers
claves puede set recomendable: Views
Indices en SQL
I Si el atributo es casi una clave (pocas tuplas tienen el mismo
Recursividad en
valor) no se necesita recuperar muchas páginas. SQL
Andrea Rodrı́guez
Introducción
Manipulación de
Indices: cálculo de costo Tablas
Especificación de
Restricciones
I Para determinar el costo de crear un ı́ndice debemos hacer
Consultas Básicas
ciertas presunciones acerca de cuales consultas y
modificaciones son las más probables de ocurrir en la base de Subconsultas
Restricciones a
I Ejemplo de datos a considerar son: número de páginas por nivel de esquema y
triggers
relación, algún tipo de información de la distribución de
Views
valores del atributo de interes en las tuplas, modificaciones
Indices en SQL
necesita leer y escribir páginas.
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Indices: cálculo de costo (cont.)
Manipulación de
Tablas
Suponga que hay tres operaciones frecuentes en la base de datos
sobre la relación StarIn: Especificación de
Restricciones
Subconsultas
SELECT movieTitle, movieYear FROM StarIn WHERE
starName = s; Null y Unknown
Restricciones a
I Consulta 2 (Q2): nivel de esquema y
triggers
SELECT starName FROM StarIn WHERE movieTitle = t Views
AND movieYear = y; Indices en SQL
Andrea Rodrı́guez
Indices: cálculo de costo (cont.)
Introducción
Las presunciones o información de la base de datos son Manipulación de
Tablas
I StarIn tiene 10 páginas.
Especificación de
Restricciones
I En promedio, una estrella aparece 3 veces en una pelı́cula y
Consultas Básicas
una pelı́cula tiene 3 estrellas.
Subconsultas
I Debido a que las tuplas de una estrella en particular se Null y Unknown
distribuyen sobre las 10 páginas, aunque se tenga un ı́ndice Restricciones a
sobre starName, entonces, en promedio se necesitan 3 nivel de esquema y
triggers
lecturas para encontrar en promedio 3 tuplas de estrellas o
Views
pelı́culas.
Indices en SQL
I Actualizaciones requieren una lectura y escritura de página. Recursividad en
SQL
I Se asume que, incluso sin ı́ndices, se puede encontrar una
página donde poder insertar una tupla, sin recorrer toda la
relación.
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Indices: cálculo de costo (cont.)
Especificación de
Acción No Indice Indice sobre estrella Indice sobre pelı́cula Ambos Restricciones
Q1 10 4 10 4
Consultas Básicas
Q2 10 10 4 4
I 2 4 4 6 Subconsultas
Null y Unknown
I Se recorre toda tabla cuando no hay ı́ndices por el que buscar
Restricciones a
I Actualización requiere una lectura y una escritura nivel de esquema y
triggers
I Además de la lectura de la tabla se debe leer el ı́ndice (o actualizarlo en Views
caso necesario). Eso hace que el costo sea 4 y no 3 para las consultas
Indices en SQL
con ı́ndices.
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Especificación de
Restricciones
Recursividad: Introducción
Consultas Básicas
Subconsultas
El SQL-99 estándar incluye reglas recursivas, tal como lo hace
Null y Unknown
Datalog (bases de datos deductivas). Sin embargo, la forma de
Restricciones a
cómo la recursividad en SQL es introducida dependen del sistema nivel de esquema y
triggers
de administrador de base de datos.
Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Manipulación de
Ancestro Tablas
Recursividad en
SQL
Ancestros(x, y ) ← Ancesto(x, y )
Ancestros(x, y ) ← Ancestro(x, z) AND Ancestros(z, y )
Bases de Datos
Introducción
Diferentes formas de recursividad: Manipulación de
Tablas
I Forma recursiva derecha:
Especificación de
Restricciones
Ancestros(x, y ) ← Ancesto(x, y ) Consultas Básicas
Null y Unknown
I Forma recursiva izquierda: Restricciones a
nivel de esquema y
triggers
Ancestros(x, y ) ← Ancesto(x, y )
Views
Ancestros(x, y ) ← Ancestros(x, z) AND Ancestro(z, y ) Indices en SQL
Recursividad en
I Forma recursiva no lineal: SQL
Ancestros(x, y ) ← Ancesto(x, y )
Ancestros(x, y ) ← Ancestros(x, z) AND Ancestros(z, y )
Bases de Datos
Andrea Rodrı́guez
Introducción
Especificación de
Restricciones
A veces es necesario manejar negación en una recusividad. Hay
formas seguras e inseguras de manejar negación en la recursividad. Consultas Básicas
de llegada. Para este esquema una regla recusiva de Conecta es: Restricciones a
nivel de esquema y
triggers
Views
Conecta(x, y ) ← Vuelo(a, x, y , d, r ) Indices en SQL
Conecta(x, y ) ← Conecta(x, z) AND Conecta(z, y ) Recursividad en
SQL
Bases de Datos
Preliminares: Negación en reglas recursivas (cont.) Andrea Rodrı́guez
Introducción
Considerando solo vuelos en LAN:
Manipulación de
Tablas
LanConecta(x, y ) ← Vuelo(LAN, x, y , d, r )
Especificación de
LanConecta(x, y ) ← LanConecta(x, z) AND LanConect(z, y ) Restricciones
Consultas Básicas
Subconsultas
Restricciones a
nivel de esquema y
SkyConecta(x, y ) ← Vuelo(Sky , x, y , d, r ) triggers
SkyConecta(x, y ) ← SkyConecta(x, z) AND SkyConecta(z, y ) Views
Indices en SQL
Recursividad en
Luego, uno podrı́a querer saber las ciudad que conecta LAN pero SQL
no SKY
Andrea Rodrı́guez
Introducción
Manipulación de
Tablas
Consultas Básicas
Sin embargo, la siguiente regla ya no funciona: Subconsultas
Null y Unknown
Restricciones a
P(x) ← R(x)AND NOT Q(x) nivel de esquema y
triggers
Q(x) ← R(x)AND NOT P(x)
Views
Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Preliminares: Negación en reglas recursivas (cont.)
Introducción
Manipulación de
En general, se restringe la negación en recusividad cuando la Tablas
negación es estratificada (stratified). Esta propiedad se define com: Especificación de
Restricciones
I Dibuje un grafo cuyos nodos correspondan a los predicados o Consultas Básicas
relaciones de la base de datos intensional Subconsultas
Null y Unknown
I Dibujo un arco desde A a B si una regla con predicado A en
Restricciones a
el consecuente tiene una negación en el antecedente con nivel de esquema y
predicado B. Coloque el signo − a ese arco. triggers
Views
I Dibujo un arco desde A a B si una regla con predicado A en
Indices en SQL
el consecuente no tiene una negación en el antecedente con
Recursividad en
predicado B. SQL
Andrea Rodrı́guez
Introducción
Definiendo bases de datos intensionales en SQL: WITH Manipulación de
Tablas
Especificación de
La sentencia WITH permite la definición de relaciones Restricciones
intensionales (las que son derivadas al aplicar uno o más reglas). Consultas Básicas
Una forma simple de esta sentencia es: Subconsultas
WITH [RECURSIVE] R AS < definición de R > < consulta con R > Null y Unknown
Andrea Rodrı́guez
Introducción
Manipulación de
Definiendo bases de datos intensionales en SQL: WITH Tablas
(cont.) Especificación de
Restricciones
Consultas Básicas
(1) WITH RECURSIVE Conecta(desde, hacia) AS Subconsultas
(2) (SELECT desde, hacia FROM Vuelo)
Null y Unknown
(3) UNION
Restricciones a
(4) (SELECT R1.desde, R2.hacia nivel de esquema y
triggers
(5) FROM Conecta AS R1, Conecta As R2
Views
(6) WHERE R1.hacia = R2.desde)
(7) SELECT * FROM Conecta; Indices en SQL
Recursividad en
SQL
Bases de Datos
Andrea Rodrı́guez
Introducción
Negación estratificada Manipulación de
Tablas
Indices en SQL
(10) (SELECT desde,hacia FROM Conecta WHERE linea =’Lan’)
Recursividad en
(11) EXCEPT SQL
(12) (SELECT desde,hacia FROM Conecta WHERE linea =’Sky’);
Bases de Datos
Andrea Rodrı́guez
Introducción
Manipulación de
Negación no estratificada (no permitida) Tablas
Especificación de
(1) WITH Restricciones
(2) RECURSIVE P(x) AS Consultas Básicas
(3) (SELECT * FROM R)
Subconsultas
(4) EXCEPT
(5) (SELECT * FROM Q) Null y Unknown
Restricciones a
(6) RECURSIVE Q(x) AS nivel de esquema y
triggers
(7) (SELECT * FROM R)
(8) EXCEPT Views
(9) (SELECT * FROM P) Indices en SQL
Recursividad en
(10) SELECT * FROM P; SQL