Está en la página 1de 20

Conceptos

Anexo al tema 4. Repaso de álgebra relacional y • BD: colección de relaciones


SQL • Relación:
Valores columna
mismo domino
El modelo de datos relacional, las restricciones relacionales ALUMNO
y el álgebra relacional Elmasri/Navathe 02 Nombre CódigoAlumno Año Especialidad Fila=
Smith 17 1 CS Tupla
Brown 8 2 CS
El estándar de las Bases de Datos Relacionales
Elmasri/Navathe 02 Columna =
Atributo

• Relación = conjunto de tuplas (no tienen sentido


tuplas duplicadas)
• Dominios atómicos: ni compuestos ni multivaluados
• Modelo relacional: conceptos, restricciones, operaciones
de actualización y operaciones del álgebra • Esquema de relación R(A1, ... , An): intensión
• Revisión de SQL • Relación (o estado de relación) r ó r(R): extensión
r={t1, t2, . . ., tm}: conjunto de tuplas
Cada valor vi de un ti 1≤i ≤ 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
© A. Jaime 2003 DBD Tema 4 1 © A. Jaime 2003 DBD Tema 4 2

Esquema de la BD “EMPRESA”
Restricciones relacionales con restricciones de integridad referencial

• De dominio: valor atómico de un tipo


• De clave: atributo(s) que identifica(n) unívocamente a EMPLEADO
las tuplas. NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ...
– Superclave y clave ... SEXO SALARIO NSS_SUPERV ND
– Clave candidata y clave primaria
• Integridad de entidades:ninguna clave primaria puede DEPARTAMENTO
contener el valor nulo NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
• Integridad referencial:
– Una tupla que referencia a otra (de la misma u otra LOCALIZACIONES_DEPT
relación), debe referirse a una tupla existente en NÚMEROD LOCALIZACIÓND
dicha relación
PROYECTO
– Se hace referencia a otra tupla mediante una clave
NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD
extranjera (foránea, externa). Conjunto de atributos
no vacío. Puede contener valor nulo.
TRABAJA_EN
Clave Clave
extranjera extranjera NSSE NP HORAS
EMPLEADO
NOMBRE INIC APELLIDO NSS NSS_SUPERV ND DEPENDIENTE
John B Smith 123456789 333445555 5 NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO
Franklin T Wong 333445555 888665555 5
Alicia
Jennifer
J
S
Zelaya
Wallace
999887777
987654321
... 987654321
888665555
4
4
Ramesh K Narayan 666884444 333445555 5
Joyce A English 453453453 333445555 5 Figura 7.7 restricciones de integridad referencial
Ahmad V Jabbar 987987987 987654321 4 representadas en el esquema de la base de
James E Borg 888665555 nulo 1
datos relacional EMPRESA
DEPARTAMENTO
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
Investigación 5 333445555 1988-05-22
Administración 4 987654321 1995-01-01
Dirección 1 888665555 1981-06-19
© A. Jaime 2003 DBD Tema 4 3 © A. Jaime 2003 DBD Tema 4 4
Estado de la BD relacional “EMPRESA” Estado de la BD relacional “EMPRESA” (cont)
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
John B Smith 123456789 1965-01-09 731 Fondren, Houston, TX LOCALIZACIONES_DEPT
Franklin T Wong 333445555 1955-12-08 638 Voss, Houston, TX NÚMEROD LOCALIZACIÓND
Alicia J Zelaya 999887777 1968-07-19 3321 Castle, Spring, TX ... 1 Houston
Jennifer S Wallace 987654321 1941-06-20 291 Berry, Bellaire, TX 4 Stafford
Ramesh K Narayan 666884444 1962-09-15 975 Fire Oak, Humble, TX 5 Bellaire
Joyce A English 453453453 1972-07-31 5631 Rice, Houston, TX 5 Sugarland
Ahmad V Jabbar 987987987 1969-03-29 980 Dallas, Houston, TX 5 Houston
James E Borg 888665555 1937-11-10 450 Stone, Houston, TX

TRABAJA_EN SEXO SALARIO NSS_SUPERV ND PROYECTO


NSSE NP HORAS H 30.000 333445555 5 NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD
123456789 1 32.5 H 40.000 888665555 5 ProductoX 1 Bellaire 5
123456789 2 7.5 ... M 25.000 987654321 4 ProductoY
ProductoZ
2
3
Sugarland
Houston
5
5
666884444 3 40.0 M 43.000 888665555 4
H 38.000 333445555 5 Automatización 10 Stafford 4
453453453 1 20.0
M 25.000 333445555 5 Reorganización 20 Houston 1
453453453 2 20.0
H 25.000 987654321 4 Nuevos beneficios 30 Stafford 4
333445555 2 10.0
333445555 3 10.0 H 55.000 nulo 1
333445555 10 10.0 DEPENDIENTE
333445555 20 10.0
NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO
999887777 30 30.0 Figura 7.6 (1ª parte)
999887777 10 10.0 333445555 Alice M 1986-04-05 HIJA
Un posible estado de la base de datos 333445555 Theodore H 1983-10-25 HIJO
987987987 10 35.0
relacional del esquema EMPRESA 333445555 Joy M 1958-05-03 ESPOSA
987987987 30 5.0
987654321 Abner H 1942-02-28 ESPOSO
987654321 30 20.0
123456789 Michael H 1988-01-04 HIJO
987654321 20 15.0
123456789 Alice M 1988-12-30 HIJA
888665555 20 nulo 123456789 Elizabeth M 1967-05-05 ESPOSA
DEPARTAMENTO
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
Investigación 5 333445555 1988-05-22 Figura 7.6 (2ª parte) Un posible estado de la base de datos
Administración 4 987654321 1995-01-01 relacional del esquema EMPRESA
Dirección 1 888665555 1981-06-19
© A. Jaime 2003 DBD Tema 4 5 © A. Jaime 2003 DBD Tema 4 6

Operaciones de actualización
Álgebra relacional
y violación de las RI
• Operaciones de actualización: • Operaciones para manipular relaciones enteras
– Insertar • Permiten especificar consultas (recuperación de datos)
– Eliminar • El resultado de una consulta es otra relación
– Actualizar (modificar)
• Operaciones específicas del álgebra relacional:
• Cuando se aplican no deben violar ninguna RI – SELECCIONAR
Unarios
– PROYECTAR
• Insertar y actualizar pueden violar los 4 tipos de RI – REUNIÓN (JOIN) Binario
• Eliminar sólo puede violar la I. Referencial
• Operaciones de teoría de conjuntos:
• En SQL se pueden definir acciones asociadas a la
violación de RI (ejemplo. ON UPDATE – UNIÓN
CASCADE) – INTERSECCIÓN
Binarios
– DIFERENCIA
– PRODUCTO CARTESIANO

• Otras operaciones:
– DIVISIÓN
– FUNCIONES AGREGADAS Y DE AGRUPACIÓN
– Etc.

© A. Jaime 2003 DBD Tema 4 7 © A. Jaime 2003 DBD Tema 4 8


Seleccionar: σ Proyectar: π

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

σ = sigma π SEXO, SALARIO(EMPLEADO)


σND=4(EMPLEADO) El (M, 25.000)
SEXO SALARIO duplicado se ha
H 30.000 eliminado
NOMBRE INIC APELLIDO NSS NSS_SUPERV ND H 40.000
Alicia J Zelaya 999887777 ... 987654321 4 M 25.000
Jennifer S Wallace 987654321 888665555 4 M 43.000
Ahmad V Jabbar 987987987 987654321 4 H 38.000 Fig 7.8 (c)
H 25.000
H 55.000

• Selecciona un subconjunto de filas (tuplas) de una


relación • Selecciona las columnas especificadas de una relación
• Las que satisfacen una condición (desechando el resto de columnas)
• Condición: {=, <, ≤, >, ≥, ≠} Y, O, NO • El resultado es otra relación
• El resultado es otra relación • Eliminación de duplicados

• Conmutativa: σ<COND1>( σ<COND2>(R) ) = σ<COND2>( σ<COND1>(R) ) • π<LISTA1> (π<LISTA2> (R)) = π<LISTA1> (R)
• σ<COND1>( σ<COND2>(R) ) = σ<COND1> Y <COND2>(R) • No es conmutativa

© A. Jaime 2003 DBD Tema 4 9 © A. Jaime 2003 DBD Tema 4 10

Renombrar y resultados intermedios Unión, intersección y diferencia


