Está en la página 1de 98

Bases de Datos

Andrea Rodrı́guez

Introducción

Manipulación de
Tablas

SQL: Structured Query Language Especificación de


Restricciones

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

II Semestre - 2013 Recursividad en


SQL
Bases de Datos

Introducción Andrea Rodrı́guez

Introducción
Manipulación de Tablas
Manipulación de
Tablas
Especificación de Restricciones Especificación de
Restricciones

Consultas Básicas Consultas Básicas

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

I SQL (Structured Query Language) Consultas Básicas

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

INFORMATION SCHEMA, que proporciona información Recursividad en


SQL
sobre todos los esquemas del catálogo.
I La ventaja de los catálogos es que se pueden definir
restricciones de integridad, sobre relaciones que están en el
mismo catálogo. Además los esquemas del mismo catálogo
pueden compartir ciertos elementos, como definiciones de
dominio.
Bases de Datos

CREATE TABLE Andrea Rodrı́guez

Introducción
I La instrucción CREATE TABLE permite crear relaciones,
Manipulación de
dándole un nombre y especificando atributos y restricciones. Tablas

I Los atributos se especifican con un nombre, un tipo de datos Especificación de


Restricciones
(para especificar su dominio de valores) y cualquier
Consultas Básicas
restricción del mismo, por ejemplo: NOT NULL.
Subconsultas
I Se especifican las restricciones de clave: de integridad de la Null y Unknown
entidad y referencial Restricciones a
nivel de esquema y
triggers
CREATE TABLE EMPLEADO
(NOMBRE VARCHAR(15) NOT NULL, Views
INIC CHAR,
APELLIDO VARCHAR(15) NOT NULL, Indices en SQL
NUMERO CHAR(9) NOT NULL,
FECHA NAC DATE, Recursividad en
DIRECCION VARCHAR(30), SQL
SEXO CHAR,
SALARIO DECIMAL(10,2),
NRO SUP CHAR(9),
NRO DEPTO INT NOT NULL,
PRIMARY KEY (NUMERO),
FOREIGN KEY (NRO SUP) REFERENCES EMPLEADO (NUMERO),
FOREIGN KEY (NRO DEPTO) REFERENCES DEPARTAMENTO (ND));
Bases de Datos

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

y SMALLINT y reales de diversas precisiones (FLOAT; Consultas Básicas

REAL; DOUBLE PRECISION). Formatos DECIMAL(i,j) o Subconsultas


DEC(i,j) o NUMERIC(i,j), donde i es la precisión (nro de Null y Unknown
dı́gitos) y j la escala (número de decimales) Restricciones a
nivel de esquema y
I Cadena de caracteres, de longitud fija (CHAR(n) o triggers

CHARACTER(n), donde n es el número de caracteres) o de Views

longitud variable (VARCHAR(n) o CHARVARYING(n), Indices en SQL

donde n es el número máximo de caracteres) Recursividad en


SQL
I Cadena de bits, pueden ser de longitud fija n (BIT(n)) o
longitud variable (BIT VARIYNG(n)), donde n es el número
máximo de bits.
Bases de Datos

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

DROP TABLE Introducción

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

I Si se elige la opción RESTRICT, el esquema se eliminará sólo Null y Unknown

si no tiene elementos; en caso contrario no se ejecutará la Restricciones a


nivel de esquema y
instrucción DROP triggers

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

ALTER TABLE Introducción

Manipulación de
I Las posibles acciones de alterar tablas incluyen agregar Tablas

atributos, eliminar atributos, la modificación de la definición Especificación de


Restricciones
de una columna y la agregación y eliminación de restricciones
Consultas Básicas
de tabla.
Subconsultas
I ALTER TABLE EMPRESA.EMPLEADO ADD PUESTO Null y Unknown
VARCHAR(12); Agrega un atributo. Para darle valores a este Restricciones a
nuevo atributo se puede utilizar UPDATE o bien darle un nivel de esquema y
triggers
valor por defecto. Si no se hace esto último, el nuevo atributo
Views
tendrá valor NULL
Indices en SQL
I ALTER TABLE EMPRESA.EMPLEADO DROP DIRECCION Recursividad en
SQL
CASCADE; Elimina atributo DIRECCION de la tabla
EMPLEADO
Bases de Datos
Especificación de Restricciones (1/4)
Andrea Rodrı́guez

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

