Documente Academic
Documente Profesional
Documente Cultură
Fila= Tupla
Modelo relacional: conceptos, restricciones, operaciones de actualizacin y operaciones del lgebra Revisin de SQL
Relacin = conjunto de tuplas (no tienen sentido tuplas duplicadas) Dominios atmicos: ni compuestos ni multivaluados Esquema de relacin R(A1, ... , An): intensin Relacin (o estado de relacin) r r(R): extensin r={t1, t2, . . ., tm}: conjunto de tuplas Cada valor vi de un ti 1i n es: un elemento de dom(Ai) o un valor nulo
Orden entre las tuplas: no se considera Orden en los valores de una tupla: es una lista ordenada de n valores. Lo importante es la correspondencia atributo-valor
DBD Tema 4 2
A. Jaime 2003
DBD Tema 4
A. Jaime 2003
...
... SEXO
DEPARTAMENTO
SALARIO NSS_SUPERV ND
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE LOCALIZACIONES_DEPT NMEROD LOCALIZACIND PROYECTO NOMBREP NMEROP LOCALIZACINP NMD TRABAJA_EN NSSE NP HORAS
EMPLEADO NOMBRE INIC APELLIDO NSS John B Smith 123456789 Franklin T Wong 333445555 Alicia J Zelaya 999887777 Jennifer S Wallace 987654321 Ramesh K Narayan 666884444 Joyce A English 453453453 Ahmad V Jabbar 987987987 James E Borg 888665555 DEPARTAMENTO NOMBRED NMEROD Investigacin 5 Administracin 4 Direccin 1
A. Jaime 2003
...
Figura 7.7 restricciones de integridad referencial representadas en el esquema de la base de datos relacional EMPRESA
DBD Tema 4
DBD Tema 4
DIRECCIN
731 Fondren, Houston, TX 638 Voss, Houston, TX 3321 Castle, Spring, TX 291 Berry, Bellaire, TX 975 Fire Oak, Humble, TX 5631 Rice, Houston, TX 980 Dallas, Houston, TX 450 Stone, Houston, TX
...
NMEROD 1 4 5 5 5 PROYECTO NOMBREP ProductoX ProductoY ProductoZ Automatizacin Reorganizacin Nuevos beneficios DEPENDIENTE
TRABAJA_EN NSSE 123456789 123456789 666884444 453453453 453453453 333445555 333445555 333445555 333445555 999887777 999887777 987987987 987987987 987654321 987654321 888665555 NP 1 2 3 1 2 2 3 10 20 30 10 10 30 30 20 20 HORAS 32.5 7.5 40.0 20.0 20.0 10.0 10.0 10.0 10.0 30.0 10.0 35.0 5.0 20.0 15.0 nulo
SEXO SALARIO NSS_SUPERV ND H H M M H M H H 30.000 40.000 25.000 43.000 38.000 25.000 25.000 55.000 333445555 888665555 987654321 888665555 333445555 333445555 987654321 nulo 5 5 4 4 5 5 4 1
...
Figura 7.6 (1 parte) Un posible estado de la base de datos relacional del esquema EMPRESA
M H M H H M M
5 4 1
Figura 7.6 (2 parte) Un posible estado de la base de datos relacional del esquema EMPRESA
A. Jaime 2003
DBD Tema 4
lgebra relacional
Operaciones para manipular relaciones enteras Permiten especificar consultas (recuperacin de datos) El resultado de una consulta es otra relacin Operaciones especficas del lgebra relacional:
SELECCIONAR PROYECTAR REUNIN (JOIN)
Unarios Binario
Binarios
Otras operaciones:
DIVISIN FUNCIONES AGREGADAS Y DE AGRUPACIN Etc.
A. Jaime 2003
DBD Tema 4
A. Jaime 2003
DBD Tema 4
Seleccionar:
EMPLEADO NOMBRE INIC APELLIDO John Franklin Alicia Jennifer Ramesh Joyce Ahmad James B T J S K A V E Smith Wong Zelaya Wallace Narayan English Jabbar Borg NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555 NSS_SUPERV ND 333445555 888665555 987654321 888665555 333445555 333445555 987654321 nulo 5 5 4 4 5 5 4 1 EMPLEADO NOMBRE INIC APELLIDO John Franklin Alicia Jennifer Ramesh Joyce Ahmad James B T J S K A V E Smith Wong Zelaya Wallace Narayan English Jabbar Borg
Proyectar:
NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555
...
...
H H M M H M H H
5 5 4 4 5 5 4 1
= sigma ND=4(EMPLEADO)
NOMBRE INIC APELLIDO Alicia Jennifer Ahmad J S V Zelaya Wallace Jabbar NSS 999887777 987654321 987987987 NSS_SUPERV ND 987654321 888665555 987654321 4 4 4
Selecciona un subconjunto de filas (tuplas) de una relacin Las que satisfacen una condicin Condicin: {=, <, , >, , } Y, O, NO El resultado es otra relacin
Selecciona las columnas especificadas de una relacin (desechando el resto de columnas) El resultado es otra relacin Eliminacin de duplicados <LISTA1> (<LISTA2> (R)) = <LISTA1> (R) No es conmutativa
DBD Tema 4 10
DBD Tema 4
A. Jaime 2003
...
Resultado intermedio
TEMP
ND=5(EMPLEADO)
NSS 123456789 333445555 666884444 453453453 SALARIO NSS_SUPERV ND B T K A Smith Wong Narayan English
...
5 5 5 5
Renombre de atributos
R(NOMBRE_PILA, PRIMER_APELL, SALARIO) NOMBRE,APELLIDO,SALARIO(TEMP)
NOMBRE_PILA PRIMER_APELL SALARIO John Franklin Ramesh Joyce Smith Wong Narayan English 30.000 40.000 38.000 25.000
PROFESOR ALUMNO NOMBRE APELLIDO John Smith Ricardo Browne Francis Johnson
...
Compatibilidad con la unin: ambas relaciones deben tener el mismo nmero de atributos y cada par de atributos correspondientes pertenecer al mismo dominio
conmutativas asociativas no conmutativa R S = S R (R S) T = R (S T) R S S R R S = S R (R S) T = R (S T)
A. Jaime 2003
DBD Tema 4
11
DBD Tema 4
12
Reunin (JOIN): ||
EMP
R PR_STAF DP_STAF NOMBREP Automatizacin Automatizacin Nuevos beneficios Nuevos beneficios NOMBRED Administracin Mantenimiento Administracin Mantenimiento NMEROD 4 8 4 8
DPT
NOMBRED, NSS_JEFE(DEPARTAMENTO)
NSS_JEFE
NOMBRED
Relaciones: no han de ser compatibles con la unin R(A1,...,An) S(B1,...,Bm) = Q(A1,...,An, B1,...,Bm) donde R tiene n tuplas y S m tuplas Q tiene n* m tuplas Q consta de todas las combinaciones de cada tupla de R seguida de otra de S
JEFE_DTO DPT
|| NSS_JEFE=NSS EMP
NSS ND Wong Wallace Borg 333445555 5 987654321 4 888665555 1
Combina tuplas relacionadas de 2 relaciones (o de la misma) Operacin muy importante para cualquier BDR Permite procesar vnculos entre relaciones
A. Jaime 2003
DBD Tema 4
13
A. Jaime 2003
DBD Tema 4
14
A. Jaime 2003
DBD Tema 4
15
A. Jaime 2003
DBD Tema 4
16
Divisin:
Ejemplo: R N D
X
NOMBREP, NMD(PROYECTO)
N
B A
NOMBRED, NMEROD(DEPARTAMENTO)
NMD 5 4 1 Tiene que haber al menos un par de atributos con el mismo nombre Desaparece un NMD
b1 b1 b1 b1 b2 b2 b3 b3 b3 b4 b4 b4
a1 a2 a3 a4 a1 a3 a2 a3 a4 a1 a2 a3
D
A
R
B
a1 a2 a3
b1 b4
X cjto. de atributos de N Y cjto. de atributos de D Z cjto. de atributos de R t[X] valores de los atributos del cjto X en la tupla t
5 5 5 4 1 4
Para cada atributo de D debe haber otro en N de igual nombre: Y X El resultado tiene los atributos de N que NO estn en D: Z=X - Y Son tuplas del resultado, tR, las que cumplen: La combinacin de valores de t est en alguna tupla de N Esa combinacin de valores de t se encuentra en tuplas de N junto todas y cada una de las combinaciones de valores de las tuplas de D Es decir, tR si y solo si : tD D tN N tal que ( t = tN[Z] tD = tN[Y] )
DBD Tema 4 18
DBD Tema 4
A. Jaime 2003
Divisin: (2)
La divisin sirve para construir consultas como la siguiente: Obtener el NSS de los empleados que trabajan en todos y cada uno de los proyectos en los que trabaja el empleado con NSS=123456789. NSSE , NMP(TRABAJA_EN) NMP(NSSE=123456789 (TRABAJA_EN))
NMS_PRY NMP 1 2
Funciones agregadas
MXIMO, MNIMO y CUENTA)
(SUMA, PROMEDIO,
y de agrupacin
EMP
NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555 SALARIO 30.000 40.000 25.000 43.000 38.000 25.000 25.000 55.000
En general, los valores duplicados tambin se consideran en los clculos En SQL se puede poner para ello, por ejemplo:
COUNT(DISTINCT SALARIO)
NSS_NMS_PRY
NMS_PRY NSS_NMS_PRY NSSE 123456789 123456789 666884444 453453453 453453453 333445555 333445555 333445555 333445555 999887777 999887777 987987987 987987987 987654321 987654321 888665555 NMP 1 2 3 1 2 2 3 10 20 30 10 10 30 30 20 20
R1
CUENTA_NSS PROMEDIO_SALARIO
R2
NSSS(NSS) NSS_NMS_PRY NMS_PRY
PROMEDIO SALARIO(EMP)
35125
PROMEDIO_SALARIO
El resultado es una relacin, aunque se trate de una sola tupla con un solo atributo
DBD Tema 4
19
A. Jaime 2003
DBD Tema 4
20
Reunin externa
EMPAPELLIDO, NSS(EMPLEADO)
APELLIDO NSS Smith 123456789 Wong 333445555 Zelaya 999887777 Wallace 987654321 Narayan 666884444 English 453453453 Jabbar 987987987 Borg 888665555
DEPNOMBRED, NSS_JEFE(DEPARTAMENTO)
NOMBRED NSS_JEFE Investigacin 333445555 Administracin 987654321 Direccin 888665555
3 1 1
NO cuenta los valores diferentes en el campo NOM para un mismo DPTO, sino cuntas tuplas tienen valor asignado en NOM para un mismo valor de DPTO S considera el nulo como valor de agrupacin NO considera en la cuenta (o en el promedio, suma, ...) los valores nulos que pueda haber
1 2 1 0
Conserva todas las tuplas de EMP aunque sea rellenando todos los campos correspondientes a DEP con valores nulos
1 2 1 1
21
A. Jaime 2003
DBD Tema 4
DBD Tema 4
22
Revisin de SQL
(Structured Query Language)
...
... SEXO
DEPARTAMENTO
SALARIO NSS_SUPERV ND
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE TRABAJA_EN NSSE NP HORAS PROYECTO NOMBREP NMEROP LOCALIZACINP NMD
lgebra relacional orden de las operaciones SQL: lenguaje declarativo Se indica cul es el resultado esperado Permite que el SGBD seleccione las operaciones y el orden ms adecuados para obtener el resultado: optimizacin SGBD comerciales son variantes de SQL Estndares SQL: SQL1 1986, SQL2 1992 y SQL3 (extender SQL2 con conceptos recientes de BD y OO) SQL: Lenguaje de Definicin de Datos (LDD) Lenguaje de Manipulacin de Datos (LMD): consulta y actualizacin Definicin de vistas Especificacin de seguridad y autorizacin Definicin de restricciones de integridad Especificacin de control de transacciones Reglas para inclusin en lenguajes (C, PASCAL,...)
N de proyecto, n de departamento que lo controla, apellido, direccin y fecha de nacimiento del jefe del departamento de todos los proyectos realizados en Stafford PRYS_STAFF LOCALIZACINP=Stafford(PROYECTO) DPT_CONTR PRYS_STAFF || NMD=NMEROD
DEPARTAMENTO JEFE_DP_PRY DPT_CONTR || NSS_JEFE=NSS EMPLEADO RESULTADO NMEROP,NMD,APELLIDO,DIRECCIN,FECHA_NCTO (JEFE_DP_PRY)
Nombre de los empleados que trabajan en todos los proyectos del departamento 5. PRY_DP5 (NMP) NMEROP (NMD=5 (PROYECTO)) EMP_PRY(NSS,NMP) NSSE,NP (TRABAJA_EN) NSSS_EMP EMP_PRY PRY_DP5 RESULTADO APELLIDO, NOMBRE (NSSS_EMP * EMPLEADO)
DBD Tema 4 23
A. Jaime 2003
A. Jaime 2003
DBD Tema 4
24
Catlogo del SGBD: coleccin de esquemas en un entorno SQL Catlogo del SGBD
Esquema 1
Tablas
Restricciones
Atributos Atributos
Esquema 2
INFORMATION _SCHEMA
Restricciones Restricciones
Elementos de un esquema
Vistas Dominios
Autorizaciones
...
Fig 8.1(b) CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD NSS_JEFE FECHA_INIC_JEFE INT CHAR(9) DATE, NOT NULL,
Esquema especial que da a los usuarios autorizados informacin de todos los esquemas del catlogo del SGBD
Restricciones de integridad (RI): slo entre relaciones del mismo catlogo del SGBD Esquemas del catlogo del SGBD: pueden compartir elementos (por ejemplo dominios)
A. Jaime 2003
CONSTRAINT CLE_JEFES_DPTO FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON DELETE SET DEFAULT ON UPDATE CASCADE ); Acciones: a realizar en caso de borrado (ON DELETE) o modificacin (ON UPDATE) del valor referenciado Constraint: CASCADE SET DEFAULT SET NULL RESTRICT (no poner ON UPDATE ON DELETE) DBD Tema 4 26
Opciones:
DBD Tema 4
25
A. Jaime 2003
DEFAULT un-valor: se indica qu valor tomar el atributo si no se le asigna nada. Si no se indica DEFAULT, el valor por defecto es el valor nulo
Se puede calificar con: ON DELETE: en caso de borrarse la tupla a la que se hace referencia con un valor de la clave extranjera ON UPDATE: en caso de modificarse el valor de clave primaria al que se hace referencia con el valor de clave extranjera
CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL DEFAULT 1, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, PRIMARY KEY(NUMEROD), UNIQUE(NOMBRED), FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON UPDATE CASCADE ON DELETE SET NULL );
A. Jaime 2003
Acciones posibles (en ON DELETE / ON UPDATE): SET NULL: el valor de clave extranjera en cuestin se sustituye por el valor nulo SET DEFAULT: el valor de clave extranjera en cuestin se sustituye por el valor por defecto del atributo clave extranjera CASCADE: en caso de ON DELETE se borran las tuplas que hacen referencia a la tupla que desaparece. En caso de ON UPDATE se aplica la misma modificacin en las claves extranjeras que la realizada sobre la clave primaria a la que hacen referencia. CASCADE es adecuada para: vnculos (TRABAJA_EN) atributos multivaluados (LOCALIZACIONES_DEPT) tipos de entidad dbiles (DEPENDIENTE) RESTRICT (cuando NO se pone ON DELETE / ON UPDATE): impide el borrado (si falta ON DELETE) o la modificacin (si falta ON UPDATE) de cualquier tupla referenciada desde un valor de la clave extranjera en cuestin.
CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL DEFAULT 1, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, PRIMARY KEY(NUMEROD), UNIQUE(NOMBRED), FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON UPDATE CASCADE ON DELETE SET NULL );
DBD Tema 4
27
A. Jaime 2003
DBD Tema 4
28
Aadir columnas:
ALTER TABLE EMPRESA.EMPLEADO ADD PUESTO VARCHAR(12);
ningn elemento
CASCADE: borra el esquema y todos sus
En las tuplas existentes se asignan valores NULL. Alternativas: definir DEFAULT o introducir valores con
la orden UPDATE (se estudiar ms adelante) NOT NULL no est permitido
Borrar columnas:
ALTER TABLE EMPRESA.EMPLEADO DROP DIRECCIN CASCADE; CASCADE
columna (DIRECCIN)
RESTRICT
referencias a la misma: Desde claves externa de otra tabla Desde alguna vista
CASCADE: borra tabla y todas las restricciones
slo borra la columna (DIRECCIN) si no hay restricciones ni vistas que le hagan referencia
ALTER TABLE EMPRESA.DEPARTAMENTO ALTER NSS_JEFE DROP DEFAULT; ALTER TABLE EMPRESA.DEPARTAMENTO ALTER NSS_JEFE SET DEFAULT 333445555;
Elimina la definicin DEFAULT 888665555 Inserta una nueva definicin de DEFAULT para el atributo NSS_JEFE
A. Jaime 2003
DBD Tema 4
29
A. Jaime 2003
DBD Tema 4
30
Consultas bsicas
SELECT columnas FROM tablas [WHERE condicin]
La omisin de WHERE equivale a WHERE TRUE
Borrar restricciones:
ALTER TABLE EMPRESA.EMPLEADO DROP CONSTRAINT CLE_SUPERV_EMP;
Es preciso haberle dado un nombre con CONSTRAINT en la definicin (por ejemplo en CREATE TABLE) Aadir restricciones:
ALTER TABLE EMPRESA.EMPLEADO ADD CONSTRAINT CLE_SUPERV_EMP
FOREIGN KEY (NSS_SUPERV) REFERENCES EMPLEADO(NSS) ON DELETE SET NULL ON UPDATE CASCADE;
Condiciones en WHERE: {=, <>, <, >, <=, >=}, AND, OR, NOT El resultado puede contener TUPLAS REPETIDAS
EMPLEADO NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN
...
...
DEPARTAMENTO
C1: SELECT NOMBRE, APELLIDO, DIRECCIN FROM EMPLEADO, DEPARTAMENTO WHERE NOMBRED=Investigacin AND NMEROD=ND
A. Jaime 2003
DBD Tema 4
31
A. Jaime 2003
DBD Tema 4
32
...
DIRECCIN
Calificando atributos:
C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIN FROM EMPLEADO, DEPARTAMENTO
C1Aiv: SELECT EMPLEADO.* FROM EMPLEADO, DEPARTAMENTO WHERE NOMBRED=Investigacin AND ND=NMEROD
Utilizando alias:
C1A:SELECT E.NOMBRE, APELLIDO, DIRECCIN FROM
Declaracin de alias
EMPLEADO AS E, DEPARTAMENTO AS D
Uso de alias
A. Jaime 2003
DBD Tema 4
33
A. Jaime 2003
DBD Tema 4
34
LIKE +, -, *, / y ||
Empleados que viven en Houston, Texas:
C12: SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE DIRECCIN LIKE %Houston, TX%
EMPLEADO
...
APELLIDO NSS
...
...
EMPLEADO NOMBRE
TRABAJA_EN NSSE NP
PROYECTO
...
...
NMEROP
...
NMD
NSS
...
SALARIO
... ...
TRABAJA_EN NSSE NP
Nmeros de proyecto donde participa Smith como trabajador o como jefe del departamento controlador:
FROM PROYECTO, DEPARTAMENTO, EMPLEADO
C4: SELECT NUMEROP WHERE NMD=NMEROD AND NSS_JEFE=NSS AND APELLIDO=Smith UNION SELECT NP FROM TRABAJA_EN, EMPLEADO WHERE NSSE=NSS AND APELLIDO=Smith
Nombre y salario de los empleados que trabajan en ProductoX tras aumentarles el sueldo un 10% :
C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIO FROM EMPLEADO, TRABAJA_EN, PROYECTO WHERE NSS=NSSE AND NP=NMEROP AND NOMBREP=ProductoX
A. Jaime 2003
DBD Tema 4
35
A. Jaime 2003
DBD Tema 4
36
Ordenacin de tuplas
(ORDER BY)
EMPLEADO NOMBRE
TRABAJA_EN NSS
... APELLIDO
... ND ...
NSSE
NP
Empleados y proyectos donde trabajan, ordenados por departamento y, dentro de cada departamento, ordenados alfabticamente por apellido y nombre :
C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREP FROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN, PROYECTO WHERE NMEROD=ND, NSS=NSSE, NP=NMEROP ORDER BY NOMBRED, APELLIDO, NOMBRE
Conjuntos explcitos de valores: NSS de los empleados que trabajan en los proyectos 1, 2 o 3
C17: SELECT DISTINCT NSSE FROM TRABAJA_EN WHERE NP IN (1,2,3)
Por defecto, el orden es ascendente DESC indica orden descendente ASC indica orden ascendente El valor null tambin ocupa un orden entre los dems valores
ORDER BY NOMBRED DESC, APELLIDO ASC, NOMBRE ASC
A. Jaime 2003
DBD Tema 4
37
A. Jaime 2003
DBD Tema 4
38
Consultas anidadas
SELECT en la clusula WHERE de otra SELECT
TRABAJA_EN NSSE NP HORAS
T2
C 5 3 4 2 D aaa aba bbe aeb E F G 1 aaa 2 2 aeb 3 3 aeb 8 4 aeb 5 5 aba 8 A 1 4 2 3 1
Informacin de los empleados que trabajan en algn proyecto en el que trabaje ms de 10 horas a la semana el empleado 123456789
SELECT NSSE FROM TRABAJA_EN WHERE NP IN (SELECT NP FROM TRABAJA_EN WHERE NSS=123456789 AND HORAS>10) Puede haber ms niveles de anidamiento
B bb ab cb ec
Algunas anidadas (como las que usan = e IN) se pueden escribir sin anidamientos:
SELECT T.NSSE FROM TRABAJA_EN AS T INNER JOIN TRABAJA_EN AS T_EMP ON T.NP=T_EMP.NP WHERE T_EMP.NSS=123456789 AND T_EMP.HORAS>10
T1
A 1 2 3 4 B bb ab cb ec C 5 3 4 2 D aaa aba bbe aeb
E F GA 1 aaa 2 1
A 1
RESULTADO
E F GA
A
T1.A=2
A B C 1 bb 5 4 ec 2
E F GA
Se compara un valor de atributo (o conjunto de atributos entre parntesis) con el conjunto de tuplas devueltas por la subconsulta
DBD Tema 4 39
A. Jaime 2003
T1.A=3
E F GA 2 aeb 3 4 4 aeb 5 3
A 4 3
DBD Tema 4
T1.A=4
A. Jaime 2003
40
EXISTS
Devuelve cierto si y slo si la subconsulta devuelve alguna tupla.
EMPLEADO NOMBRE DEPENDIENTE
Cierto si y slo si el valor del/de los atributo/s coincide con alguna tupla de la subconsulta WHERE atributo(s) < ANY subconsulta Cierto si y slo si el valor del/de los atributo/s es menor que alguna tupla de la subconsulta =, <, >, <=, >=, <> WHERE atributo(s) < ALL subconsulta Cierto si y slo si el valor del/de los atributo/s es menor que todas las tuplas de la subconsulta <, >, <=, >=, <> WHERE atributo(s) < subconsulta Cierto si y slo si el valor del/de los atributo/s es menor que la nica tupla de la subconsulta =, <, >, <=, >=, <>
SELECT DNI FROM EMPLEADO WHERE SALARIO (*) ( SELECT SALARIO FROM EMPLEADO) (*) < ALL <=ALL < ANY <= ANY Resultado 1 1, 2, 3, 5 1, 2, 3, 4, 5
41
... APELLIDO
NSS
...
NSSE NOMBRE
...
NOTA
DNI 1 1 1 2 2 3 3 3 Asig 7984 7450 7540 7984 4544 7984 4544 7540 Nota 5 4,5 8,5 6 3 7,5 9 8 SELECT Nombre FROM ALUMNO AS A WHERE EXISTS ( SELECT * FROM NOTA WHERE Nota>=7 AND DNI=A.DNI)
Resultado de subconsulta
EMPLEADO
DNI SALARIO 1 100 2 150 3 175 4 200 5 160
ALUMNO
DNI Nombre 1 Jon 2 Ana 3 Leire
DNI Asig Nota 1 7540 8,5 DNI Asig Nota DNI 3 3 3 Asig Nota 7984 7,5 4544 9 7540 8
RESULTADO
A. Jaime 2003
DBD Tema 4
A. Jaime 2003
DBD Tema 4
42
UNIQUE
Devuelve cierto si y slo si la subconsulta no devuelve tuplas duplicadas. Ejemplo:
SELECT A, B FROM T1 WHERE UNIQUE ( SELECT F FROM T2 WHERE G=T1.C )
Tuplas de T2 en resultado de subconsulta Resultado de subconsulta Transformacin de teora de conjuntos NSSE
Divisin en SQL
TRABAJA_EN NP PROYECTO
...
NP
...
T2
E F G 1 aaa 2 2 aeb 3 3 aba 8 4 aeb 5 5 aba 8 6 aeb 3
T1
A 1 2 3 4 B bb ab cb ec C 5 3 4 8
RESULTADO
A 1 3 4 B bb cb ec
A. Jaime 2003
DBD Tema 4
43
A. Jaime 2003
Si pusiera WHERE NSS_SUPERV = NULL Para las filas con NSS_SUPERV nulo se estara comparando si NULL = NULL Esta comparacin NO devuelve cierto ni falso La comparacin devuelve NULL (UNKNOWN)
Una condicin puede NO verificarse por FALSE o por NULL
Cdigo de vendedor Ventas Cod Vendedor Vendido Cuota 1 Juan 1000 1000 2 Mara 1500 1000 3 Jess 500 Null 4 Ana 1000 1200 5 Aitor 1100 1000 6 Leire 2000 Null
SELECT Vendedor FROM Ventas SELECT Vendedor FROM Ventas WHERE Vendido>Cuota WHERE Vendido<=Cuota Vendedor Mara Aitor SELECT Vendedor, Cuota+500 AS X FROM Ventas Vendedor Juan Mara Jess Ana Aitor Leire Cuota 1500 1500 Null 1700 1500 Null Vendedor Juan Ana SELECT SUM(VD) AS V1, SUM(CU) AS V2 , (SUM(VD)SUM(CU)) AS V3, SUM(VD-CU) AS V4 FROM Ventas AS V(CD,VR,VD,CU) V1 V2 V3 V4 7100 4200 2900 400
DBD Tema 4 46
A. Jaime 2003
DBD Tema 4
45
A. Jaime 2003
Cambia el nombre de cualquier columna (atributo) que aparezca en el resultado Antes hemos visto que la construccin AS tambin sirve para declarar alias de tablas:
FROM EMPLEADO E, ... EMPLEADO AS E, ... SQL1 SQL2
FROM
SQL2
FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR, SEX, SAL, NSSS, ND), ...
SELECT VD, SUM(CU) AS V , COUNT(CU) AS C1, COUT(*) AS C2 FROM Ventas AS V(CD,VR,VD,CU) GROUP BY Vendido
A. Jaime 2003
DBD Tema 4
47
A. Jaime 2003
DBD Tema 4
48
Tablas combinadas
(INNER, NATURAL y OUTER JOIN en FROM)
EMPLEADO NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN
...
DEPARTAMENTO
...
...
... NMD
NSS_JEFE
...
...
C1: C1A: SELECT NOMBRE, APELLIDO, DIRECCIN FROM (EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NMEROD) WHERE NOMBRED=Investigacin
SELECT NMEROP, NMD, APELLIDO, DIRECCIN FECHA_NCTO FROM (PROYECTO NATURAL JOIN DEPARTAMENTO) INNER JOIN EMPLEADO ON NSS_JEFE=NSS WHERE LOCALIZACINP=Stafford
Este concepto se incorpor a SQL2 La consulta se entiende ms fcilmente, al evitar la mezcla de condiciones de || y en el WHERE Se pueden especificar diferentes tipos de reunin:
INNER JOIN (o JOIN), NATURAL JOIN, LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN y FULL [OUTER] JOIN
AS ED ...
A. Jaime 2003
DBD Tema 4
49
A. Jaime 2003
DBD Tema 4
50
OUTER JOIN
T1
A @ aa bb cc B null 1 2 3
UNION JOIN
Se puede considerar como una mezcla de FULL OUTER JOIN y UNION. Los atributos correspondientes con dominio compatible se tratan como en la unin. Los incompatibles, se tratan como en FULL OUTER JOIN. Utilidad limitada.
T1 T2 T3
A aa bb cc B aa ab bc C 1 2
T2
E F 000 null 100 1 101 1 200 2 400 4 SELECT * FROM T1 LEFT JOIN T2 ON B=F A B E F @ null null null aa 1 100 1 aa 1 101 1 bb 2 200 2 cc 3 null null
T4
B a aa b D 1 2 3 A aa ab bb bc cc B aa ab bc null null B a aa ab b bc C null null null 1 2
Oracle: SELECT * FROM T1,T2 WHERE B=(+)F SQLServer:SELECT * FROM T1,T2 WHERE B*=F Oracle: ...WHERE B(+)=F SQLServer: ...WHERE B=*F SELECT * FROM T1 RIGTH JOIN T2 ON B=F A B E F null null 000 null aa 1 100 1 aa 1 101 1 bb 2 200 2 null null 400 4 Oracle: no lo implementa SQLServer: ...WHERE B*=*F SELECT * FROM T1 FULL JOIN T2 ON B=F A B E F @ null null null null null 000 null aa 1 100 1 aa 1 101 1 bb 2 200 2 cc 3 null null null null 400 4
DBD Tema 4 51
D 1 2 null 3 null
52
A. Jaime 2003
A. Jaime 2003
DBD Tema 4
Suma de salarios del dpto. Investigacin, junto a los salarios mximo, mnimo y medio:
C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO), AVG(SALARIO) FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NMEROD WHERE NOMBRED=Investigacin
**se refiere aatuplas C22: SELECT COUNT(*) se refiere tuplas FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NMEROD WHERE NOMBRED=Investigacin
EMPLEADO NOMBREP John Franklin Ramesh Joyce Alicia Jennifer Ahmad James SALARIO NULL 15.000 10.000 10.000 10.000 20.000 20.000 20.000 ND 5 5 5 5 4 4 4 1 DEPARTAMENTO NOMBRED NMEROD Investigacin 5 Administracin 4 Direccin 1 C20
EMPLEADO NOMBREP John Franklin Ramesh Joyce Alicia Jennifer Ahmad James SALARIO NULL 15.000 10.000 10.000 10.000 20.000 20.000 20.000 ND 5 NULL 5 5 4 4 4 1
C23:
COUNT(DISTINCT SALARIO)
3 C23:
COUNT( SALARIO)
...
...
7 C23:
COUNT( *)
...
...
...
35.000
C22 COUNT(*)
15.000
10.000
11.666
Qu ocurre cuando todos los salarios valen NULL? Qu ocurre cuando la tabla est vaca?
4
A. Jaime 2003
DBD Tema 4
DBD Tema 4
54
HAVING
Para especificar una condicin en trminos del grupo de tuplas asociado a cada valor de los atributos de agrupacin
PROYECTO NOMBREP NP TRABAJA_EN
C24: SELECT NOMBRED, ND, COUNT(*) AS N_EMP, AVG(SALARIO) AS SAL_MED FROM EMPLEADO LEFT JOIN DEPARTAMENTO ON ND=NMEROD GROUP BY NOMBRED, ND
...
NMD
NSSE
NP
...
Todos los atributos de SELECT (que no son atributos de funciones) deben estar en GROUP BY Los atributos de GROUP BY no es obligatorio que estn en SELECT
EMPLEADO LEFT JOIN DEPARTAMENTO ON ND=NMEROD SALARIO 30.000 15.000 10.000 10.000 10.000 20.000 20.000 20.000 ND 5 5 5 5 4 4 4 1 NOMBRED Investigacin Investigacin Investigacin Investigacin Administracin Administracin Administracin Direccin C24:
NOMBRED ND N_EMP SAL_MED
...
...
...
...
4 3 1
EMPLEADO LEFT JOIN DEPARTAMENTO ON ND=NMEROD SALARIO NULL 10 10 10 ND NULL NULL 5 5 NOMBRED NULL NULL DMC DMC
...
...
...
...
NULL DMC
NULL 5
2 2
10 10
A. Jaime 2003
DBD Tema 4
55
A. Jaime 2003
DBD Tema 4
56
C25: SELECT NMEROP, NOMBREP, COUNT(*) FROM PROYECTO INNER JOIN TRABAJA_EN ON NMEROP=NP GROUP BY NMEROP, NOMBREP ORDER BY COUNT(*) ASC C25: SELECT NMEROP, NOMBREP, COUNT(*) AS NUM_EMP FROM PROYECTO INNER JOIN TRABAJA_EN ON NMEROP=NP GROUP BY NMEROP, NOMBREP ORDER BY NUM_EMP ASC
...
...
...
...
... NOMBREP INNER JOIN Jos ... WHERE Federico SALARIO >30.000: Ramn Jazmn Jaime
...
...
5 5 5 4 1
...
...
NO NO
NO se puede usar el nuevo nombre (AS) del atributo del resultado en ORDER BY
NOMBRED
COUNT(*)
Investigacin
A. Jaime 2003
DBD Tema 4
57
A. Jaime 2003
DBD Tema 4
58
CASE
SELECT NOMBRE, CASE WHEN ESTADOCIVIL=S THEN SOLTERO/A WHEN ESTADOCIVIL=C THEN CASADA/O WHEN ESTADOCIVIL=D THEN DIVORCIADO/A ELSE VIUDA/O END, EDAD, FECHA_NACIMIENTO FROM PERSONAS;
NULLIF y COALESCE
Operador NULLIF:
SELECT . . . FROM . . . WHERE BENEFICIO / NULLIF(COSTO, -1) >100
En los WHEN cualquier condicin (AND, OR, ...) Ahorro espacio almacenamiento: S/C/D/V frente a Soltero/Casado ...
SELECT NOMBRE, CASE ESTADO_CIVIL WHEN S THEN SOLTERO/A WHEN C THEN CASADA/O WHEN D THEN DIVORCIADO/A ELSE VIUDA/O END, EDAD, FECHA_NACIMIENTO FROM PERSONAS;
Cuando COSTO vale -1 NULLIF devuelve NULL La divisin tiene un comportamiento predefinido cuando el denominador sea NULL (el resultado es NULL)
WHERE BENEFICIO / CASE WHEN COSTO = -1 THEN NULL ELSE COSTO END >100 NULLIF
Operador COALESCE:
K1: SELECT NOMBRE, COALESCE(SUELDO, PARO, SALARIO_SOCIAL) AS SALARIO FROM DATOS_HACIENDA;
K1:
NOMBRE SALARIO
A. Jaime 2003
DBD Tema 4
59
A. Jaime 2003
DBD Tema 4
60
Una consulta SQL se evala conceptualmente as: Primero FROM, seguido de WHERE, en tercer lugar GROUP BY y por ltimo ORDER BY Si no hay GROUP BY ni ORDER BY, para cada combinacin de tuplas (una de cada tabla de FROM), se evala la condicin de WHERE. Si es cierta se colocan en el resultado los valores correspondientes a los atributos del SELECT. Esta NO es una forma eficiente de implementar una consulta SQL. As pues, cada SGBD tiene rutinas para optimizar la evaluacin.
WHERE (C1, C2, C3) < (T1, T2, T3) equivale a: WHERE C1<T1 OR (C1=T1 AND C2<T2) OR (C1=T1 AND C2=T2 AND C3<T3)
A. Jaime 2003
DBD Tema 4
61
A. Jaime 2003
DBD Tema 4
62
INSERT
A1: INSERT INTO EMPLEADO VALUES (Richard, K, Marini, 653298653, 1962-12-30, 98 Oak Forest, Katy, TX, H, 37000, 987654321, 4)
As los atributos con valor NULL o DEFAULT se pueden omitir Los valores de VALUES en el mismo orden que se especifican los atributos en INSERT INTO Tambin se pueden incluir varias tuplas en la misma instruccin: INSERT ... INTO ... VALUES (tupla1), (tupla2), ... (tuplaN)
A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND) VALUES (Robert, Hatcher, 980760540, 2)
Rechazada por no proporcionar valor para NSS (clave primaria: NOT NULL)
A. Jaime 2003
A. Jaime 2003
DBD Tema 4
63
DBD Tema 4
64
INSERT (2)
A3A: CREATE TABLE INFO_DEPTOS ( NOMBRE_DEPTO VARCHAR(15), NM_DE_EMPS INTEGER, SAL_TOTAL INTEGER);
DELETE
A4A: DELETE FROM EMPLEADO WHERE APELLIDO=Brown
Una sola tabla WHERE: seleccin de tuplas a eliminar El borrado se puede propagar (RI referencial)
A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO, NM_DE_EMPS, SAL_TOTAL) SELECT NOMBRED, COUNT (*), SUM(SALARIO) FROM DEPARTAMENTO INNER JOIN EMPLEADO ON NMEROD=ND GROUP BY NOMBRED;
Inserta varias tuplas (el resultado de la consulta) Utilidad: tabla temporal donde realizar consultas Sus datos pueden perder actualidad Alternativa sin este problema: vista
A4C: DELETE FROM EMPLEADO WHERE ND IN (SELECT NMEROD FROM DEPARTAMENTO WHERE NOMBRED=Investigacin) A4D: DELETE FROM EMPLEADO
Sin WHERE se borran todas las tuplas (quedara la tabla vaca) Usando DROP TABLE se hubiera eliminado adems la definicin de la tabla
A. Jaime 2003
DBD Tema 4
65
A. Jaime 2003
DBD Tema 4
66
UPDATE
A5: UPDATE PROYECTO SET LOCALIZACINP=Bellaire, NMD=5 WHERE NMEROP=10
Vistas en SQL
Una vista es una tabla derivada de otras tablas (que pueden ser tablas de base u otras vistas). Tipos de vista: Tabla virtual: se calcula, no se almacena en la BD. Siempre est al da: sus tuplas se crean cuando se realiza una consulta sobre la vista. Vista materializada: se crea una fsicamente una tabla cuando se consulta por primera vez. Se pueden hacer sucesivas consultas sobre esa tabla. Hay tcnicas para mantener la vista actualizada de forma incremental. Ejemplo de creacin de la vista TRABAJA_EN_1:
CREATE VIEW TRABAJA_EN_1 AS SELECT NOMBRE, APELLIDO, NOMBREP, HORAS FROM (EMPLEADO INNER JOIN TRABAJA_EN ON NSS=NSSE) INNER JOIN PROYECTO ON NP=NUMEROP
Una sola tabla WHERE: seleccin de tuplas a modificar SET: atributos a modificar y nuevos valores SET: el nuevo valor puede ser NULL o DEFAULT Modificaciones de clave primaria pueden propagarse a clave/s extranjera/s (debido a las acciones declaradas en la RI, como CASCADE)
A6: UPDATE EMPLEADO SET SALARIO=SALARIO*1.1 WHERE ND IN (SELECT NMEROD FROM DEPARTAMENTO WHERE NOMBRED= Investigacin)
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.
A. Jaime 2003
DBD Tema 4
67
A. Jaime 2003
DBD Tema 4
68
Dibujar las relaciones resultantes de realizar las siguientes operaciones del lgebra relacional:
Ejercicios
Nombre y NSS de cada empleado junto al nmero de cada proyecto en el que trabaja: PERS NOMBRE, NSS(EMP) TRB(NSS,NP) NSSE, NP (TRAB) R6 PERS * TRB Nombre de cada empleado junto al nombre de cada proyecto en el que trabaja: PRY(NP,NOMP) PROY PERS_PRY R6 * PRY R7 NOMBRE, NOMP(PERS_PRY) Qu cambia en PERS_PRY si se usa PROY en lugar de PRY?
A. Jaime 2003
DBD Tema 4
69
A. Jaime 2003
DBD Tema 4
70
...
Sobre el esquema de BD de la figura 7.7 (pg. 4): (donde pide empleados se refiere a su nombre y apellido) a) Empleados del departamento 5 que trabajan ms de 10 horas/semana en el proyecto Producto X b) Empleados con un dependiente con su mismo nombre de pila c) Empleados cuyo jefe directo es Franklin Wong d) Nombre de cada proyecto junto al nmero total de horas trabajadas por los empleados en l. e) Empleados que trabajan en todos los proyectos de la empresa f) Empleados que no trabajan en ningn proyecto g) Nombre de cada departamento junto al salario medio de los empleados asignados al mismo h) Salario medio de las empleadas de la compaa i) Nombre y direccin de los empleados que trabajan en algn proyecto situado en Houston pero departamento no est situado all j) Jefes de departamento sin dependientes
... SEXO
DEPARTAMENTO
SALARIO NSS_SUPERV ND
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE LOCALIZACIONES_DEPT NMEROD LOCALIZACIND PROYECTO NOMBREP NMEROP LOCALIZACINP NMD TRABAJA_EN NSSE DEPENDIENTE NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO NP HORAS
a) Empleados del departamento 5 que trabajan ms de 10 horas/semana en el proyecto Producto X b) Nombre de cada proyecto junto al nmero total de horas invertidas por los empleados en l. c) Nombres de todos los empleados que trabajan en todos y cada uno de los proyectos d) Empleados que no trabajan en ningn proyecto e) Nombre y direccin de los empleados que trabajan en algn proyecto que, por una parte, est situado en Houston y por otra el proyecto pertenece a un departamento que no est situado en Houston.
A. Jaime 2003
DBD Tema 4
71
A. Jaime 2003
DBD Tema 4
72
a) Por cada curso, obtener el alumno con mejor nota media en las asignaturas de este curso. b) Obtener el DNI de los alumnos que estn limpios en 3 curso, es decir, que estn matriculados en 3 y tienen aprobadas todas las asignaturas de cursos inferiores. c) DNI de los alumnos que estn matriculados de ALGUNA asignatura de tercero y tienen aprobadas TODAS las asignaturas de segundo. d) Obtener el DNI de los alumnos matriculados en al menos una asignatura de cada uno de los departamentos de Informtica. e) Obtener el nombre de los alumnos que estn matriculados en sexta convocatoria en al menos dos asignaturas (sin utilizar funciones agregadas). f) Obtener el DNI de los alumnos que estn matriculados de todas las asignaturas de 3 y de alguna otra asignatura de cursos inferiores.
A. Jaime 2003
g) Nombre de los alumnos que han obtenido como nota SOBRESALIENTE en al menos dos asignaturas de cualquiera de los cursos en los que hayan estado matriculados (sin utilizar funciones agregadas). h) Obtener, sin usar funciones agregadas, el nombre de los alumnos que estn matriculados slo de asignaturas del departamento DMC. i) Obtener, sin usar funciones agregadas, el nombre de los alumnos matriculados en alguna asignatura de tercer curso que no tengan ninguna matrcula en asignaturas de segundo curso. j) Para cada asignatura del departamento DMC con ms de 10 alumnos matriculados, obtener el cdigo de la asignatura y el nmero de convocatoria media en la que se encuentran los alumnos de Arnedo k) Obtener el nombre de los alumnos de Njera mayores de 20 aos que se encuentran matriculados en alguna asignatura de tercero
A. Jaime 2003
DBD Tema 4
73
DBD Tema 4
74
PRY1_MAS1HORA
R1 NSSE 11 22
R2 TODOS_PRY R3 NP 1 2 3 NP 1 2 3 4 NP 4
Soluciones
NSSE NP HORAS 11 22 1 1 5 3
PRY1_MAS1HORA
R2 NP (TRAB)
R1 NSS (PRY1_MAS1HORA)
R4 EMP
|| ND=NNUMD DEP
A. Jaime 2003
DBD Tema 4
75
A. Jaime 2003
DBD Tema 4
76
TRB NSS 11 11 22 22 44
NOMBRE NSS NP 1 2 1 3 3
d) Nombre de cada proyecto junto al nmero total de horas trabajadas por los empleados en l.
PROY_NOM PROYECTO ||NMEROP=NP TRABAJA_EN R4(NOMBREP, HORAS) NOMBREP SUMA HORAS(PROY_NOM)
DBD Tema 4
77
A. Jaime 2003
DBD Tema 4
78
e) Nombres de todos los empleados que trabajan en cada uno de los proyectos
Todos los proyectos junto a los empleados que trabajan en cada uno
PRY_EMPS(NOMP,NSS) NOMBREP, NSSE( PROYECTO ||NMEROP=NP TRABAJA_EN)) R5 NOMP, NOMBRE, APELLIDO(PRY_EMPS * EMPLEADO) PROYS(NP) NMEROP(PROYECTO) EMPS_TODOS_PRYS(NSS) NP,NSSE(TRABAJA_EN)
PROYS
i) Nombre y direccin de los empleados que trabajan en algn proyecto situado en Houston pero cuyo departamento no est situado all
PRY_HOUSTON NMEROP, NMD(LOCALIZACINP=Houston (PROYECTO)) DPT_HOUSTON NMEROD(LOCALIZACIND =Houston (LOCALIZACIONES_DEPTOS)) TODOS_DPTOS NMEROD(DEPARTAMENTO) DPT_NO_HOUSTON TODOS_DPTOS - DPT_HOUSTON PRY_BUSCADOS(NP) NMEROP(PRY_HOUSTON ||NMD=NMEROD DPT_NO_HOUSTON) EMP_BUSCADOS(NSS) NSSE(TRABAJA_EN * PRY_BUSCADOS) R9 NOMBRE, APELLIDO, DIRECCIN(EMPLEADO * EMPS_BUSCADOS) (1) NO se puede calcular as:
(1)
Puede haber departamentos que estn en lugares distintos a Houston y que tambin estn en Houston
g) Nombre de cada departamento junto al salario medio de los empleados asignados al mismo
R7 NOMBRED PROMEDIO SALARIO(DPTO_EMP) DPTO_EMP DEPARTAMENTO ||NMEROD=ND EMPLEADO
Alternativa vlida 79
A. Jaime 2003
DBD Tema 4