EMPLEADO
ALUMNO PROFESOR
NOMBRE INIC APELLIDO NSS SALARIO NSS_SUPERV ND NOM APEL NOMBRE APELLIDO
John B Smith 123456789 30.000 333445555 5 Susan Yao John Smith
Franklin T Wong 333445555 40.000 888665555 5 Ramesh Shah Ricardo Browne
Alicia J Zelaya 999887777 ... 25.000 987654321 4 Johnny Kohler Susan Yao
Jennifer S Wallace 987654321 43.000 888665555 4
Bárbara Jones Francis Johnson
Ramesh K Narayan 666884444 38.000 333445555 5
Amy Ford Ramesh Shah
Joyce A English 453453453 25.000 333445555 5
Ahmad V Jabbar 987987987 25.000 987654321 4
Jimmy Wang
James E Borg 888665555 55.000 nulo 1 Ernest Gilbert
ALUMNO ∪ PROFESOR
Resultado intermedio ALUMNO ∩ PROFESOR NOM APEL
Susan Yao
TEMP ← σND=5(EMPLEADO) NOM APEL
Ramesh Shah
NOMBRE INIC APELLIDO NSS SALARIO NSS_SUPERV ND Susan Yao
Johnny Kohler
Ramesh Shah
John B Smith 123456789 30.000 333445555 5 Bárbara Jones
Franklin T Wong 333445555 ... 40.000 888665555 5 Amy Ford
Ramesh K Narayan 666884444 38.000 333445555 5 PROFESOR — ALUMNO
Jimmy Wang
Joyce A English 453453453 25.000 333445555 5 NOMBRE APELLIDO Ernest Gilbert
John Smith John Smith
Renombre de atributos
Ricardo Browne Ricardo Browne
R(NOMBRE_PILA, PRIMER_APELL, SALARIO) ← Francis Johnson Francis Johnson
πNOMBRE,APELLIDO,SALARIO(TEMP)
NOMBRE_PILA PRIMER_APELL SALARIO
• Compatibilidad con la unión: ambas relaciones deben
tener el mismo número de atributos y cada par de
John Smith 30.000
atributos correspondientes pertenecer al mismo dominio
Franklin
Ramesh
Wong
Narayan
40.000
38.000
...
conmutativas asociativas no conmutativa
Joyce English 25.000
R ∪ S = S ∪ R (R ∪ S) ∪ T = R ∪ (S ∪ T) R — S ≠ S — R
Alternativa sin resultados intermedios o renombre de atributos
R ∩ S = S ∩ R (R ∩ S) ∩ T = R ∩ (S ∩ T)
π NOMBRE, APELLIDO, SALARIO(σND=5(EMPLEADO))
© A. Jaime 2003 DBD Tema 4 11 © A. Jaime 2003 DBD Tema 4 12
Producto Cartesiano: × (CROSSJOIN) Reunión (JOIN): |×|
EMP ← π APELLIDO, NSS, ND(EMPLEADO)
APELLIDO NSS ND
PR_STAF DP_STAF
Smith 123456789 5
NOMBREP NOMBRED NÚMEROD Wong 333445555 5
Automatización Administración 4 Zelaya 999887777 4
Nuevos beneficios Mantenimiento 8 Wallace 987654321 4
Narayan 666884444 5
R ←PR_STAF × DP_STAF English 453453453 5
Jabbar 987987987 4
NOMBREP NOMBRED NÚMEROD Borg 888665555 1
Automatización Administración 4
Automatización Mantenimiento 8 DPT ← π NOMBRED, NSS_JEFE(DEPARTAMENTO)
Nuevos beneficios Administración 4
Nuevos beneficios Mantenimiento 8 NOMBRED NSS_JEFE
Investigación 333445555
Administración 987654321
• Relaciones: no han de ser compatibles con la unión Dirección 888665555

• R(A1,...,An) × S(B1,...,Bm) = Q(A1,...,An, B1,...,Bm) JEFE_DTO DPT ← |×| NSS_JEFE=NSS EMP


donde R tiene n’ tuplas y S m’ tuplas NOMBRED NSS_JEFE APELLIDO NSS ND
– Q tiene n’* m’ tuplas Investigación 333445555 Wong 333445555 5
Administración 987654321 Wallace 987654321 4
– Q consta de todas las combinaciones de cada Dirección 888665555 Borg 888665555 1

tupla de R seguida de otra de S


• Combina tuplas relacionadas de 2 relaciones (o de
la misma)
• Operación muy importante para cualquier BDR
• Permite procesar vínculos entre relaciones

© A. Jaime 2003 DBD Tema 4 13 © A. Jaime 2003 DBD Tema 4 14

Reunión (JOIN) (2) Tipos de reunión (JOIN)

• Relaciones: no han de ser compatibles con la unión • Reunión Theta:


• R(A1,...,An) |×|COND S(B1,...,Bm) = Q(A1,...,An, B1,...,Bm) – Cualquier reunión
donde R tiene n’ tuplas y S m’ tuplas – Las tuplas cuyo atributo de reunión sea nulo
NO aparecen en el resultado
– Q tiene un máximo de n’* m’ tuplas
• Equirreunión (equijoin):
– Q consta de todas las combinaciones de cada tupla
– sólo comparaciones de igualdad en “COND”
de R seguida de otra de S, que satisfagan la
condición de reunión “COND” – El resultado siempre tiene pares de atributos
con valores idénticos en todas las tuplas
– R y Q pueden ser el mismo conjunto
• Reunión natural (join natural):
– Si ninguna combinación cumple la condición
– equirreunión seguida de la eliminación de
“COND” el resultado es una relación vacía (sin atributos superfluos.
tuplas)
– “COND” implícita: igualdades de todos los
pares de atributos de igual nombre
• Condición “COND”: – Exige algún par de atributos de igual nombre
– Se evalúa para cada combinación de tuplas – Se identifica con *
– tiene la forma: <subcondición> Y <subcondición>
Y ... Y <subcondición>
– Cada subcondición tiene la forma: Ai θ Bj
donde Ai ∈ R y Bj ∈ S y θ ∈ {=, <, ≤, >, ≥, ≠}

© A. Jaime 2003 DBD Tema 4 15 © A. Jaime 2003 DBD Tema 4 16


Ejemplo de reunión natural: * División: ÷
Ejemplo: R ← N ÷ D
PRY ← π NOMBREP, NÚMD(PROYECTO) X Y Z

÷
N D R
NOMBREP NÚMD B A A B
ProductoX 5 b1 a1 a1 b1
ProductoY 5 b1 a2 a2 b4
ProductoZ 5 b1 a3 a3
Automatización 4 b1 a4
Reorganización 1 b2 a1
Nuevos beneficios 4 b2 a3
b3 a2 X ≡ cjto. de atributos de N
DPT(NOMBRED, NÚMD) b3 a3 Y ≡ cjto. de atributos de D
← π NOMBRED, NÚMEROD(DEPARTAMENTO) b3 a4 Z ≡ cjto. de atributos de R
b4 a1
NOMBRED NÚMD Tiene que haber al b4 a2
menos un par de b4 a3 t[X] ≡ valores de los atributos
Investigación 5
atributos con el del cjto X en la tupla t
Administración 4
Dirección 1 mismo nombre
• Para cada atributo de D debe haber otro en N de igual
nombre: Y ⊆ X
Desaparece un NÚMD • El resultado tiene los atributos de N que NO están en D:
DEPTO_PROY ← PRY * DPT Z=X - Y
NOMBREP NÚMD NOMBRED • Son tuplas del resultado, t∈R, las que cumplen:
ProductoX 5 Investigación – La combinación de valores de t está en alguna tupla de
ProductoY 5 Investigación N
ProductoZ 5 Investigación – Esa combinación de valores de t se encuentra en tuplas
Automatización 4 Administración de N junto todas y cada una de las combinaciones de
Reorganización 1 Dirección valores de las tuplas de D
Nuevos beneficios 4 Administración • Es decir, t∈R 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

Funciones agregadas (SUMA, PROMEDIO,


División: ÷ (2)
MÁXIMO, MÍNIMO y CUENTA) y de agrupación
• La división sirve para construir consultas como la EMP
siguiente:
NSS SALARIO
Obtener el NSS de los empleados que trabajan en • En general, los valores
123456789 30.000
todos y cada uno de los proyectos en los que trabaja 333445555 40.000 duplicados también se
el empleado con NSS=123456789. 999887777 25.000 consideran en los cálculos
987654321 43.000
666884444 38.000 • En SQL se puede poner para
NSS_NÚMS_PRY ← πNSSE , NÚMP(TRABAJA_EN) 453453453 25.000 ello, por ejemplo:
987987987 25.000 COUNT(DISTINCT SALARIO)
NÚMS_PRY← πNÚMP(σNSSE=123456789 (TRABAJA_EN)) 888665555 55.000

÷ ℑ CUENTA NSS, PROMEDIO SALARIO(EMP)