I La cláusula PRIMARY KEY y FOREIGN KEY permiten Subconsultas

especificar las PK y FK. Null y Unknown

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

primaria referenciada, añadiendo una cláusula de acción de


disparo referencial a una restricción de clave externa.
I Las opciones son: SET NULL, CASCADE y SET DEFAULT,
las opciones son ON DELETE o ON UPDATE.
Bases de Datos

Andrea Rodrı́guez

Introducción

Manipulación de
Tablas

Especificación de Restricciones (2/4) Especificación de


Restricciones

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

Especificación de Restricciones (3/4) Andrea Rodrı́guez

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

las tuplas de EMPLEADO que hagan referencia a la tupla Consultas Básicas


eliminada. Subconsultas

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

empleado actualizada. Views

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

Especificación de Restricciones (4/4) Andrea Rodrı́guez

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

clave primaria en todas las tuplas referenciadoras. Consultas Básicas

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

I En SQL, los atributos de una relación de una tabla base


están ordenados en la secuencia en que se especifican en la
sentencia CREATE TABLE. Las filas no están ordenadas.
Bases de Datos

Andrea Rodrı́guez

Introducción

Consultas Básicas Manipulación de


Tablas

I La sentencia SELECT permite recuperar información de la Especificación de


Restricciones
BD. No tiene nada que ver con la operación de selección del
Consultas Básicas
álgebra relacional.
Subconsultas
I SQL y el Modelo relacional tienen diferencias: SQL permite Null y Unknown
filas duplicadas, es decir, una tabla SQL no es un conjunto de Restricciones a
nivel de esquema y
tuplas, porque los conjuntos no permiten elementos triggers
repetidos. A veces a las tablas SQL se les llama bolsa, bag o Views
multiconjunto. Indices en SQL

I La cláusula DISTINCT elimina las filas repetidas. Recursividad en


SQL
Bases de Datos

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

FROM EMPLEADO Views

WHERE Nombre=‘Juan’ AND APELLIDO = ‘Pérez’; Indices en SQL

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

controlador y el apellido, dirección y fecha de nacimiento del Null y Unknown

jefe de departamento Restricciones a


nivel de esquema y
triggers
SELECT NROPROYECTO, NRODEPTO, APELLIDO, DIRECCION, FECHANACIMIENTO
Views
FROM EMPLEADO, DEPARTAMENTO, PROYECTO
WHERE PROYECTO.NRODEPTO = DEPARTAMENTO.NRODEPTO AND Indices en SQL
DEPARTAMENTO.NROGERENTE = EMPLEADO.NROEMPLEADO
AND LUGARPROYECTO = Concepción; Recursividad en
SQL
Bases de Datos

Andrea Rodrı́guez

Introducción

Consultas sin WHERE Manipulación de


Tablas

Especificación de
Seleccione todos los números de empleado de EMPLEADO Restricciones

Consultas Básicas

SELECT NROEMPLEADO Subconsultas


FROM EMPLEADO;
Null y Unknown

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

I SQL no elimina las filas repetidas en los resultados de Introducción


las consultas, por las siguientes razones: Manipulación de
I La eliminación de duplicados es una operación costosa. Tablas

Una forma de implementarla es ordenar las tuplas Especificación de


Restricciones
primero y luego eliminar los duplicados.
Consultas Básicas
I Es posible que el usuario requiera ver las tuplas
Subconsultas
repetidas en el resultado de la consulta
Null y Unknown
I Cuando se aplica una función agregada, en la mayorı́a
Restricciones a
de los casos no se quiere eliminar los duplicados. nivel de esquema y
triggers
I Si queremos eliminar tuplas repetidas en el resultado de
Views
una consulta, se usa la palabra clave DISTINCT en la
Indices en SQL
cláusula SELECT. Por ejemplo: Recupere el salario de Recursividad en
todos los empleados y los valores de todos los salarios SQL

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

