04.anexo Algebra PDF
04.anexo Algebra PDF
04.anexo Algebra PDF
Esquema de la BD EMPRESA
Restricciones relacionales con restricciones de integridad referencial
Operaciones de actualizacin
lgebra relacional
y violacin de las RI
Operaciones de actualizacin: Operaciones para manipular relaciones enteras
Insertar Permiten especificar consultas (recuperacin de datos)
Eliminar El resultado de una consulta es otra relacin
Actualizar (modificar)
Operaciones especficas del lgebra relacional:
Cuando se aplican no deben violar ninguna RI SELECCIONAR
Unarios
PROYECTAR
Insertar y actualizar pueden violar los 4 tipos de RI REUNIN (JOIN) Binario
Eliminar slo puede violar la I. Referencial
Operaciones de teora de conjuntos:
En SQL se pueden definir acciones asociadas a la
violacin de RI (ejemplo. ON UPDATE UNIN
CASCADE) INTERSECCIN
Binarios
DIFERENCIA
PRODUCTO CARTESIANO
Otras operaciones:
DIVISIN
FUNCIONES AGREGADAS Y DE AGRUPACIN
Etc.
EMPLEADO EMPLEADO
NOMBRE INIC APELLIDO NSS NSS_SUPERV ND NOMBRE INIC APELLIDO NSS SEXO SALARIO NSS_SUPERV ND
John B Smith 123456789 333445555 5 John B Smith 123456789 H 30.000 333445555 5
Franklin T Wong 333445555 888665555 5 Franklin T Wong 333445555 H 40.000 888665555 5
Alicia J Zelaya 999887777 ... 987654321 4 Alicia J Zelaya 999887777 ... M 25.000 987654321 4
Jennifer S Wallace 987654321 888665555 4 Jennifer S Wallace 987654321 M 43.000 888665555 4
Ramesh K Narayan 666884444 333445555 5 Ramesh K Narayan 666884444 H 38.000 333445555 5
Joyce A English 453453453 333445555 5 Joyce A English 453453453 M 25.000 333445555 5
Ahmad V Jabbar 987987987 987654321 4 Ahmad V Jabbar 987987987 H 25.000 987654321 4
James E Borg 888665555 nulo 1 James E Borg 888665555 H 55.000 nulo 1
Conmutativa: <COND1>( <COND2>(R) ) = <COND2>( <COND1>(R) ) <LISTA1> (<LISTA2> (R)) = <LISTA1> (R)
<COND1>( <COND2>(R) ) = <COND1> Y <COND2>(R) No es conmutativa
N D R
NOMBREP NMD B A A B
ProductoX 5 b1 a1 a1 b1
ProductoY 5 b1 a2 a2 b4
ProductoZ 5 b1 a3 a3
Automatizacin 4 b1 a4
Reorganizacin 1 b2 a1
Nuevos beneficios 4 b2 a3
b3 a2 X cjto. de atributos de N
DPT(NOMBRED, NMD) b3 a3 Y cjto. de atributos de D
NOMBRED, NMEROD(DEPARTAMENTO) b3 a4 Z cjto. de atributos de R
b4 a1
NOMBRED NMD Tiene que haber al b4 a2
menos un par de b4 a3 t[X] valores de los atributos
Investigacin 5
atributos con el del cjto X en la tupla t
Administracin 4
Direccin 1 mismo nombre
Para cada atributo de D debe haber otro en N de igual
nombre: Y X
Desaparece un NMD El resultado tiene los atributos de N que NO estn en D:
DEPTO_PROY PRY * DPT Z=X - Y
NOMBREP NMD NOMBRED Son tuplas del resultado, tR, las que cumplen:
ProductoX 5 Investigacin La combinacin de valores de t est en alguna tupla de
ProductoY 5 Investigacin N
ProductoZ 5 Investigacin Esa combinacin de valores de t se encuentra en tuplas
Automatizacin 4 Administracin de N junto todas y cada una de las combinaciones de
Reorganizacin 1 Direccin valores de las tuplas de D
Nuevos beneficios 4 Administracin Es decir, tR si y solo si :
tD D tN N tal que ( t = tN[Z] tD = tN[Y] )
A. Jaime 2003 DBD Tema 4 17 A. Jaime 2003 DBD Tema 4 18
EMP
EMPAPELLIDO, NSS(EM- DEPNOMBRED, NSS_JEFE(DE-
NSS NOM DPTO PLEADO) PARTAMENTO)
11 Alfredo LSI APELLIDO NSS NOMBRED NSS_JEFE
22 Ana LSI Smith 123456789 Investigacin 333445555
33 Juan ATC NO cuenta los Wong 333445555 Administracin 987654321
44 Federico nulo valores diferentes Zelaya 999887777
en el campo NOM Direccin 888665555
55 Ana LSI Wallace 987654321
para un mismo
R1DPTO CUENTA NOM(EMP) DPTO, sino cuntas Narayan 666884444
tuplas tienen valor English 453453453
DPTO CUENTA_NOM asignado en NOM Jabbar 987987987 Reunin externa
LSI 3 para un mismo valor
de DPTO Borg 888665555 izquierda R ]| S
ATC 1
nulo 1
S considera el nulo R APELLIDO, NOMBRED(
como valor de EMP ]|NSS=NSS_JEFE DEP)
R2NOM CUENTA DPTO(EMP) agrupacin APELLIDO NOMBRED Conserva todas
NOM CUENTA_DPTO
Smith nulo las tuplas de
Alfredo 1 NO considera en la Wong Investigacin EMP aunque sea
Ana 2 cuenta (o en el
Zelaya nulo rellenando todos
Juan 1 promedio, suma, ...)
Federico 0 los valores nulos Wallace Administracin los campos
que pueda haber correspondientes
Narayan nulo
Permite especificar a DEP con
English nulo
una combinacin de valores nulos
Jabbar nulo
atributos de R3NOM, DPTO CUENTA NSS(EMP)
agrupacin Borg Direccin
NOM DPTO CUENTA_NSS
Alfredo LSI 1
Ana LSI 2 Reunin externa derecha R |[ S
Juan ATC 1
Federico nulo 1
Reunin externa completa R ][ S
Atributos
Atributos
( NOMBRED VARCHAR(15) NOT NULL,
CREATE SCHEMA Nombre [AUTHORIZATION Usuario]; NUMEROD INT NOT NULL,
NSS_JEFE CHAR(9) NOT NULL,
Cuenta propietaria del esquema FECHA_INIC_JEFE DATE, Clave primaria
Restricciones
Restricciones
PRIMARY KEY(NUMEROD), Integridad de entidades
UNIQUE(NOMBRED), Clave candidata
Catlogo del SGBD: coleccin de esquemas en un FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
entorno SQL ); Clave extranjera (o externa)
Atributos
_SCHEMA Valor por
Atributos
CREATE TABLE DEPARTAMENTO
Tablas defecto
( NOMBRED VARCHAR(15) NOT NULL,
Elementos
Restricciones
Vistas
... NUMEROD INT NOT NULL DEFAULT 888665555,
de un NSS_JEFE CHAR(9) NOT NULL,
esquema Dominios FECHA_INIC_JEFE DATE,
nombre)
Restricciones
(connombre)
Restricciones
Autorizaciones CONSTRAINT CLP_DPTO PRIMARY KEY(NUMEROD),
CONSTRAINT CLS_DPTO UNIQUE(NOMBRED),
(con
CONSTRAINT CLE_JEFES_DPTO FOREIGN KEY(NSS_JEFE)
Esquema especial que da
REFERENCES EMPLEADO(NSS)
a los usuarios autorizados
ON DELETE SET DEFAULT
informacin de todos los
esquemas del catlogo del ON UPDATE CASCADE
SGBD );
Acciones: a realizar en caso de borrado (ON DELETE) o
Constraint: modificacin (ON UPDATE) del valor referenciado
Restricciones de integridad (RI): slo entre se pone
nombre a la Opciones:
relaciones del mismo catlogo del SGBD RI, para poder CASCADE
cambiarla o
Esquemas del catlogo del SGBD: pueden eliminarla con SET DEFAULT
ALTER y SET NULL
compartir elementos (por ejemplo dominios) DROP RESTRICT (no poner ON UPDATE ON DELETE)
RESTRICT:borra el esquema slo si NO contiene En las tuplas existentes se asignan valores NULL.
Alternativas: definir DEFAULT o introducir valores con
ningn elemento la orden UPDATE (se estudiar ms adelante)
CASCADE: borra el esquema y todos sus NOT NULL no est permitido
contenidos
Borrar columnas:
ALTER TABLE EMPRESA.EMPLEADO DROP
Borrar una tabla de un esquema: DIRECCIN CASCADE;
CASCADE borra tambin las restricciones
DROP TABLE DEPENDIENTE CASCADE
(constraints) y vistas que hagan referencia a la
columna (DIRECCIN)
RESTRICT: borra la tabla slo si NO existen
RESTRICT slo borra la columna (DIRECCIN) si no
referencias a la misma:
hay restricciones ni vistas que le hagan referencia
Desde claves externa de otra tabla
Modificar la definicin de columnas:
Desde alguna vista ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
CASCADE: borra tabla y todas las restricciones NSS_JEFE DROP DEFAULT;
ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
(constraints) y vistas donde haya referencias a sta NSS_JEFE SET DEFAULT 333445555;
Elimina la definicin DEFAULT 888665555
Inserta una nueva definicin de DEFAULT para el
atributo NSS_JEFE
Nombre, apellido y direccin de los empleados del Seleccionar todos los atributos de EMPLEADO
departamento de investigacin
C1Aiv: SELECT EMPLEADO.*
Calificando atributos: FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=Investigacin AND ND=NMEROD
C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIN
FROM EMPLEADO, DEPARTAMENTO Seleccionar todos los valores (incluidos los repetidos)
WHERE DEPARTAMENTO.NOMBRE = Investigacin AND de salario de EMPLEADO
DEPARTAMENTO.ND=EMPLEADO.ND
C11:SELECT ALL SALARIO Opcin por
FROM EMPLEADO defecto
Utilizando alias:
Declaracin
C1A:SELECT E.NOMBRE, APELLIDO, DIRECCIN de alias Seleccionar todos los diferentes valores de salario de
EMPLEADO
FROM EMPLEADO AS E, DEPARTAMENTO AS D
WHERE D.NOMBRE = Investigacin AND D.ND=E.ND C11A:SELECT DISTINCT SALARIO
Uso de alias FROM EMPLEADO
LIKE
UNION [ALL], INTERSECT [ALL] y
EXCEPT [ALL] +, -, *, / y ||
Empleados que viven en Houston, Texas:
Por defecto las tuplas repetidas se eliminan del
resultado C12: SELECT NOMBRE, APELLIDO
FROM EMPLEADO
Con UNION ALL se conservan las repeticiones
WHERE DIRECCIN LIKE %Houston, TX%
Se exige compatibilidad de unin
% sustituye a un n arbitrario de caracteres
_ sustituye a un solo carcter
EMPLEADO DEPARTAMENTO
... APELLIDO NSS ... NOMBRED NMEROD NSS_JEFE ...
EMPLEADO
TRABAJA_EN PROYECTO
NOMBRE ... APELLIDO NSS ... SALARIO ...
NSSE NP ... ... NMEROP ... NMD
TRABAJA_EN PROYECTO
NSSE NP ... NOMBREP NMEROP
...
Nmeros de proyecto donde participa Smith como
trabajador o como jefe del departamento controlador:
Nombre y salario de los empleados que trabajan en
C4: SELECT NUMEROP
ProductoX tras aumentarles el sueldo un 10% :
FROM PROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NMD=NMEROD AND NSS_JEFE=NSS AND C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIO
APELLIDO=Smith FROM EMPLEADO, TRABAJA_EN, PROYECTO
UNION WHERE NSS=NSSE AND NP=NMEROP AND
SELECT NP NOMBREP=ProductoX
BETWEEN:
EMPLEADO TRABAJA_EN Informacin de los empleados cuyo salario est entre
NOMBRE ... APELLIDO NSS ... ND NSSE NP ... 30.000 y 40.000
DEPARTAMENTO PROYECTO SELECT *
FROM EMPLEADO
NOMBRED NMEROD NSS_JEFE ... NOMBREP NMEROP
... NMD WHERE (SALARIO BETWEEN 30000 AND 40000)
3 aba 8 aba
5 aba 8 aba ( SELECT NP FROM PROYECTO AS P
Proyectos en WHERE NOT EXISTS
los que no ( SELECT *
trabaja el FROM TRABAJA_EN
empleado T1
WHERE T1.NSSE = T2.NSSE AND
P.NP=T2.NP)
) Tuplas del proyecto
P y del empleado T1
A. Jaime 2003 DBD Tema 4 43 A. Jaime 2003 DBD Tema 4 44
IS NULL e IS NOT NULL Ejemplos con valor null
Ejemplos con valor null (2) Renombrar atributos del resultado con AS
Cdigo de
vendedor Ventas
Cod Vendedor Vendido Cuota C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO,
1 Juan 1000 1000 S.APELLIDO AS NOMBRE_SUPERVISOR
2 Mara 1500 1000 FROM EMPLEADO AS E, EMPLEADO AS S
3 Jess 500 Null
WHERE E.NSS_SUPERV = S.NSS
4 Ana 1000 1200
5 Aitor 1100 1000
6 Leire 2000 Null Cambia el nombre de cualquier columna
(atributo) que aparezca en el resultado
SELECT SUM(CU) AS C1, COUNT(CU) AS C2 , COUNT(*) AS C3
FROM Ventas AS V(CD,VR,VD,CU)
Antes hemos visto que la construccin AS
WHERE Vendido=500 OR Vendido=2000 tambin sirve para declarar alias de tablas:
EMPLEADO
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN ...
... APELLIDO NSS FECHA_NCTO DIRECCIN ...
... SEXO SALARIO NSS_SUPERV ND
DEPARTAMENTO DEPARTAMENTO PROYECTO
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE ... NMD NSS_JEFE ... ... NMEROP LOCALIZACINP NMD
ON ND=NMEROD) AS ED ...
COUNT (cuenta), SUM (suma), MAX (mximo), MIN Cuntos valores de salario diferentes hay:
(mnimo), AVG (media) C23: SELECT COUNT(DISTINCT SALARIO)
dominio con
Con expresiones : AVG(1.1*SALARIO) orden total FROM EMPLEADO NO cuenta
los valores nulos
MAX y MIN tambin con atributos NO numricos
Cuntos valores de salario hay (con repeticiones):
Suma de salarios del dpto. Investigacin, junto a los
C23: SELECT COUNT(SALARIO) Cuenta las filas con
salarios mximo, mnimo y medio:
FROM EMPLEADO salario NO nulo
C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),
AVG(SALARIO)
Cuntos empleados hay:
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NMEROD C23: SELECT COUNT(*) Cuenta todas las
WHERE NOMBRED=Investigacin FROM EMPLEADO filas de la tabla
DEPARTAMENTO 7
EMPLEADO Alicia 10.000 4
NOMBRED NMEROD C23:
NOMBREP SALARIO ND Jennifer 20.000 4 COUNT( *)
Investigacin 5
John NULL 5
Administracin 4 ... Ahmad
James
20.000
20.000
4
1
8
Franklin 15.000 5 Direccin 1
Ramesh
Joyce
... 10.000
10.000
... 5
5 SUM(SA- MAX(SA- MIN(SA- AVG(SAL-
Alicia 10.000 4 C20 LARIO) LARIO) LARIO) ARIO) Qu ocurre cuando todos los salarios valen NULL?
Jennifer 20.000 4 35.000 15.000 10.000 11.666 Qu ocurre cuando la tabla est vaca?
Ahmad 20.000 4
James 20.000 1 C22 COUNT(*) 35.000
35.000/ /33
4
A. Jaime 2003 DBD Tema 4 53 A. Jaime 2003 DBD Tema 4 54
N de empleados con salario>30.000 en cada dpto. Obtener por cada proyecto su nmero y nombre
Slo para dptos. con ms de 2 empleados con ese junto al nmero de empleados que trabajan en l,
sueldo ordenado ascendentemente por el nmero de
SELECT NOMBRED, COUNT(*) empleados
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
C25: SELECT NMEROP, NOMBREP, COUNT(*)
ND = NMEROD
FROM PROYECTO INNER JOIN TRABAJA_EN
WHERE SALARIO>30.000
ON NMEROP=NP
GROUP BY NOMBRED
GROUP BY NMEROP, NOMBREP
HAVING COUNT(*) > 2 ORDER BY COUNT(*) ASC
WHERE (C1, C2, C3) < (T1, T2, T3) Esta NO es una forma eficiente de implementar
una consulta SQL. As pues, cada SGBD tiene
equivale a: rutinas para optimizar la evaluacin.
WHERE C1<T1 OR
(C1=T1 AND C2<T2) OR
(C1=T1 AND C2=T2 AND C3<T3)
En SQL hay varias alternativas para especificar la A1: INSERT INTO EMPLEADO
misma consulta : VALUES (Richard, K, Marini, 653298653, 1962-12-30, 98
Oak Forest, Katy, TX, H, 37000, 987654321, 4)
Mismo orden en el que se especificaron los atributos
Ventaja: el programador elige la tcnica que le en CREATE TABLE
resulte ms cmoda.
A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, NSS)
Desde el punto de vista de optimizacin de VALUES (Richard, Marini, 653298653)
consultas, conviene que las consultas tengan el As los atributos con valor NULL o DEFAULT se
menor anidamiento y el menor ordenamiento pueden omitir
implcito posible. Los valores de VALUES en el mismo orden que se
especifican los atributos en INSERT INTO
Desventaja: el programador puede desconocer Tambin se pueden incluir varias tuplas en la misma
cul es la tcnica ms eficiente en cada caso instruccin: INSERT ... INTO ... VALUES (tupla1), (tupla2),
... (tuplaN)
Idealmente, el SGBD debera procesar la consulta
de la misma manera sin importar cmo se haya A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND)
escrito. VALUES (Robert, Hatcher, 980760540, 2)
Rechazada por la inexistencia del departamento
En la prctica esto resulta muy difcil, y es nmero 2
conveniente que el usuario sea consciente de qu
A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND)
construcciones tienen un costo ms elevado que
VALUES (Robert, Hatcher, 5)
otras.
Rechazada por no proporcionar valor para NSS
(clave primaria: NOT NULL)
A5: UPDATE PROYECTO Una vista es una tabla derivada de otras tablas (que
SET LOCALIZACINP=Bellaire, NMD=5 pueden ser tablas de base u otras vistas).
WHERE NMEROP=10
Tipos de vista:
Una sola tabla
Tabla virtual: se calcula, no se almacena en la
WHERE: seleccin de tuplas a modificar BD. Siempre est al da: sus tuplas se crean
SET: atributos a modificar y nuevos valores cuando se realiza una consulta sobre la vista.
SET: el nuevo valor puede ser NULL o DEFAULT Vista materializada: se crea una fsicamente una
Modificaciones de clave primaria pueden tabla cuando se consulta por primera vez. Se
propagarse a clave/s extranjera/s (debido a las pueden hacer sucesivas consultas sobre esa tabla.
acciones declaradas en la RI, como CASCADE) Hay tcnicas para mantener la vista actualizada de
forma incremental.
Ejemplo de creacin de la vista TRABAJA_EN_1:
A6: UPDATE EMPLEADO CREATE VIEW TRABAJA_EN_1
SET SALARIO=SALARIO*1.1 AS SELECT NOMBRE, APELLIDO, NOMBREP, HORAS
WHERE ND IN (SELECT NMEROD FROM (EMPLEADO INNER JOIN TRABAJA_EN ON
NSS=NSSE) INNER JOIN PROYECTO ON NP=NUMEROP
FROM DEPARTAMENTO
WHERE NOMBRED= Investigacin) La vista se puede usar en consultas:
SELECT NOMBRE, APELLIDO
A la izda se refiere al nuevo valor de SALARIO
FROM TRABAJA_EN_1
A la dcha al valor antiguo WHERE NOMBREP=ProyectoX
Para borrar una vista: DROP VIEW TRABAJA_EN_1
Una vista tiene limitaciones para actualizar sus tuplas
como si fuese una tabla, ya que puede corresponder a
varias actualizaciones de las tablas de base.
Departamento DepNom Director Presupuesto Centro Departamento DepNom Director Presupuesto Centro
Asignatura Cdigo AsigNom Curso Crditos SuDpto Asignatura Cdigo AsigNom Curso Crditos SuDpto
AlumAsig Alum Asig Nota Convocatoria Cdigo AlumAsig Alum Asig Nota Convocatoria Cdigo
Alumno DNI AlumNom Tfno Ciudad Edad Alumno DNI AlumNom Tfno Ciudad Edad
a) Por cada curso, obtener el alumno con mejor nota media g) Nombre de los alumnos que han obtenido como nota
en las asignaturas de este curso. SOBRESALIENTE en al menos dos asignaturas de
cualquiera de los cursos en los que hayan estado
b) Obtener el DNI de los alumnos que estn limpios en
matriculados (sin utilizar funciones agregadas).
3 curso, es decir, que estn matriculados en 3 y tienen
aprobadas todas las asignaturas de cursos inferiores. h) Obtener, sin usar funciones agregadas, el nombre de
los alumnos que estn matriculados slo de
c) DNI de los alumnos que estn matriculados de
asignaturas del departamento DMC.
ALGUNA asignatura de tercero y tienen aprobadas
TODAS las asignaturas de segundo. i) Obtener, sin usar funciones agregadas, el nombre de
los alumnos matriculados en alguna asignatura de
d) Obtener el DNI de los alumnos matriculados en al
tercer curso que no tengan ninguna matrcula en
menos una asignatura de cada uno de los departamentos
asignaturas de segundo curso.
de Informtica.
j) Para cada asignatura del departamento DMC con ms
e) Obtener el nombre de los alumnos que estn
de 10 alumnos matriculados, obtener el cdigo de la
matriculados en sexta convocatoria en al menos dos
asignatura y el nmero de convocatoria media en la
asignaturas (sin utilizar funciones agregadas).
que se encuentran los alumnos de Arnedo
f) Obtener el DNI de los alumnos que estn matriculados
k) Obtener el nombre de los alumnos de Njera mayores
de todas las asignaturas de 3 y de alguna otra asignatura
de 20 aos que se encuentran matriculados en alguna
de cursos inferiores.
asignatura de tercero
A. Jaime 2003 DBD Tema 4 73 A. Jaime 2003 DBD Tema 4 74
PRY1_MAS1HORA R1 R2 TODOS_PRY R3
NSSE NP HORAS NSSE NP NP NP
Soluciones
11 1 5 11 1 1 4
22 1 3 22 2 2
3 3
4
PRY1_MAS1HORA NP=1 Y HORAS>1 (TRAB)
R1 NSS (PRY1_MAS1HORA)
R2 NP (TRAB)
TODOS_PRY NP (PROY)
R3TODOS_PRY - R2
R4 R5
NOMBRE NSS ND NUMD NOMD NOMBRE NOMD
Iker 11 1 1 LSI Iker LSI
Ana 22 1 1 LSI Ana LSI
Jon 33 2 2 ATC Jon ATC
Karmele 44 2 2 ATC Karmele ATC
e) Nombres de todos los empleados que trabajan en cada i) Nombre y direccin de los empleados que trabajan en
uno de los proyectos algn proyecto situado en Houston pero cuyo
PRY_EMPS(NOMP,NSS) NOMBREP, NSSE( departamento no est situado all
Todos los pro-
los empleados
yectos junto a
en cada uno
que trabajan
TODOS_DPTOS NMEROD(DEPARTAMENTO)
en todos y cada
EMPS_TODOS_PRYS(NSS) NP,NSSE(TRABAJA_EN)
proyectos
uno de los