NSS_NÚMS_PRY NÚMS_PRY NSSS
R1←
NÚMP
NSSE NÚMP NSS
1 CUENTA_NSS PROMEDIO_SALARIO
123456789 1 123456789
123456789 2 2 453453453 8 35125
666884444 3
453453453
453453453
1
2
R2← ℑ PROMEDIO SALARIO(EMP)
333445555 2 NSSS(NSS)← NSS_NÚMS_PRY ÷ NÚMS_PRY PROMEDIO_SALARIO El resultado es una
333445555 3 relación, aunque se
333445555 10 35125
333445555 20
trate de una sola tupla
Proyectos en los que con un solo atributo
999887777 30 trabaja el empleado
999887777 10
con NSS = 123456789
987987987
987987987
10
30 R3← ND ℑ CUENTA NSS, PROMEDIO SALARIO(EMP)
987654321 30
987654321 20 ND CUENTA_NSS PROMEDIO_SALARIO
888665555 20 5 4 33250
4 3 31000
Todas las parejas NSS de 1 1 55000
empleado con un
proyecto en el que trabaja

© A. Jaime 2003 DBD Tema 4 19 © A. Jaime 2003 DBD Tema 4 20


Funciones agregadas y de agrupación
Reunión externa
y valor nulo

EMP
EMP←πAPELLIDO, NSS(EM- DEP←πNOMBRED, NSS_JEFE(DE-
NSS NOM DPTO PLEADO) PARTAMENTO)
11 Alfredo LSI APELLIDO NSS NOMBRED NSS_JEFE
22 Ana LSI Smith 123456789 Investigación 333445555
33 Juan ATC NO cuenta los Wong 333445555 Administración 987654321
44 Federico nulo valores diferentes Zelaya 999887777
en el campo NOM Dirección 888665555
55 Ana LSI Wallace 987654321
para un mismo
R1←DPTO ℑ CUENTA NOM(EMP) DPTO, sino cuántas Narayan 666884444
tuplas tienen valor English 453453453
DPTO CUENTA_NOM asignado en NOM Jabbar 987987987 Reunión 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)
R2←NOM ℑ CUENTA DPTO(EMP) agrupación APELLIDO NOMBRED Conserva todas
NOM CUENTA_DPTO
Smith nulo las tuplas de
Alfredo 1 NO considera en la Wong Investigación EMP aunque sea
Ana 2 cuenta (o en el
Zelaya nulo rellenando todos
Juan 1 promedio, suma, ...)
Federico 0 los valores nulos Wallace Administración los campos
que pueda haber correspondientes
Narayan nulo
Permite especificar a DEP con
English nulo
una combinación de valores nulos
Jabbar nulo
atributos de R3←NOM, DPTO ℑ CUENTA NSS(EMP)
agrupación Borg Dirección
NOM DPTO CUENTA_NSS

Alfredo LSI 1
Ana LSI 2 Reunión externa derecha R |×[ S
Juan ATC 1
Federico nulo 1
Reunión externa completa R ]×[ S

© A. Jaime 2003 DBD Tema 4 21 © A. Jaime 2003 DBD Tema 4 22

Ejemplos de consultas con álgebra relacional Revisión de SQL


(Structured Query Language)
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ... • Álgebra relacional → orden de las operaciones
... SEXO SALARIO NSS_SUPERV ND • SQL: lenguaje declarativo →
– Se indica cuál es el resultado esperado
DEPARTAMENTO
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
– Permite que el SGBD seleccione las operaciones y
el orden más adecuados para obtener el resultado:
TRABAJA_EN PROYECTO optimización
NSSE NP HORAS NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD
• SGBD comerciales → son variantes de SQL
• Estándares SQL: SQL1 1986, SQL2 1992 y SQL3
• Nº de proyecto, nº de departamento que lo controla,
(extenderá SQL2 con conceptos recientes de BD y OO)
apellido, dirección y fecha de nacimiento del jefe del de-
partamento de todos los proyectos realizados en Stafford • SQL:
PRYS_STAFF ←σLOCALIZACIÓNP=‘Stafford’(PROYECTO) – Lenguaje de Definición de Datos (LDD)
DPT_CONTR← PRYS_STAFF |×| NÚMD=NÚMEROD – Lenguaje de Manipulación de Datos (LMD):
DEPARTAMENTO consulta y actualización
JEFE_DP_PRY← DPT_CONTR |×| NSS_JEFE=NSS EMPLEADO
– Definición de vistas
– Especificación de seguridad y autorización
RESULTADO ← πNÚMEROP,NÚMD,APELLIDO,DIRECCIÓN,FE-
– Definición de restricciones de integridad
CHA_NCTO (JEFE_DP_PRY)
– Especificación de control de transacciones
• Nombre de los empleados que trabajan en todos los – Reglas para inclusión en lenguajes (C, PASCAL,...)
proyectos del departamento 5.
PRY_DP5 (NÚMP)← πNÚMEROP (σNÚMD=5 (PROYECTO))
EMP_PRY(NSS,NÚMP) ← πNSSE,NP (TRABAJA_EN)
NSSS_EMP← EMP_PRY ÷ PRY_DP5
RESULTADO ← πAPELLIDO, NOMBRE (NSSS_EMP * EMPLEADO)

© A. Jaime 2003 DBD Tema 4 23 © A. Jaime 2003 DBD Tema 4 24


Esquema y catálogo en SQL2 Instrucción CREATE TABLE
Fig 8.1(a) No pueden tomar
• Esquema de BD: el término se incorporó en SQL2 CREATE TABLE DEPARTAMENTO valor nulo

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
• Catálogo del SGBD: colección de esquemas en un FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
entorno SQL ); Clave extranjera (o externa)

Catálogo del SGBD


Esquema 1 Esquema 2 INFORMATION Fig 8.1(b)

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
información de todos los
esquemas del catálogo del ON UPDATE CASCADE
SGBD );
Acciones: a realizar en caso de borrado (ON DELETE) o
Constraint: modificación (ON UPDATE) del valor referenciado
– Restricciones de integridad (RI): sólo entre se pone
nombre a la Opciones:
relaciones del mismo catálogo del SGBD RI, para poder • CASCADE
cambiarla o
– Esquemas del catálogo del SGBD: pueden eliminarla con • SET DEFAULT
ALTER y • SET NULL
compartir elementos (por ejemplo dominios) DROP • RESTRICT (no poner ON UPDATE – ON DELETE)

© A. Jaime 2003 DBD Tema 4 25 © A. Jaime 2003 DBD Tema 4 26

CREATE TABLE: CREATE TABLE:


especificación de restricciones y valores por omisión especificación de restricciones y valores por omisión (2)

• Definición de atributos: FOREIGN KEY (clave extranjera):


• Acciones posibles (en ON DELETE / ON UPDATE):
– NOT NULL: no se permite que el atributo tome valor nulo
– SET NULL: el valor de clave extranjera en cuestión se
– DEFAULT un-valor: se indica qué valor tomará el atributo sustituye por el valor nulo
si no se le asigna nada. Si no se indica DEFAULT, el valor – SET DEFAULT: el valor de clave extranjera en cuestión se
sustituye por el valor por defecto del atributo clave extranjera
por defecto es el valor nulo
– CASCADE: en caso de ON DELETE se borran las tuplas que
• Especificación de restricciones (tras las definiciones de atributo): hacen referencia a la tupla que desaparece.
– PRIMARY KEY: clave primaria En caso de ON UPDATE se aplica la misma modificación en las
claves extranjeras que la realizada sobre la clave primaria a la
– UNIQUE: clave candidata que hacen referencia.
– FOREIGN KEY: clave extranjera CASCADE es adecuada para:

• Se puede calificar con: • vínculos (TRABAJA_EN)


– ON DELETE: en caso de borrarse la tupla a la • atributos multivaluados (LOCALIZACIONES_DEPT)
que se hace referencia con un valor de la clave • tipos de entidad débiles (DEPENDIENTE)
extranjera – RESTRICT (cuando NO se pone ON DELETE / ON UPDATE):
– ON UPDATE: en caso de modificarse el valor impide el borrado (si falta ON DELETE) o la modificación (si
de clave primaria al que se hace referencia con falta ON UPDATE) de cualquier tupla referenciada desde un valor
el valor de clave extranjera de la clave extranjera en cuestión.

CREATE TABLE DEPARTAMENTO CREATE TABLE DEPARTAMENTO


( NOMBRED VARCHAR(15) NOT NULL, ( NOMBRED VARCHAR(15) NOT NULL,
NUMEROD INT NOT NULL DEFAULT 1, NUMEROD INT NOT NULL DEFAULT 1,
NSS_JEFE CHAR(9) NOT NULL, NSS_JEFE CHAR(9) NOT NULL,
FECHA_INIC_JEFE DATE, FECHA_INIC_JEFE DATE,
PRIMARY KEY(NUMEROD), PRIMARY KEY(NUMEROD),
UNIQUE(NOMBRED), UNIQUE(NOMBRED),
FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
ON UPDATE CASCADE ON DELETE SET NULL ON UPDATE CASCADE ON DELETE SET NULL
); );