UNION, EXCEPT e INTERSECT, equivalentes a la unión, Manipulación de


Tablas
diferencia e intersección de conjuntos. Las tuplas repetidas Especificación de
se eliminan del resultado y se debe asegurar que las Restricciones

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

Aritmética en Consultas Andrea Rodrı́guez

Introducción
Los operadores suma (+), resta (−), multiplicación (∗) y Manipulación de
división (/) se pueden aplicar a valores numéricos o atributos Tablas

con dominios númericos. Por ejemplo, Muestre los salarios Especificación de


Restricciones
resultantes si cada empleado que trabaja en el proyecto Consultas Básicas
‘Producto X’ recibe un aumento del 10 %. Subconsultas

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

valor de cadena a otro. En el caso de tipos de datos fecha,


tiempo, los operadores incluyen el incremento (+) o
disminución (−), en un intervalo compatible con el tipo de
una fecha, o tiempo.
Bases de Datos

Andrea Rodrı́guez

Introducción

Manipulación de
Tablas

Operador BETWEEN Especificación de


Restricciones

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

Cláusula ORDER BY Introducción

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

departamento, alfabéticamente por apellido y nombre. Consultas Básicas

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

BY NOMBREDEPTO DESC, APELLIDO ASC, NOMBRE


ASC
Bases de Datos

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

en los proyectos 1, 2 o 3. Consultas Básicas

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

I La primera consulta anidada selecciona los números de Subconsultas

proyectos en que un Pérez participa como jefe. Null y Unknown

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

Consultas Anidadas Correlacionadas Introducción

I Siempre que una condición en la cláusula WHERE de Manipulación de


Tablas
una consulta anidada hace referencia a un atributo de Especificación de
Restricciones
una relación declarada en la consulta externa, se dice
Consultas Básicas
que las dos consultas están correlacionadas.
Subconsultas
I La consulta anidada se evalúa una sola vez para cada Null y Unknown
tupla (o combinación de tuplas) en la consulta externa Restricciones a
nivel de esquema y
I Ejemplo: Recupere el nombre de cada empleado que triggers

tenga un familiar dependiente con el mismo nombre de Views

pila y sexo que el empleado. Indices en SQL

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

Recupere los nombres de empleados que no tienen familiares Views

dependientes Indices en SQL

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

Subconsultas en el FROM Especificación de


Restricciones
Encuentre el nombre de los empleados que trabajan en Consultas Básicas
Departamento que tienen proyectos en Concepción. Subconsultas

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

todos los empleados, el salario máximo, el mı́nimo y el Subconsultas

salario medio. Null y Unknown

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

Funciones agregadas y agrupación (2/2) Manipulación de


Tablas

Especificación de
Restricciones
Recupere el número de empleados del departamento de
Consultas Básicas
Investigación
Subconsultas

SELECT COUNT(*) Null y Unknown


FROM EMPLEADO, DEPARTAMENTO
WHERE DEPTO.NRODEPTO = EMPLEADO.NRODEPTO AND Restricciones a
NOMBREDEPTO =Investigacin; nivel de esquema y
triggers

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

independiente a cada uno de esos grupos. Recursividad en


SQL
I SQL tiene la cláusula GROUP BY
Bases de Datos

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

SELECT NROPROY, NOMBREPROY, COUNT(*) Recursividad en


FROM PROYECTO, TRABAJA EN SQL
WHERE PROYECTO.NROPROY = TRABAJA EN.NROPROY
GROUP BY NROPROY, NOMBREPROY;
Bases de Datos

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

I HAVING especifica una condición en términos del grupo Views

de tuplas asociado a cada valor de los atributos de Indices en SQL

agrupación. Sólo lo grupos que satisfagan la condición Recursividad en


SQL
entrarán en el resultado de la consulta.
Bases de Datos

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

Valores Nulos Andrea Rodrı́guez

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