© A. Jaime 2003 DBD Tema 4 27 © A. Jaime 2003 DBD Tema 4 28


Borrar esquemas (DROP SCHEMA) Evolución del esquema: columnas
y borrar tablas (DROP TABLE) (ALTER TABLE)

• Borrar un esquema completo: • Añadir columnas:


ALTER TABLE EMPRESA.EMPLEADO ADD PUESTO
DROP SCHEMA EMPRESA CASCADE VARCHAR(12);

– RESTRICT:borra el esquema sólo si NO contiene – En las tuplas existentes se asignan valores NULL.
Alternativas: definir DEFAULT o introducir valores con
ningún elemento la orden UPDATE (se estudiará más 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: DIRECCIÓN CASCADE;
– CASCADE borra también las restricciones
DROP TABLE DEPENDIENTE CASCADE
(constraints) y vistas que hagan referencia a la
columna (DIRECCIÓN)
– RESTRICT: borra la tabla sólo si NO existen
– RESTRICT sólo borra la columna (DIRECCIÓN) si no
referencias a la misma:
hay restricciones ni vistas que le hagan referencia
– Desde claves externa de otra tabla
• Modificar la definición 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 definición DEFAULT ‘888665555’
– Inserta una nueva definición de DEFAULT para el
atributo NSS_JEFE

© A. Jaime 2003 DBD Tema 4 29 © A. Jaime 2003 DBD Tema 4 30

Evolución del esquema: restricciones (constraints) Consultas básicas


(ALTER TABLE)

• Borrar restricciones: SELECT columnas


FROM tablas La omisión de
ALTER TABLE EMPRESA.EMPLEADO DROP WHERE equivale
[WHERE condición] a WHERE TRUE
CONSTRAINT CLE_SUPERV_EMP;
– Es preciso haberle dado un nombre con • Condiciones en WHERE:
CONSTRAINT en la definición (por ejemplo en {=, <>, <, >, <=, >=}, AND, OR, NOT
CREATE TABLE) • El resultado puede contener TUPLAS REPETIDAS

• Añadir restricciones: EMPLEADO


NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ...
ALTER TABLE EMPRESA.EMPLEADO ADD
CONSTRAINT CLE_SUPERV_EMP ... SEXO SALARIO NSS_SUPERV ND
DEPARTAMENTO
FOREIGN KEY (NSS_SUPERV) REFERENCES
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
EMPLEADO(NSS)
ON DELETE SET NULL
ON UPDATE CASCADE; • Nombre y dirección de los empleados del departamento
de Investigación
πNOMBRE, APELLIDO, DIRECCIÓN (2)
C1: SELECT NOMBRE, APELLIDO, DIRECCIÓN
FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=‘Investigación’ AND NÚMEROD=ND

(2) = σNOMBRED=‘Investigación’ (1) (1) = DEPARTAMENTO |×|NÚME-


ROD=ND EMPLEADO

© A. Jaime 2003 DBD Tema 4 31 © A. Jaime 2003 DBD Tema 4 32


SELECT *
Calificar atributos y alias
ALL y DISTINCT
EMPLEADO
... ... • Seleccionar todos los atributos de las tablas de FROM
NOMBRE INIC APELLIDO NSS DIRECCIÓN ND

DEPARTAMENTO C1A’’’: SELECT *


FROM EMPLEADO, DEPARTAMENTO
NOMBRE ND NSS_JEFE FECHA_INIC_JEFE
WHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD

• Nombre, apellido y dirección de los empleados del • Seleccionar todos los atributos de EMPLEADO
departamento de investigación
C1Aiv: SELECT EMPLEADO.*
Calificando atributos: FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD
C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIÓN
FROM EMPLEADO, DEPARTAMENTO • Seleccionar todos los valores (incluidos los repetidos)
WHERE DEPARTAMENTO.NOMBRE = ‘Investigación’ AND de salario de EMPLEADO
DEPARTAMENTO.ND=EMPLEADO.ND
C11:SELECT ALL SALARIO Opción por
FROM EMPLEADO defecto
Utilizando alias:
Declaración
C1A’:SELECT E.NOMBRE, APELLIDO, DIRECCIÓN de alias • Seleccionar todos los diferentes valores de salario de
EMPLEADO
FROM EMPLEADO AS E, DEPARTAMENTO AS D
WHERE D.NOMBRE = ‘Investigación’ AND D.ND=E.ND C11A:SELECT DISTINCT SALARIO
Uso de alias FROM EMPLEADO

• Para cambiar los nombres de atributo:


FROM ..., DEPARTAMENTO AS D(NOM, ND, NSS, FECHA)

© A. Jaime 2003 DBD Tema 4 33 © A. Jaime 2003 DBD Tema 4 34

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 DIRECCIÓN LIKE ‘%Houston, TX%’
• Se exige compatibilidad de unión
– % sustituye a un nº arbitrario de caracteres
– _ sustituye a un solo carácter
EMPLEADO DEPARTAMENTO
... APELLIDO NSS ... NOMBRED NÚMEROD NSS_JEFE ...
EMPLEADO
TRABAJA_EN PROYECTO
NOMBRE ... APELLIDO NSS ... SALARIO ...
NSSE NP ... ... NÚMEROP ... NÚMD
TRABAJA_EN PROYECTO
NSSE NP ... NOMBREP NÚMEROP
...
• Números 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 NÚMD=NÚMEROD 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=NÚMEROP AND
SELECT NP NOMBREP=‘ProductoX’

FROM TRABAJA_EN, EMPLEADO


WHERE NSSE=NSS AND APELLIDO=‘Smith’ ¿Qué produce 1.1 * SALARIO cuando SALARIO vale
NULL?

© A. Jaime 2003 DBD Tema 4 35 © A. Jaime 2003 DBD Tema 4 36


Ordenación de tuplas BETWEEN y
(ORDER BY) conjuntos explícitos de valores

BETWEEN:
EMPLEADO TRABAJA_EN • Información de los empleados cuyo salario está entre
NOMBRE ... APELLIDO NSS ... ND NSSE NP ... 30.000 y 40.000
DEPARTAMENTO PROYECTO SELECT *
FROM EMPLEADO
NOMBRED NÚMEROD NSS_JEFE ... NOMBREP NÚMEROP
... NÚMD WHERE (SALARIO BETWEEN 30000 AND 40000)

Equivale a SALARIO >= 30000


• Empleados y proyectos donde trabajan, ordenados por AND SALARIO <= 40000
departamento y, dentro de cada departamento, ordenados
alfabéticamente por apellido y nombre : Conjuntos explícitos de valores:
• NSS de los empleados que trabajan en los proyectos
C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREP
FROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN,
1, 2 o 3
PROYECTO C17: SELECT DISTINCT NSSE
WHERE NÚMEROD=ND, NSS=NSSE, NP=NÚMEROP FROM TRABAJA_EN
ORDER BY NOMBRED, APELLIDO, NOMBRE
WHERE NP IN (1,2,3)

– Por defecto, el orden es ascendente


– DESC indica orden descendente
– ASC indica orden ascendente
– El valor null también ocupa un orden entre los demás
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 Proceso de consultas anidadas


T1 T2
• SELECT en la cláusula WHERE de otra SELECT A B C D E F G A
1 bb 5 aaa 1 aaa 2 1
TRABAJA_EN
2 ab 3 aba 2 aeb 3 4
NSSE NP HORAS 3 cb 4 bbe 3 aeb 8 2
4 ec 2 aeb 4 aeb 5 3
• Información de los empleados que trabajan en algún 5 aba 8 1
proyecto en el que trabaje más de 10 horas a la semana Atributo de T1
el empleado ‘123456789’ SELECT A, B, C
Atributo de T2
Puede haber más niveles de FROM T1
SELECT NSSE anidamiento WHERE A IN ( SELECT A Atributo del
FROM TRABAJA_EN
FROM T2 SELECT externo
WHERE NP IN (SELECT NP FROM TRABAJA_EN
WHERE G<6 AND F=T1.D )
WHERE NSS=‘123456789‘ AND HORAS>10)

• Algunas anidadas (como las que usan ‘=‘ e IN) se Tuplas de T2


en resultado Resultado
de subconsulta
pueden escribir sin anidamientos: de subconsulta
T1.A=1∈
SELECT T.NSSE
E F GA A
FROM TRABAJA_EN AS T INNER JOIN TRABAJA_EN AS 1 aaa 2 1 1
T_EMP ON T.NP=T_EMP.NP T1
A B C D RESULTADO
WHERE T_EMP.NSS=‘123456789‘ AND T_EMP.HORAS>10
1 bb 5 aaa A B C
E F GA A
• Se admite el uso de conjuntos explícitos de valores: 2 ab 3 aba T1.A=2 ∉ 1 bb 5
3 cb 4 bbe 4 ec 2
WHERE (NP,HORAS) IN (SELECT NP, HORAS FROM ...)
4 ec 2 aeb
E F GA A
T1.A=3 ∉
• Se compara un valor de atributo (o conjunto de
atributos entre paréntesis) con el conjunto de tuplas
E F GA A
devueltas por la subconsulta T1.A=4 ∈
2 aeb 3 4 4
4 aeb 5 3 3

© A. Jaime 2003 DBD Tema 4 39 © A. Jaime 2003 DBD Tema 4 40


IN, ALL y ANY (o SOME) EXISTS

• WHERE atributo(s) IN subconsulta • Devuelve cierto si y sólo si la subconsulta devuelve


WHERE atributo(s) = ANY subconsulta alguna tupla.
– Cierto si y sólo si el valor del/de los atributo/s EMPLEADO DEPENDIENTE
coincide con alguna tupla de la subconsulta NOMBRE ... APELLIDO NSS ... NSSE NOMBRE ...
• WHERE atributo(s) < ANY subconsulta
– Cierto si y sólo si el valor del/de los atributo/s es
• Empleados sin familiares dependientes:
menor que alguna tupla de la subconsulta
– =, <, >, <=, >=, <> SELECT NOMBRE, APELLIDO
FROM EMPLEADO
• WHERE atributo(s) < ALL subconsulta
WHERE NOT EXISTS ( SELECT * FROM DEPENDIENTE
– Cierto si y sólo si el valor del/de los atributo/s es
WHERE NSS=NSSE)
menor que todas las tuplas de la subconsulta
NOTA
– <, >, <=, >=, <> DNI Asig Nota SELECT Nombre
• WHERE atributo(s) < subconsulta 1 7984 5 FROM ALUMNO AS A
– Cierto si y sólo si el valor del/de los atributo/s es 1 7450 4,5
WHERE EXISTS ( SELECT * FROM NOTA
1 7540 8,5
menor que la única tupla de la subconsulta 2 7984 6 WHERE Nota>=7 AND DNI=A.DNI)
– =, <, >, <=, >=, <> 2 4544 3
3 7984 7,5 Resultado
3 4544 9 de subconsulta
SELECT DNI 3 7540 8
EMPLEADO
FROM EMPLEADO
DNI SALARIO
ALUMNO DNI Asig Nota
WHERE SALARIO (*) ( SELECT SALARIO DNI Nombre RESULTADO
1 100 1 7540 8,5
FROM EMPLEADO) 1 Jon Nombre
2 150
(*) Resultado 2 Ana DNI Asig Nota Jon
3 175
4 200 3 Leire Leire
< ALL ⇒ ∅
5 160 DNI Asig Nota
<=ALL ⇒ 1
3 7984 7,5
< ANY ⇒ 1, 2, 3, 5 3 4544 9
<= ANY ⇒ 1, 2, 3, 4, 5 3 7540 8

© A. Jaime 2003 DBD Tema 4 41 © A. Jaime 2003 DBD Tema 4 42

UNIQUE División en SQL


TRABAJA_EN PROYECTO
• Devuelve cierto si y sólo si la subconsulta no devuelve
tuplas duplicadas.
NSSE NP ... NP ...

• Ejemplo: • NSS de aquellos empleados que trabajan en todos los


proyectos de la empresa
SELECT A, B
FROM T1 Resultado←(πNSSE , NP TRABAJA_EN) ÷ (πNP PROYECTO)
WHERE UNIQUE ( SELECT F FROM T2 WHERE G=T1.C )
SELECT DISTINCT T1.NSSE
FROM TRABAJA_EN AS T1
teoría de conjuntos
Transformación de

Tuplas de T2 Resultado Todos los proyectos


en resultado de la empresa
de subconsulta de subconsulta WHERE NOT EXISTS (
( SELECT NP FROM PROYECTO)
E F G F EXCEPT
T2 T1 RESULTADO ( SELECT NP FROM TRABAJA_EN AS T2
4 aeb 5 aeb
E F G A B C A B
WHERE T1.NSSE = T2.NSSE)
1 aaa 2 1 bb 5 E F G F 1 bb
2 aeb 3 2 ab 3 2 aeb 3 aeb 3 cb ) Todos los proyectos
del empleado T1
3 aba 8 3 cb 4 6 aeb 3 aeb 4 ec
4 aeb 5 4 ec 8
E F G F SELECT DISTINCT T1.NSSE
5 aba 8
6 aeb 3 E F G F FROM TRABAJA_EN AS T1
Transformación de

WHERE NOT EXISTS (


cálculo relacional

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

• Nombre y apellido de empleados sin supervisores La “tabla”


A B AND OR A NOT
True Null Null True Null Null
del null False Null Null Null
C18: SELECT NOMBRE, APELLIDO
Null Null Null Null
FROM EMPLEADO
WHERE NSS_SUPERV IS NULL Código de
vendedor Ventas
• Si pusiera WHERE NSS_SUPERV = NULL Cod Vendedor Vendido Cuota
1 Juan 1000 1000
– Para las filas con NSS_SUPERV nulo se estaría 2 María 1500 1000
comparando si NULL = NULL 3 Jesús 500 Null
4 Ana 1000 1200
– Esta comparación NO devuelve cierto ni falso 5 Aitor 1100 1000
– La comparación devuelve NULL (UNKNOWN) 6 Leire 2000 Null

Una condición puede NO verificarse


por FALSE o por NULL SELECT Vendedor FROM Ventas SELECT Vendedor FROM Ventas
WHERE Vendido>Cuota WHERE Vendido<=Cuota
Vendedor Vendedor
• Cualquier cosa operada con NULL devuelve NULL María Juan
(UNKNOWN) Aitor Ana

SELECT Vendedor, Cuota+500 SELECT SUM(VD) AS V1,


AS X FROM Ventas SUM(CU) AS V2 , (SUM(VD)-
SUM(CU)) AS V3, SUM(VD-CU)
Vendedor Cuota AS V4
Juan 1500 FROM Ventas AS
María 1500 V(CD,VR,VD,CU)
Jesús Null
Ana 1700
V1 V2 V3 V4
Aitor 1500
Leire Null 7100 4200 2900 400

© A. Jaime 2003 DBD Tema 4 45 © A. Jaime 2003 DBD Tema 4 46

Ejemplos con valor null (2) Renombrar atributos del resultado con AS
Código de
vendedor Ventas
Cod Vendedor Vendido Cuota C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO,
1 Juan 1000 1000 S.APELLIDO AS NOMBRE_SUPERVISOR
2 María 1500 1000 FROM EMPLEADO AS E, EMPLEADO AS S
3 Jesús 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 construcción AS
WHERE Vendido=500 OR Vendido=2000 también sirve para declarar alias de tablas:

FROM EMPLEADO E, ... SQL1


SQL2
SELECT Cuota , COUNT(*) AS C1 FROM EMPLEADO AS E, ...
SQL2
FROM Ventas
GROUP BY Cuota 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
Anidamiento de tablas combinadas
(INNER, NATURAL y OUTER JOIN en FROM)

EMPLEADO
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ...
... APELLIDO NSS FECHA_NCTO DIRECCIÓN ...
... SEXO SALARIO NSS_SUPERV ND
DEPARTAMENTO DEPARTAMENTO PROYECTO
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE ... NÚMD NSS_JEFE ... ... NÚMEROP LOCALIZACIÓNP NÚMD

• Nombre y dirección de los empleados del departamen-


to de Investigación SELECT NÚMEROP, NÚMD, APELLIDO, DIRECCIÓN
FECHA_NCTO
C1: C1A: SELECT NOMBRE, APELLIDO, DIRECCIÓN
FROM (PROYECTO NATURAL JOIN DEPARTAMENTO)
FROM (EMPLEADO INNER JOIN DEPARTAMENTO
INNER JOIN EMPLEADO ON NSS_JEFE=NSS
ON ND=NÚMEROD)
WHERE LOCALIZACIÓNP=‘Stafford’
WHERE NOMBRED=‘Investigación’

– Este concepto se incorporó a SQL2


– La consulta se entiende más fácilmente, al evitar la
mezcla de condiciones de |×| y σ en el WHERE
– Se pueden especificar diferentes tipos de reunión:
INNER JOIN (o JOIN), NATURAL JOIN, LEFT
[OUTER] JOIN, RIGHT [OUTER] JOIN y FULL
[OUTER] JOIN
– NO se pueden definir alias de tablas combinadas:

FROM (EMPLEADO INNER JOIN DEPARTAMENTO

ON ND=NÚMEROD) AS ED ...

© A. Jaime 2003 DBD Tema 4 49 © A. Jaime 2003 DBD Tema 4 50

OUTER JOIN UNION JOIN


T1 T2 • Se puede considerar como una mezcla de FULL
A B E F
OUTER JOIN y UNION.
@ null 000 null
aa 1 100 1 • Los atributos correspondientes con dominio
bb 2 101 1 compatible se tratan como en la unión. Los
cc 3 200 2
400 4 incompatibles, se tratan como en FULL OUTER JOIN.
• Utilidad limitada.
SELECT * SELECT *
T1 T2 T3 T4
FROM T1 INNER JOIN T2 FROM T1 LEFT JOIN T2
A B C B D
ON B=F ON B=F
aa aa 1 a 1
A B E F A B E F
bb ab 2 aa 2
aa 1 100 1 @ null null null cc bc b 3
aa 1 101 1 aa 1 100 1
bb 2 200 2 aa 1 101 1 A
bb 2 200 2 aa
cc 3 null null SELECT * ab
FROM T1 UNION JOIN T2 bb
Oracle: SELECT * FROM T1,T2 WHERE B=(+)F
bc
SQLServer:SELECT * FROM T1,T2 WHERE B*=F
cc

Oracle: ...WHERE B(+)=F Oracle: no lo implementa B C


SQLServer: ...WHERE B=*F SQLServer: ...WHERE B*=*F aa null
SELECT * ab null
SELECT * SELECT * FROM T2 UNION JOIN T3 bc null
FROM T1 RIGTH JOIN T2 FROM T1 FULL JOIN T2
null 1
ON B=F ON B=F
null 2
A B E F A B E F
null null 000 null @ null null null B D
aa 1 100 1 null null 000 null a 1
aa 1 101 1 aa 1 100 1 SELECT * aa 2
bb 2 200 2 aa 1 101 1 FROM T2 UNION JOIN T4 ab null
null null 400 4 bb 2 200 2 b 3
cc 3 null null bc null
null null 400 4
© A. Jaime 2003 DBD Tema 4 51 © A. Jaime 2003 DBD Tema 4 52
Funciones agregadas y de agrupación Funciones agregadas y de agrupación (2)

• COUNT (cuenta), SUM (suma), MAX (máximo), MIN • Cuántos valores de salario diferentes hay:
(mínimo), 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 también con atributos NO numéricos
• Cuántos valores de salario hay (con repeticiones):
• Suma de salarios del dpto. ‘Investigación’, junto a los
C23’: SELECT COUNT(SALARIO) Cuenta las filas con
salarios máximo, mínimo y medio:
FROM EMPLEADO salario NO nulo
C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),
AVG(SALARIO)
• Cuántos empleados hay:
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NÚMEROD C23’’: SELECT COUNT(*) Cuenta todas las
WHERE NOMBRED=‘Investigación’ FROM EMPLEADO filas de la tabla

• Nº de empleados en el departamento ‘Investigación’:


EMPLEADO C23:
C22: SELECT COUNT(*) **seserefiere
refiereaatuplas
tuplas
NOMBREP SALARIO ND COUNT(DISTINCT SALARIO)
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON 3
John NULL 5
ND=NÚMEROD Franklin 15.000 NULL C23’:
WHERE NOMBRED=‘Investigación’ Ramesh
Joyce
... 10.000
10.000
... 5
5
COUNT( SALARIO)

DEPARTAMENTO 7
EMPLEADO Alicia 10.000 4
NOMBRED NÚMEROD C23’’:
NOMBREP SALARIO ND Jennifer 20.000 4 COUNT( *)
Investigación 5
John NULL 5
Administración 4 ... Ahmad
James
20.000
20.000
4
1
8
Franklin 15.000 5 Dirección 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á vacía?
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

Atributos de agrupación: GROUP BY HAVING

• Obtener por cada dpto. su nombre y número junto al


• Para especificar una condición en términos del grupo
número de empleados del mismo y el salario medio
del dpto.: de tuplas asociado a cada valor de los atributos de
agrupación
C24’: SELECT NOMBRED, ND, COUNT(*) AS N_EMP,
AVG(SALARIO) AS SAL_MED PROYECTO TRABAJA_EN
FROM EMPLEADO LEFT JOIN DEPARTAMENTO ON
ND=NÚMEROD
NOMBREP NP
... NÚMD NSSE NP ...
GROUP BY NOMBRED, ND
– Todos los atributos de SELECT (que no son • Para cada proyecto con más de 2 empleados, obtener
atributos de funciones) deben estar en GROUP BY su número, nombre y nº de empleados
– Los atributos de GROUP BY no es obligatorio que
estén en SELECT SELECT NP, NOMBREP, COUNT(*)
FROM PROYECTO NATURAL JOIN TRABAJA_EN
EMPLEADO LEFT JOIN GROUP BY NP, NOMBREP
DEPARTAMENTO ON ND=NÚMEROD C24’:
HAVING COUNT(*)>2
SALARIO ND NOMBRED NOMBRED ND N_EMP SAL_MED

30.000 5 Investigación Investigación 5 4 16.250


15.000 5 Investigación Administración 4 3 16.666
... 10.000 ... 5 ... Investigación ... Dirección 1 1 20.000
10.000 5 Investigación
10.000 4 Administración
20.000 4 Administración
20.000 4 Administración Los valores
20.000 1 Dirección nulos forman su
propio grupo
EMPLEADO LEFT JOIN
DEPARTAMENTO ON ND=NÚMEROD C24’:
SALARIO ND NOMBRED NOMBRED ND N_EMP SAL_MED
NULL NULL NULL NULL NULL 2 10
10 NULL NULL DMC 5 2 10
... 10
10
... 5
5
... DMC
DMC
...
© A. Jaime 2003 DBD Tema 4 55 © A. Jaime 2003 DBD Tema 4 56
Primero WHERE, después HAVING GROUP BY con ORDER BY

• Nº de empleados con salario>30.000 en cada dpto. • Obtener por cada proyecto su número y nombre
Sólo para dptos. con más de 2 empleados con ese junto al número de empleados que trabajan en él,
sueldo ordenado ascendentemente por el número de
SELECT NOMBRED, COUNT(*) empleados
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
C25’: SELECT NÚMEROP, NOMBREP, COUNT(*)
ND = NÚMEROD
FROM PROYECTO INNER JOIN TRABAJA_EN
WHERE SALARIO>30.000
ON NÚMEROP=NP
GROUP BY NOMBRED
GROUP BY NÚMEROP, NOMBREP
HAVING COUNT(*) > 2 ORDER BY COUNT(*) ASC

EMPLEADO NOMBREP SALARIO ND NOMBRED C25’’: SELECT NÚMEROP, NOMBREP, COUNT(*) AS


INNER JOIN José 35.000 5 Investigación NUM_EMP
DEPARTA- Federico 40.000 5 Investigación
MENTO: FROM PROYECTO INNER JOIN TRABAJA_EN
Ramón 38.000 5 Investigación
Josefa ... 25.000 ... 5 ... Investigación ... ON NÚMEROP=NP
Alicia 25.000 4 Administración GROUP BY NÚMEROP, NOMBREP
Jazmín 43.000 4 Administración
Primero ORDER BY NUM_EMP ASC
Ahmed 25.000 4 Administración
se ejecuta Jaime 55.000 1 Dirección
WHERE NO se puede usar
... el nuevo nombre
NOMBREP SALARIO ND NOMBRED (AS) del atributo
INNER JOIN
... WHERE José 35.000 5 Investigación del resultado en
SALARIO Federico ... 40.000 ... 5 ... Investigación ... ORDER BY
>30.000: Ramón 38.000 5 Investigación
Jazmín 43.000 4 Administración NO
Jaime 55.000 1 Dirección NO
Después
se ejecuta
NOMBRED COUNT(*)
HAVING
Investigación 3

© A. Jaime 2003 DBD Tema 4 57 © A. Jaime 2003 DBD Tema 4 58

CASE NULLIF y COALESCE

SELECT NOMBRE, Operador NULLIF:


CASE
WHEN ESTADOCIVIL=‘S’ THEN ‘SOLTERO/A’ SELECT . . .
WHEN ESTADOCIVIL=‘C’ THEN ‘CASADA/O’ FROM . . .
WHEN ESTADOCIVIL=‘D’ THEN ‘DIVORCIADO/A’
WHERE BENEFICIO / NULLIF(COSTO, -1) >100
ELSE ‘VIUDA/O’
END, EDAD, FECHA_NACIMIENTO – Cuando COSTO vale -1 NULLIF devuelve NULL
FROM PERSONAS; – La división tiene un comportamiento predefinido
– En los WHEN cualquier condición (AND, OR, ...) cuando el denominador sea NULL (el resultado es NULL)
– Ahorro espacio almacenamiento: S/C/D/V frente
WHERE BENEFICIO / CASE WHEN COSTO = -1 THEN NULL
a Soltero/Casado ... ELSE COSTO END >100
– NULLIF es una abreviatura de CASE
SELECT NOMBRE,
CASE ESTADO_CIVIL
WHEN ‘S’ THEN ‘SOLTERO/A’ Operador COALESCE:
WHEN ‘C’ THEN ‘CASADA/O’
WHEN ‘D’ THEN ‘DIVORCIADO/A’ K1: SELECT NOMBRE, COALESCE(SUELDO, PARO,
ELSE ‘VIUDA/O’ SALARIO_SOCIAL) AS SALARIO
END, EDAD, FECHA_NACIMIENTO
FROM DATOS_HACIENDA;
FROM PERSONAS;
– Devuelve el primer valor NO nulo de la lista que
– En los WHEN un valor posible del atributo
sigue a la palabra COALESCE

UPDATE EMPLEADO DATOS_HACIENDA K1:


SET SUELDO = CASE DEPTO NOMBRE SUELDO PARO SALARIO_SOCIAL NOMBRE SALARIO
WHEN ‘VIDEO’ THEN SUELDO*1.1 Matias NULL NULL 20.000 Matias 20.000
WHEN ‘MÚSICA’ THEN SUELDO*1.2 Marta NULL 30.000 NULL Marta 30.000
ELSE 0 Maider 40.000 NULL NULL Maider 40.000
END;

© A. Jaime 2003 DBD Tema 4 59 © A. Jaime 2003 DBD Tema 4 60


CAST (conversión de tipos)
Análisis de consultas SQL
y constructor de valor de tupla
SELECT <atributos y funciones> También hay
WHERE DIRECTOR.FECHA_INICIO > FROM <tablas>
HAVING, que
este curso no
CAST(EMPLEADO.FECHA_ALTA_SS [WHERE <condición>] estudiaremos
AS DATE); [GROUP BY <atributos agrupación>]
[ORDER BY <atributos ordenación>]
– Convierte el campo FECHA_ALTA_SS a tipo
DATE

• Una consulta SQL se evalúa conceptualmente así:


• Una sola comparación incluye todos los valores de
dos tuplas:
– Primero FROM, seguido de WHERE, en tercer
lugar GROUP BY y por último ORDER BY
WHERE (NOMBRE,EDAD,ESTADO_CIVIL) =
(“José María”, 18, ‘S’)
– Si no hay GROUP BY ni ORDER BY, para cada
combinación de tuplas (una de cada tabla de
equivale a:
FROM), se evalúa la condición de WHERE. Si es
WHERE NOMBRE= “José María” AND EDAD=18 cierta se colocan en el resultado los valores
AND ESTADO_CIVIL=‘S’
correspondientes a los atributos del SELECT.

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 evaluación.
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

Análisis de consultas SQL (2) INSERT

• 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 técnica que le en CREATE TABLE
resulte más cómoda.
A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, NSS)
– Desde el punto de vista de optimización 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
implícito posible. – Los valores de VALUES en el mismo orden que se
especifican los atributos en INSERT INTO
– Desventaja: el programador puede desconocer – También se pueden incluir varias tuplas en la misma
cuál es la técnica más eficiente en cada caso instrucción: INSERT ... INTO ... VALUES (tupla1), (tupla2),
... (tuplaN)
– Idealmente, el SGBD debería procesar la consulta
de la misma manera sin importar cómo se haya A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND)
escrito. VALUES (‘Robert’, ‘Hatcher’, ‘980760540’, 2)
– Rechazada por la inexistencia del departamento
– En la práctica esto resulta muy difícil, y es número 2
conveniente que el usuario sea consciente de qué
A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND)
construcciones tienen un costo más elevado que
VALUES (‘Robert’, ‘Hatcher’, 5)
otras.
– Rechazada por no proporcionar valor para NSS
(clave primaria: NOT NULL)