En la clausuras del WHERE de una consulta, hay dos reglas Restricciones a


nivel de esquema y
que se aplican al evaluar condiciones sobre nulos: triggers

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

valor de verdad es desconocido (UNKNOWN).


I NULL no se puede ocupar explı́citamente como un
operando.
Bases de Datos

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

TRUE FALSE FALSE TRUE FALSE Null y Unknown


UNKNOWN TRUE UNKNOWN TRUE UNKNOWN Restricciones a
UNKNOWN UNKNOWN UNKNOWN UNKNOWN UNKNOWN nivel de esquema y
UNKNOWN FALSE FALSE UNKNOWN UNKNOWN triggers
FALSE TRUE FALSE TRUE TRUE Views
FALSE UNKNOWN FALSE UNKNOWN TRUE
Indices en SQL
FALSE FALSE FALSE FALSE TRUE
Recursividad en
SQL
Bases de Datos

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

id nombre edad grado Subconsultas


18 Rozas 20 3 Null y Unknown
23 Mella 23 6 Restricciones a
22 Pinto 25 4 nivel de esquema y
50 Bravo 18 null triggers

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

SELECT p1.nombre Null y Unknown


FROM PERSONA as p1
WHERE NOT EXISTS (SELECT * FROM PERSONA as p2 Restricciones a
WHERE p2.edad < 21 AND p1.grado <= p2.grado) nivel de esquema y
triggers
SELECT p1.nombre
FROM PERSONA as p1 Views
WHERE p1.grado >=ANY (SELECT p2.grado FROM PERSONA as p2
Indices en SQL
WHERE p2.edad < 21)
Recursividad en
SQL
Bases de Datos

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

I Un trigger (disparador) es un serie de acciones Restricciones a


nivel de esquema y
asociadas con ciertos eventos, tales como la inserción triggers

en una relación particular, y que son activadas cuando Views

un evento ocurre. Indices en SQL

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

generoCHAR(1) CHECK (gender IN (’F’,’M’)) Subconsultas

Null y Unknown

CREATE TABLE EstrellaCine( nombre CHAR(30) PRIMARY KEY, Restricciones a


direccion VARCHAR(255), nivel de esquema y
genero CHAR(1), triggers
nacimiento DATE,
CHECK( genero = ’F’ OR nombre NOT LIKE ’ Ms. %’)); Views

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

que implica el aborto de una actualización. Views

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

Tipo de restricción Dónde Cuándo Se garantiza Subconsultas


se declara se activa
Null y Unknown
check:atributo atributo inserción en relaciones o No en subconsultas
actualización de atributos Restricciones a
check:tuplas elementos BD inserción de relación o No ensubconsultas nivel de esquema y
actualización de tupla triggers
ckeck:assertion elementos BD cualquier cambio Si
Views

Indices en SQL

Recursividad en
SQL
Bases de Datos

Andrea Rodrı́guez

Introducción

Manipulación de
Tablas

Assertion: Comparison de restricciones (3/3) Especificación de


Restricciones