© A. Jaime 2003 DBD Tema 4 63 © A. Jaime 2003 DBD Tema 4 64


INSERT (2) DELETE

A3A: CREATE TABLE INFO_DEPTOS ( A4A: DELETE FROM EMPLEADO


NOMBRE_DEPTO VARCHAR(15), WHERE APELLIDO=‘Brown’
NÚM_DE_EMPS INTEGER, – Una sola tabla
SAL_TOTAL INTEGER);
– WHERE: selección de tuplas a eliminar
– El borrado se puede propagar (RI referencial)
A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO,
NÚM_DE_EMPS, SAL_TOTAL)
SELECT NOMBRED, COUNT (*), SUM(SALARIO) A4B: DELETE FROM EMPLEADO
FROM DEPARTAMENTO INNER JOIN EMPLEADO WHERE NSS=‘123456789’
ON NÚMEROD=ND
GROUP BY NOMBRED;
A4C: DELETE FROM EMPLEADO
– Inserta varias tuplas (el resultado de la consulta)
WHERE ND IN
– Utilidad: tabla temporal donde realizar consultas (SELECT NÚMEROD
• Sus datos pueden perder actualidad FROM DEPARTAMENTO
• Alternativa sin este problema: vista WHERE NOMBRED=‘Investigación’)

A4D: DELETE FROM EMPLEADO


– Sin WHERE se borran todas las tuplas (quedaría
la tabla vacía)
– Usando DROP TABLE se hubiera eliminado
además la definición de la tabla

© A. Jaime 2003 DBD Tema 4 65 © A. Jaime 2003 DBD Tema 4 66

UPDATE Vistas en SQL

A5: UPDATE PROYECTO • Una vista es una tabla derivada de otras tablas (que
SET LOCALIZACIÓNP=‘Bellaire’, NÚMD=5 pueden ser tablas de base u otras vistas).
WHERE NÚMEROP=10
• Tipos de vista:
– Una sola tabla
– Tabla virtual: se calcula, no se almacena en la
– WHERE: selección de tuplas a modificar BD. Siempre está al día: 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 físicamente 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 técnicas para mantener la vista actualizada de
forma incremental.
• Ejemplo de creación 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 NÚMEROD FROM (EMPLEADO INNER JOIN TRABAJA_EN ON
NSS=NSSE) INNER JOIN PROYECTO ON NP=NUMEROP
FROM DEPARTAMENTO
WHERE NOMBRED= ‘Investigación’) • 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.

© A. Jaime 2003 DBD Tema 4 67 © A. Jaime 2003 DBD Tema 4 68


Ejercicio: Operaciones del álgebra