CREATE TABLE Estudios( nombre CHAR(30) PRIMARY KEY, Consultas Básicas


direccion VARCHAR(255), Subconsultas
ejecutivoC INT REFERENCES Ejecutivos(id), CHECK (ejecutivoC NOT IN (
SELECT id FROM Ejecutivos Null y Unknown
WHERE acciones < 1000000)));
Restricciones a
nivel de esquema y
CREATE ASSERTION Presidentes( (NOT EXISTS ( triggers
(SELECT *
FROM Estudios, Ejecutivos Views
WHERE ejecutivoC = id AND acciones < 1000000));
Indices en SQL

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

hacen tı́picamente a través de vistas, de modo que diferentes Consultas Básicas

usuarios tienen diferentes vistas. Subconsultas

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

base es real, en el sentido que existe almacenada en algún Views

dispositivo fı́sico de almacenamiento. Las vistas no se Indices en SQL

sustentan en datos almacenados, sólo se almacena su Recursividad en


SQL
definición en el catálogo, en base a otras tablas.
Bases de Datos

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

CREATE VIEW INFO DEPTO(NOMBRED,NUM EMP,SALA TOTAL)


Consultas Básicas

AS SELECT NOMBRED,COUNT(*), SUM(SALARIO) Subconsultas

FROM DEPARTAMENTO, EMPLEADO Null y Unknown

WHERE ND = NUMEROPD Restricciones a


nivel de esquema y
GROUP BY NOMBRED; triggers

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

I Implementar eficientemente vistas es complejo. Introducción

I La estrategia de modificación de consultas conlleva covertir Manipulación de


Tablas
la consulta sobre la vista en una consulta sobre las tablas de
Especificación de
base subyacentes. Restricciones

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

Vistas de subconjunto de columnas (1/2)


Introducción

Manipulación de
Si la vista ha sido creada incluyendo la clave primaria de la relación Tablas

subyacente, es actualizable. Por el contrario, si no la incluye, no es Especificación de


Restricciones
actualizable. Considere la siguiente table de Proveedores, donde
Consultas Básicas
ID PROV es el id, NOMBRE el nombre, SITUACION es un código
Subconsultas
de estado y CIUDAD la ciudad de proveedores
Null y Unknown

ID PROV NOMBRE SITUACION CIUDAD Restricciones a


nivel de esquema y
S1 LAPIZ LOPEZ 20 CONCEPCION
triggers
S2 TORRE 10 SANTIAGO
S3 REHIN 30 SANTIAGO Views
S4 PELIKAN 20 CONCEPCION
S5 XEROX 30 TEMUCO Indices en SQL

Recursividad en
I CREATE VIEW ID CIUDAD
VISTA 1: SQL
AS SELECT ID PROV,CIUDAD FROM PROV;

I CREATE VIEW SITUACION CIUDAD


VISTA 2:
AS SELECT SITUACION,CIUDAD FROM PROV;
Bases de Datos

Andrea Rodrı́guez

Vistas de subconjunto de columnas 2/2


Introducción

I CREATE VIEW ID CIUDAD Manipulación de


VISTA 1:
AS SELECT ID PROV,CIUDAD FROM PROV; Tablas

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

ID PROV NOMBRE SITUACION CIUDAD Null y Unknown


S1 LAPIZ LOPEZ 20 CONCEPCION
S2 TORRE 10 SANTIAGO Restricciones a
S3 REHIN 30 SANTIAGO nivel de esquema y
S4 PELIKAN 20 CONCEPCION triggers
S5 XEROX 30 TEMUCO
Views

CREATE VIEW PROV CONCEPCION Indices en SQL


I VISTA 1: AS SELECT SITUACION,CIUDAD FROM PROV
WHERE CIUDAD= ‘CONCEPCION’; Recursividad en
SQL
I Esta vista si no es actualizable ya que el ID PROV no es
Bases de Datos

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

Resumen: Vistas actualizables Andrea Rodrı́guez

En general, SQL permite modificación sobre vistas cuando vistas Introducción


son definidas por seleccón (SELECT y no SELECT DISTINCT) de
Manipulación de
algunos atributos de una relación R (la cual puede a su vez ser una Tablas
vista actualizable) con las siguientes condiciones: Especificación de
Restricciones
I La cláusula WHERE no debe envolver una subconsulta en R Consultas Básicas

I La cláusura FROM debe contener una ocurrencia de R Subconsultas

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

I Una inserción puede no tener resultados sobre la vista si es


que la tupla insertada no cumple la condición de la definición
de la vista.
Bases de Datos

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

Resumen Vistas:Ventajas Introducción

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

I Permiten a diferentes usuarios ver los mismos datos de Null y Unknown

distintas maneras y al mismo tiempo. Restricciones a


nivel de esquema y
triggers
I Se simplifica la percepción del usuario, ya que estos sólo se
Views
concentran en aquellos datos que les son interesantes.
Indices en SQL
I Son un mecanismo de seguridad, debido a que habrán datos Recursividad en
ocultos (los no visibles a través de la vista). Dichos datos SQL

están a salvo de accesos.


Bases de Datos

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

Instead-of de Triggers sobre Vistas (cont.) Especificación de


Restricciones

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

VALUES(NewRow.nombre, NewRow.apellido, ’F’, NewRow.salario); Views

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

Vista Materializadas: costo de mantención (cont.) Manipulación de


Tablas

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

I La idea básica es que todas las actualizaciones sobre las Subconsultas

vistas materializadas sean incrementales. Es decir, no se debe Null y Unknown

reconstruir la vista completa. Restricciones a


nivel de esquema y
triggers
I Para delete, insert y udpate, estas actualizaciones se pueden
Views
traducir en una o más consultas sobre las vistas. Más aún,
Indices en SQL
estas actualizaciones solo afectan algunas de las tuplas en las
vistas. Recursividad en
SQL
Bases de Datos

Andrea Rodrı́guez

Introducción

Manipulación de
Tablas
Vista Materializadas: mantención periódica Especificación de
Restricciones

I Cuando la actualización de una base es muy frecuente, Consultas Básicas

manejar vista puede ser mus costoso. Subconsultas

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

reescrita para usar materializadas vistas. Considere: Subconsultas

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

I Las relaciones en RV aparecen todas en RQ . Consultas Básicas

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

I Atributos en LQ que vienen de las relaciones en la lista RV Views

están también en la lista LV . Indices en SQL

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

Movie(title,year, length, genre,studioName,producer) Especificación de


Restricciones
StarIn(titleMovie,starName, movieYear)
Consultas Básicas
MovieExec(name,address, netWorth)
Subconsultas
Se define una vista materializada y consulta de la siguiente forma:
Null y Unknown
Vista Consulta
Restricciones a
SELECT title, year,name SELECT startName nivel de esquema y
triggers
FROM Movie,MovieExec FROM StarIn, Movie,MovieExec
Views
WHERE producer = name movieTitle = title AND
Indices en SQL
producer = name AND
name = ’Bialystock’ AND Recursividad en
SQL
movieYear = year;
Bases de Datos

Andrea Rodrı́guez

Vista Materializadas: Reescritura de consultas - Ejemplo Introducción

(cont.) Manipulación de
Tablas
Vista Consulta Especificación de
SELECT title, year,name SELECT startName Restricciones

FROM Movie,MovieExec FROM StarIn, Movie,MovieExec Consultas Básicas

WHERE producer = name movieTitle = title AND Subconsultas


producer = name AND Null y Unknown
name = ’Bialystock’ AND Restricciones a
nivel de esquema y
movieYear = year; triggers
Reescritura: Views
SELECT startName Indices en SQL
FROM StarIn, MovieProd Recursividad en
WHERE movieTitle = title AND movieYear = year AND SQL

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

eso no tiene sentido. Se puede restringir este número considerando Especificación de


Restricciones
que se crean vista que:
Consultas Básicas

I Tienen una lista de relaciones en el FROM que son un Subconsultas

subconjunto de aquellas en el FROM de al menos una Null y Unknown

consulta de la carga de trabajo establecida. Restricciones a


nivel de esquema y
triggers
I Tienen un WHERE que es un AND de condiciones que cada
Views
una aparece al menos en una consulta.
Indices en SQL
I Tiene una lista de atributos en el SELECT que son Recursividad en
suficientes para ser usados en al menos una consulta. SQL

Nota: Consideraciones adicionales para decidir si una vista


materializada es conveniente es el tamaño de relaciones que
produce.
Bases de Datos

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

I Cuando la relación es muy grande, entonces se hace costoso Restricciones a


nivel de esquema y
tener que recorrer toda la relación. triggers

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

atributo year de la relación Movie de la siguiente forma: Subconsultas

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

atributo el que sea más utilizado en forma individual. Recursividad en


SQL
Bases de Datos

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

es especificado para este atributo, y puede acelerar Null y Unknown

operaciones de join que involucren este atributo también. Restricciones a


nivel de esquema y
triggers
I Por otro lado, cada operación de actualización en una
Views
relación que contiene algún ı́ndice sobre sus atributos se hace
Indices en SQL
más compleja y costosa.
Recursividad en
SQL
Bases de Datos

Andrea Rodrı́guez

Introducción
Indices: Selección (cont.)
Manipulación de
Tablas

I Para entender como seleccionar un ı́ndice, es necesario Especificación de


Restricciones
conocer el costo de contestar una consulta. Por el momento,
Consultas Básicas
sepamos que las tuplas se almacenan generalmente
Subconsultas
distribuidas en páginas en el disco, donde una página
Null y Unknown
generalmente almacena varios bytes, y consecuentemente,
Restricciones a
posiblemente varias tuplas. nivel de esquema y
triggers
I Para examinar cada tupla, se requiere traer toda la página en
Views
memoria principal. Por otro, cuesta un poquito más examinar
Indices en SQL
toda las tuplas de una página que solo una tupla.
Recursividad en
SQL
I En el extremo, se requiere revisar todas las páginas en disco.
Bases de Datos

Andrea Rodrı́guez

Indices: Uso Introducción

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

I Si las tuplas están agrupadas por ese valor.


Bases de Datos

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

datos. Null y Unknown

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

I Consulta 1 (Q1): Consultas Básicas

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

I Insertar (I): Recursividad en


SQL
INSERT INTO StarIn VALUES(t,y,s);
Bases de Datos

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

Preliminares: Reglas recursivas


Introducción

Manipulación de
Ancestro Tablas

Persona Ancestro Especificación de


Restricciones
X Z
Consultas Básicas
Y Z
Subconsultas
Z Q
Null y Unknown
Q R
Restricciones a
nivel de esquema y
triggers
Se pude definir una bases de datos en forma intensional con las
Views
siguientes reglas:
Indices en SQL

Recursividad en
SQL
Ancestros(x, y ) ← Ancesto(x, y )
Ancestros(x, y ) ← Ancestro(x, z) AND Ancestros(z, y )
Bases de Datos

Preliminares: Reglas recursivas (cont.) Andrea Rodrı́guez

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

Ancestros(x, y ) ← Ancestro(x, z) AND Ancestros(z, y ) Subconsultas

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

Preliminares: Negación en reglas recursivas Manipulación de


Tablas

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

En el siguiente ejemplo, considere una relación Vuelo(x, y , z, d, r ), Subconsultas

donde x es aerolı́nea, y desde, z hacia, d hora de partida y r hora Null y Unknown

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

Considerando solo vuelos en Sky: Null y Unknown

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

SoloLan(x, y ) ← LanConecta(x, y ) AND NOTSkyConecta(x, y )

En este caso, la regla funciona bien.


Bases de Datos

Andrea Rodrı́guez

Introducción

Manipulación de
Tablas

Preliminares: Negación en reglas recursivas (cont.) Especificación de


Restricciones

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

I Si el grafo tiene un ciclo conteniendo uno más signos


negativos, entonces la negación no es estratificada.
Bases de Datos

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

Además, se pueden definir varias relaciones temporales Restricciones a


nivel de esquema y
triggers
WITH
[RECURSIVE] R1 AS < definicion R1 >, Views
[RECURSIVE] R2 AS < definicion R2 >, Indices en SQL
....
Recursividad en
[RECURSIVE] Rn AS < definicion Rn > SQL
< query involving R1 , R2 . . . Rn >
Bases de Datos

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

(1) WITH Especificación de


Restricciones
(2) Triples As SELECT linea, desde, hacia FROM vuelo,
Consultas Básicas
(3) RECURSIVE Conecta(linea, desde, hacia) AS Subconsultas
(4) (SELECT * FROM Triples)
Null y Unknown
(5) UNION
(6) (SELECT Triples.linea, Triples.desde, Triples.hacia Restricciones a
(7) FROM Triples, Conecta nivel de esquema y
triggers
(8) WHERE Triples.hacia = Conecta.desde AND
(9) Triples.linea = Conecta.linea Views

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

También podría gustarte