EMP DEP PROY TRAB


NOMBRE NSS ND NUMD NOMD NP NOMBRE NSSE NP HORAS
Iker 11 1 1 LSI 1 .NET 11 1 5
Ana 22 1 2 ATC 2 XML 11 2 2
Jon 33 2 3 EJB 22 1 3
Karmele 44 2 4 UML 22 3 1
44 3 4

Dibujar las relaciones resultantes de realizar las siguientes


operaciones del álgebra relacional:

Ejercicios • Nombre y NSS de cada empleado junto al número 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

Ejercicio: consultas álgebra relacional Ejercicio: consultas SQL EMPRESA


EMPRESA (8.13 (7.18) Elmasri/Navathe 02)
(7.18 Elmasri/Navathe 02)
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ...
... SEXO SALARIO NSS_SUPERV ND Sobre el esquema de BD de la figura 7.7 (pg. 4):
DEPARTAMENTO (donde pide empleados se refiere a su nombre y apellido)
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
a) Empleados del departamento 5 que trabajan más de
LOCALIZACIONES_DEPT 10 horas/semana en el proyecto ‘Producto X’
NÚMEROD LOCALIZACIÓND
b) Empleados con un dependiente con su mismo nombre
PROYECTO de pila
NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD
c) Empleados cuyo jefe directo es Franklin Wong
TRABAJA_EN d) Nombre de cada proyecto junto al número total de
NSSE NP HORAS horas trabajadas por los empleados en él.
DEPENDIENTE
e) Empleados que trabajan en todos los proyectos de la
NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO
empresa
a) Empleados del departamento 5 que trabajan más de 10 f) Empleados que no trabajan en ningún proyecto
horas/semana en el proyecto ‘Producto X’
g) Nombre de cada departamento junto al salario medio
b) Nombre de cada proyecto junto al número total de
de los empleados asignados al mismo
horas invertidas por los empleados en él.
c) Nombres de todos los empleados que trabajan en h) Salario medio de las empleadas de la compañía
todos y cada uno de los proyectos i) Nombre y dirección de los empleados que trabajan en
d) Empleados que no trabajan en ningún proyecto algún proyecto situado en Houston pero
e) Nombre y dirección de los empleados que trabajan en departamento no está situado allí
algún proyecto que, por una parte, está situado en j) Jefes de departamento sin dependientes
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
Ejercicio: consultas SQL UNIVERSIDAD (1) Ejercicio: consultas SQL UNIVERSIDAD (2)

Departamento DepNom Director Presupuesto Centro Departamento DepNom Director Presupuesto Centro

Asignatura Código AsigNom Curso Créditos SuDpto Asignatura Código AsigNom Curso Créditos SuDpto

AlumAsig Alum Asig Nota Convocatoria Código AlumAsig Alum Asig Nota Convocatoria Código

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 están “limpios” en
matriculados (sin utilizar funciones agregadas).
3º curso, es decir, que están matriculados en 3º y tienen
aprobadas todas las asignaturas de cursos inferiores. h) Obtener, sin usar funciones agregadas, el nombre de
los alumnos que están matriculados sólo de
c) DNI de los alumnos que están 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 matrícula en
menos una asignatura de cada uno de los departamentos
asignaturas de segundo curso.
de Informática.
j) Para cada asignatura del departamento DMC con más
e) Obtener el nombre de los alumnos que están
de 10 alumnos matriculados, obtener el código de la
matriculados en sexta convocatoria en al menos dos
asignatura y el número 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 están matriculados
k) Obtener el nombre de los alumnos de Nájera mayores
de todas las asignaturas de 3º y de alguna otra asignatura
de 20 años 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

Solución Operaciones del álgebra (1)

EMP DEP PROY TRAB


NOMBRE NSS ND NUMD NOMD NP NOMBRE NSSE NP HORAS
Iker 11 1 1 LSI 1 .NET 11 1 5
Ana 22 1 2 ATC 2 XML 11 2 2
Jon 33 2 3 EJB 22 1 3
Karmele 44 2 4 UML 22 3 1
44 3 4

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)
R3←TODOS_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

R4 ← EMP |×| ND=NNUMD DEP


R5 ← πNOMBRE, NOMD (R4)

© A. Jaime 2003 DBD Tema 4 75 © A. Jaime 2003 DBD Tema 4 76


Solución consultas álgebra relacional
Solución Operaciones del álgebra (2) EMPRESA
(Elmasri/Navathe 7.18)
EMP DEP PROY TRAB a) Empleados del departamento 5 que trabajan más de
NOMBRE NSS ND NUMD NOMD NP NOMBRE NSSE NP HORAS 10 horas/semana en el proyecto ‘Producto X’
Iker 11 1 1 LSI 1 .NET 11 1 5
EMP_DP5(NSSE) ← πNSS( σND=5 (EMPLEADO) )
Ana 22 1 2 ATC 2 XML 11 2 2
Jon 33 2 3 EJB 22 1 3 NUM_PROY(NP) ← πNÚMEROP(σNOMBREP=‘ProductoX’
Karmele 44 2 4 UML 22 3 1 (PROYECTO))
44 3 4 EMP_PR ← σHORAS>10 (TRABAJA_EN * NUM_PROY)
PERS TRB R6
R1 ← πNOMBRE,APELLIDO(EMP_PR * EMP_DP5)
NOMBRE NSS NSS NP NOMBRE NSS NP
Iker 11 11 1 Iker 11 1
Iker 11
b) Empleados con un dependiente con su mismo nombre
Ana 22 11 2 2
Jon 33 22 1 Ana 22 1 de pila
Karmele 44 22 3 Ana 22 3 DEP(NSS, NOMBRE) ← πNSSE, NOMBRE-DEPENDIENTE
44 3 Karmele 44 3 (DEPENDIENTE)
PERS ← πNOMBRE, NSS(EMP) EMP_CON_DEP_IGUAL ← EMPLEADO * DEP
TRB(NSS,NP) ← πNSSE, NP (TRAB)
R2 ← πNOMBRE,APELLIDO(EMP_CON_DEP_IGUAL )
R6← PERS * TRB
PRY PERS_PRY R7
c) Empleados cuyo jefe directo es Franklin Wong
NP NOMP NOMBRE NSS NP NOMP NOMBRE NOMP
F_WONG(NSS_SUPERV) ← πNSS, (σNOMBRE=‘Franklin’ Y
1 .NET Iker 11 1 .NET Iker .NET
APELLIDO=‘Wong’ (EMPLEADO))
2 XML Iker 11 2 XML Iker XML
SUPERVISADOS ← F_WONG * EMPLEADO
3 EJB Ana 22 1 .NET Ana .NET
4 UML Ana 22 3 EJB Ana EJB R3 ← πNOMBRE,APELLIDO(SUPERVISADOS)
Karmele 44 3 EJB Karmele EJB
PRY(NP,NOMP) ← πNP, NOMBRE (PROY) d) Nombre de cada proyecto junto al número total de
PERS_PRY ← R6 * PRY
horas trabajadas por los empleados en él.
R7← πNOMBRE, NOMP(PERS_PRY)
PROY_NOM ← PROYECTO |×|NÚMEROP=NP TRABAJA_EN
PERS_PRY R4(NOMBREP, HORAS) ← NOMBREP ℑ SUMA HORAS(PROY_NOM)
NOMBRE NSS NP

Usando PROY en lugar de PRY en PERS_PRY


© A. Jaime 2003 DBD Tema 4 77 © A. Jaime 2003 DBD Tema 4 78

Solución consultas EMPRESA (2) Solución consultas EMPRESA (3)


(Elmasri/Navathe 7.18) (Elmasri/Navathe 7.18)

e) Nombres de todos los empleados que trabajan en cada i) Nombre y dirección de los empleados que trabajan en
uno de los proyectos algún 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

PROYECTO |×|NÚMEROP=NP TRABAJA_EN)) PRY_HOUSTON← πNÚMEROP, NÚMD(σLOCALIZACIÓNP=‘Houston’


R5 ← πNOMP, NOMBRE, APELLIDO(PRY_EMPS * EMPLEADO) (PROYECTO))
DPT_HOUSTON ← πNÚMEROD(σLOCALIZACIÓND =‘Houston’ (LO-
CALIZACIONES_DEPTOS))
PROYS(NP) ← πNÚMEROP(PROYECTO) (1)
Los que trabajan

TODOS_DPTOS ← πNÚMEROD(DEPARTAMENTO)
en todos y cada

EMPS_TODOS_PRYS(NSS)← πNP,NSSE(TRABAJA_EN) ÷
proyectos
uno de los

PROYS DPT_NO_HOUSTON ← TODOS_DPTOS - DPT_HOUSTON


R5’ ← πNOMBRE, APELLIDO(EMPLEADO* EMPS_TODOS_PRYS) PRY_BUSCADOS(NP) ← πNÚMEROP(PRY_HOUSTON
|×|NÚMD=NÚMEROD DPT_NO_HOUSTON)
f) Empleados que no trabajan en ningún proyecto EMP_BUSCADOS(NSS) ← πNSSE(TRABAJA_EN * PRY_BUS-
CADOS)
EMP_PROY(NSS) ← πNSSE(TRABAJA_EN)
R9 ← πNOMBRE, APELLIDO, DIRECCIÓN(EMPLEADO *
EMPS ← πNSS(EMPLEADO) EMPS_BUSCADOS)
Puede haber departamentos que están
EMPS_SIN_PRY ← EMPS - EMP_PROY en lugares distintos a Houston
(1) NO se puede calcular así: y que también están en Houston
R6 ← πNOMBRE, APELLIDO(EMPLEADO* EMPS_SIN_PRY)
DPT_NO_HOUSTON ← πNÚMEROD(σLOCALIZACIÓND ≠‘Houston’
(LOCALIZACIONES_DEPTOS))
g) Nombre de cada departamento junto al salario medio
de los empleados asignados al mismo j) Jefes de departamento sin dependientes
DPTO_EMP← DEPARTAMENTO |×|NÚMEROD=ND EMPLEADO JEFES(NSSE) ← πNSS_JEFE(DEPARTAMENTO)
R7← NOMBRED ℑ PROMEDIO SALARIO(DPTO_EMP) JEFES_CON_DEP(NSSE) ← πNSSE(JEFES * DEPENDIENTE)
JEFES_SIN_DEP(NSS) ← JEFES - JEFES_CON_DEP
h) Salario medio de las empleadas de la empresa R10 ← πNOMBRE, APELLIDO(JEFES_SIN_DEP * EMPLEADO)
EMP_FEM← σSEXO=‘M’ (EMPLEADO)
JEFES_SIN_DEP(NSS) ← JEFES – (πNSSE(EMPLEADO
R8← ℑ PROMEDIO SALARIO(EMP_FEM)
Alternativa válida |×|NSS=NSSE DEPENDIENTE))
© A. Jaime 2003 DBD Tema 4 79 © A. Jaime 2003 DBD Tema 4 80

También podría gustarte