Está en la página 1de 20

Conceptos

Anexo al tema 4. Repaso de lgebra relacional y BD: coleccin de relaciones


SQL Relacin:
Valores columna
mismo domino
El modelo de datos relacional, las restricciones relacionales ALUMNO
y el lgebra relacional Elmasri/Navathe 02 Nombre CdigoAlumno Ao Especialidad Fila=
Smith 17 1 CS Tupla
Brown 8 2 CS
El estndar de las Bases de Datos Relacionales
Elmasri/Navathe 02 Columna =
Atributo

Relacin = conjunto de tuplas (no tienen sentido


tuplas duplicadas)
Dominios atmicos: ni compuestos ni multivaluados
Modelo relacional: conceptos, restricciones, operaciones
de actualizacin y operaciones del lgebra Esquema de relacin R(A1, ... , An): intensin
Revisin de SQL 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
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 atmico de un tipo


De clave: atributo(s) que identifica(n) unvocamente a EMPLEADO
las tuplas. NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN ...
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 NMEROD NSS_JEFE FECHA_INIC_JEFE
Integridad referencial:
Una tupla que referencia a otra (de la misma u otra LOCALIZACIONES_DEPT
relacin), debe referirse a una tupla existente en NMEROD LOCALIZACIND
dicha relacin
PROYECTO
Se hace referencia a otra tupla mediante una clave
NOMBREP NMEROP LOCALIZACINP NMD
extranjera (fornea, externa). Conjunto de atributos
no vaco. 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 NMEROD NSS_JEFE FECHA_INIC_JEFE
Investigacin 5 333445555 1988-05-22
Administracin 4 987654321 1995-01-01
Direccin 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 DIRECCIN
John B Smith 123456789 1965-01-09 731 Fondren, Houston, TX LOCALIZACIONES_DEPT
Franklin T Wong 333445555 1955-12-08 638 Voss, Houston, TX NMEROD LOCALIZACIND
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 NMEROP LOCALIZACINP NMD
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 Automatizacin 10 Stafford 4
453453453 1 20.0
M 25.000 333445555 5 Reorganizacin 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 NMEROD NSS_JEFE FECHA_INIC_JEFE
Investigacin 5 333445555 1988-05-22 Figura 7.6 (2 parte) Un posible estado de la base de datos
Administracin 4 987654321 1995-01-01 relacional del esquema EMPRESA
Direccin 1 888665555 1981-06-19
A. Jaime 2003 DBD Tema 4 5 A. Jaime 2003 DBD Tema 4 6

Operaciones de actualizacin
lgebra relacional
y violacin de las RI
Operaciones de actualizacin: Operaciones para manipular relaciones enteras
Insertar Permiten especificar consultas (recuperacin de datos)
Eliminar El resultado de una consulta es otra relacin
Actualizar (modificar)
Operaciones especficas del lgebra relacional:
Cuando se aplican no deben violar ninguna RI SELECCIONAR
Unarios
PROYECTAR
Insertar y actualizar pueden violar los 4 tipos de RI REUNIN (JOIN) Binario
Eliminar slo puede violar la I. Referencial
Operaciones de teora de conjuntos:
En SQL se pueden definir acciones asociadas a la
violacin de RI (ejemplo. ON UPDATE UNIN
CASCADE) INTERSECCIN
Binarios
DIFERENCIA
PRODUCTO CARTESIANO

Otras operaciones:
DIVISIN
FUNCIONES AGREGADAS Y DE AGRUPACIN
Etc.

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


relacin Selecciona las columnas especificadas de una relacin
Las que satisfacen una condicin (desechando el resto de columnas)
Condicin: {=, <, , >, , } Y, O, NO El resultado es otra relacin
El resultado es otra relacin Eliminacin 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 Unin, interseccin 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
Brbara 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 Brbara 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 unin: ambas relaciones deben
tener el mismo nmero 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) Reunin (JOIN): ||
EMP APELLIDO, NSS, ND(EMPLEADO)
APELLIDO NSS ND
PR_STAF DP_STAF
Smith 123456789 5
NOMBREP NOMBRED NMEROD Wong 333445555 5
Automatizacin Administracin 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 NMEROD Borg 888665555 1
Automatizacin Administracin 4
Automatizacin Mantenimiento 8 DPT NOMBRED, NSS_JEFE(DEPARTAMENTO)
Nuevos beneficios Administracin 4
Nuevos beneficios Mantenimiento 8 NOMBRED NSS_JEFE
Investigacin 333445555
Administracin 987654321
Relaciones: no han de ser compatibles con la unin Direccin 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 Investigacin 333445555 Wong 333445555 5
Administracin 987654321 Wallace 987654321 4
Q consta de todas las combinaciones de cada Direccin 888665555 Borg 888665555 1

tupla de R seguida de otra de S


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

Reunin (JOIN) (2) Tipos de reunin (JOIN)

Relaciones: no han de ser compatibles con la unin Reunin Theta:


R(A1,...,An) ||COND S(B1,...,Bm) = Q(A1,...,An, B1,...,Bm) Cualquier reunin
donde R tiene n tuplas y S m tuplas Las tuplas cuyo atributo de reunin sea nulo
NO aparecen en el resultado
Q tiene un mximo de n* m tuplas
Equirreunin (equijoin):
Q consta de todas las combinaciones de cada tupla
slo comparaciones de igualdad en COND
de R seguida de otra de S, que satisfagan la
condicin de reunin COND El resultado siempre tiene pares de atributos
con valores idnticos en todas las tuplas
R y Q pueden ser el mismo conjunto
Reunin natural (join natural):
Si ninguna combinacin cumple la condicin
equirreunin seguida de la eliminacin de
COND el resultado es una relacin vaca (sin atributos superfluos.
tuplas)
COND implcita: igualdades de todos los
pares de atributos de igual nombre
Condicin COND: Exige algn par de atributos de igual nombre
Se evala para cada combinacin de tuplas Se identifica con *
tiene la forma: <subcondicin> Y <subcondicin>
Y ... Y <subcondicin>
Cada subcondicin 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 reunin natural: * Divisin:
Ejemplo: R N D
PRY NOMBREP, NMD(PROYECTO) X Y Z


N D R
NOMBREP NMD B A A B
ProductoX 5 b1 a1 a1 b1
ProductoY 5 b1 a2 a2 b4
ProductoZ 5 b1 a3 a3
Automatizacin 4 b1 a4
Reorganizacin 1 b2 a1
Nuevos beneficios 4 b2 a3
b3 a2 X cjto. de atributos de N
DPT(NOMBRED, NMD) b3 a3 Y cjto. de atributos de D
NOMBRED, NMEROD(DEPARTAMENTO) b3 a4 Z cjto. de atributos de R
b4 a1
NOMBRED NMD Tiene que haber al b4 a2
menos un par de b4 a3 t[X] valores de los atributos
Investigacin 5
atributos con el del cjto X en la tupla t
Administracin 4
Direccin 1 mismo nombre
Para cada atributo de D debe haber otro en N de igual
nombre: Y X
Desaparece un NMD El resultado tiene los atributos de N que NO estn en D:
DEPTO_PROY PRY * DPT Z=X - Y
NOMBREP NMD NOMBRED Son tuplas del resultado, tR, las que cumplen:
ProductoX 5 Investigacin La combinacin de valores de t est en alguna tupla de
ProductoY 5 Investigacin N
ProductoZ 5 Investigacin Esa combinacin de valores de t se encuentra en tuplas
Automatizacin 4 Administracin de N junto todas y cada una de las combinaciones de
Reorganizacin 1 Direccin valores de las tuplas de D
Nuevos beneficios 4 Administracin Es decir, tR si y solo si :
tD D tN N tal que ( t = tN[Z] tD = tN[Y] )
A. Jaime 2003 DBD Tema 4 17 A. Jaime 2003 DBD Tema 4 18

Funciones agregadas (SUMA, PROMEDIO,


Divisin: (2)
MXIMO, MNIMO y CUENTA) y de agrupacin
La divisin 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 tambin se
el empleado con NSS=123456789. 999887777 25.000 consideran en los clculos
987654321 43.000
666884444 38.000 En SQL se puede poner para
NSS_NMS_PRY NSSE , NMP(TRABAJA_EN) 453453453 25.000 ello, por ejemplo:
987987987 25.000 COUNT(DISTINCT SALARIO)
NMS_PRY NMP(NSSE=123456789 (TRABAJA_EN)) 888665555 55.000

CUENTA NSS, PROMEDIO SALARIO(EMP)


NSS_NMS_PRY NMS_PRY NSSS
R1
NMP
NSSE NMP 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_NMS_PRY NMS_PRY PROMEDIO_SALARIO El resultado es una
333445555 3 relacin, 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 agrupacin
Reunin externa
y valor nulo

EMP
EMPAPELLIDO, NSS(EM- DEPNOMBRED, NSS_JEFE(DE-
NSS NOM DPTO PLEADO) PARTAMENTO)
11 Alfredo LSI APELLIDO NSS NOMBRED NSS_JEFE
22 Ana LSI Smith 123456789 Investigacin 333445555
33 Juan ATC NO cuenta los Wong 333445555 Administracin 987654321
44 Federico nulo valores diferentes Zelaya 999887777
en el campo NOM Direccin 888665555
55 Ana LSI Wallace 987654321
para un mismo
R1DPTO CUENTA NOM(EMP) DPTO, sino cuntas Narayan 666884444
tuplas tienen valor English 453453453
DPTO CUENTA_NOM asignado en NOM Jabbar 987987987 Reunin externa
LSI 3 para un mismo valor
de DPTO Borg 888665555 izquierda R ]| S
ATC 1
nulo 1
S considera el nulo R APELLIDO, NOMBRED(
como valor de EMP ]|NSS=NSS_JEFE DEP)
R2NOM CUENTA DPTO(EMP) agrupacin APELLIDO NOMBRED Conserva todas
NOM CUENTA_DPTO
Smith nulo las tuplas de
Alfredo 1 NO considera en la Wong Investigacin EMP aunque sea
Ana 2 cuenta (o en el
Zelaya nulo rellenando todos
Juan 1 promedio, suma, ...)
Federico 0 los valores nulos Wallace Administracin los campos
que pueda haber correspondientes
Narayan nulo
Permite especificar a DEP con
English nulo
una combinacin de valores nulos
Jabbar nulo
atributos de R3NOM, DPTO CUENTA NSS(EMP)
agrupacin Borg Direccin
NOM DPTO CUENTA_NSS

Alfredo LSI 1
Ana LSI 2 Reunin externa derecha R |[ S
Juan ATC 1
Federico nulo 1
Reunin externa completa R ][ S

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

Ejemplos de consultas con lgebra relacional Revisin de SQL


(Structured Query Language)
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN ... lgebra relacional orden de las operaciones
... SEXO SALARIO NSS_SUPERV ND SQL: lenguaje declarativo
Se indica cul es el resultado esperado
DEPARTAMENTO
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE
Permite que el SGBD seleccione las operaciones y
el orden ms adecuados para obtener el resultado:
TRABAJA_EN PROYECTO optimizacin
NSSE NP HORAS NOMBREP NMEROP LOCALIZACINP NMD
SGBD comerciales son variantes de SQL
Estndares 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, direccin y fecha de nacimiento del jefe del de-
partamento de todos los proyectos realizados en Stafford SQL:
PRYS_STAFF LOCALIZACINP=Stafford(PROYECTO) Lenguaje de Definicin de Datos (LDD)
DPT_CONTR PRYS_STAFF || NMD=NMEROD Lenguaje de Manipulacin de Datos (LMD):
DEPARTAMENTO consulta y actualizacin
JEFE_DP_PRY DPT_CONTR || NSS_JEFE=NSS EMPLEADO
Definicin de vistas
Especificacin de seguridad y autorizacin
RESULTADO NMEROP,NMD,APELLIDO,DIRECCIN,FE-
Definicin de restricciones de integridad
CHA_NCTO (JEFE_DP_PRY)
Especificacin de control de transacciones
Nombre de los empleados que trabajan en todos los Reglas para inclusin en lenguajes (C, PASCAL,...)
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)

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


Esquema y catlogo en SQL2 Instruccin CREATE TABLE
Fig 8.1(a) No pueden tomar
Esquema de BD: el trmino 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
Catlogo del SGBD: coleccin de esquemas en un FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
entorno SQL ); Clave extranjera (o externa)

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

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

CREATE TABLE: CREATE TABLE:


especificacin de restricciones y valores por omisin especificacin de restricciones y valores por omisin (2)

Definicin 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 cuestin 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 cuestin 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
Especificacin 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 modificacin 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: vnculos (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 dbiles (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 modificacin (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 cuestin.

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) Evolucin del esquema: columnas
y borrar tablas (DROP TABLE) (ALTER TABLE)

Borrar un esquema completo: Aadir columnas:


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

RESTRICT:borra el esquema slo si NO contiene En las tuplas existentes se asignan valores NULL.
Alternativas: definir DEFAULT o introducir valores con
ningn elemento la orden UPDATE (se estudiar ms adelante)
CASCADE: borra el esquema y todos sus NOT NULL no est permitido
contenidos
Borrar columnas:
ALTER TABLE EMPRESA.EMPLEADO DROP
Borrar una tabla de un esquema: DIRECCIN CASCADE;
CASCADE borra tambin las restricciones
DROP TABLE DEPENDIENTE CASCADE
(constraints) y vistas que hagan referencia a la
columna (DIRECCIN)
RESTRICT: borra la tabla slo si NO existen
RESTRICT slo borra la columna (DIRECCIN) si no
referencias a la misma:
hay restricciones ni vistas que le hagan referencia
Desde claves externa de otra tabla
Modificar la definicin de columnas:
Desde alguna vista ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
CASCADE: borra tabla y todas las restricciones NSS_JEFE DROP DEFAULT;
ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
(constraints) y vistas donde haya referencias a sta NSS_JEFE SET DEFAULT 333445555;
Elimina la definicin DEFAULT 888665555
Inserta una nueva definicin de DEFAULT para el
atributo NSS_JEFE

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

Evolucin del esquema: restricciones (constraints) Consultas bsicas


(ALTER TABLE)

Borrar restricciones: SELECT columnas


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

Aadir restricciones: EMPLEADO


NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN ...
ALTER TABLE EMPRESA.EMPLEADO ADD
CONSTRAINT CLE_SUPERV_EMP ... SEXO SALARIO NSS_SUPERV ND
DEPARTAMENTO
FOREIGN KEY (NSS_SUPERV) REFERENCES
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE
EMPLEADO(NSS)
ON DELETE SET NULL
ON UPDATE CASCADE; Nombre y direccin de los empleados del departamento
de Investigacin
NOMBRE, APELLIDO, DIRECCIN (2)
C1: SELECT NOMBRE, APELLIDO, DIRECCIN
FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=Investigacin AND NMEROD=ND

(2) = NOMBRED=Investigacin (1) (1) = DEPARTAMENTO ||NME-


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 DIRECCIN ND

DEPARTAMENTO C1A: SELECT *


FROM EMPLEADO, DEPARTAMENTO
NOMBRE ND NSS_JEFE FECHA_INIC_JEFE
WHERE NOMBRED=Investigacin AND ND=NMEROD

Nombre, apellido y direccin de los empleados del Seleccionar todos los atributos de EMPLEADO
departamento de investigacin
C1Aiv: SELECT EMPLEADO.*
Calificando atributos: FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=Investigacin AND ND=NMEROD
C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIN
FROM EMPLEADO, DEPARTAMENTO Seleccionar todos los valores (incluidos los repetidos)
WHERE DEPARTAMENTO.NOMBRE = Investigacin AND de salario de EMPLEADO
DEPARTAMENTO.ND=EMPLEADO.ND
C11:SELECT ALL SALARIO Opcin por
FROM EMPLEADO defecto
Utilizando alias:
Declaracin
C1A:SELECT E.NOMBRE, APELLIDO, DIRECCIN de alias Seleccionar todos los diferentes valores de salario de
EMPLEADO
FROM EMPLEADO AS E, DEPARTAMENTO AS D
WHERE D.NOMBRE = Investigacin AND D.ND=E.ND C11A:SELECT DISTINCT SALARIO
Uso de alias FROM EMPLEADO

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 DIRECCIN LIKE %Houston, TX%
Se exige compatibilidad de unin
% sustituye a un n arbitrario de caracteres
_ sustituye a un solo carcter
EMPLEADO DEPARTAMENTO
... APELLIDO NSS ... NOMBRED NMEROD NSS_JEFE ...
EMPLEADO
TRABAJA_EN PROYECTO
NOMBRE ... APELLIDO NSS ... SALARIO ...
NSSE NP ... ... NMEROP ... NMD
TRABAJA_EN PROYECTO
NSSE NP ... NOMBREP NMEROP
...
Nmeros de proyecto donde participa Smith como
trabajador o como jefe del departamento controlador:
Nombre y salario de los empleados que trabajan en
C4: SELECT NUMEROP
ProductoX tras aumentarles el sueldo un 10% :
FROM PROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NMD=NMEROD AND NSS_JEFE=NSS AND C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIO
APELLIDO=Smith FROM EMPLEADO, TRABAJA_EN, PROYECTO
UNION WHERE NSS=NSSE AND NP=NMEROP AND
SELECT NP NOMBREP=ProductoX

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


Ordenacin de tuplas BETWEEN y
(ORDER BY) conjuntos explcitos de valores

BETWEEN:
EMPLEADO TRABAJA_EN Informacin de los empleados cuyo salario est entre
NOMBRE ... APELLIDO NSS ... ND NSSE NP ... 30.000 y 40.000
DEPARTAMENTO PROYECTO SELECT *
FROM EMPLEADO
NOMBRED NMEROD NSS_JEFE ... NOMBREP NMEROP
... NMD WHERE (SALARIO BETWEEN 30000 AND 40000)

Equivale a SALARIO >= 30000


Empleados y proyectos donde trabajan, ordenados por AND SALARIO <= 40000
departamento y, dentro de cada departamento, ordenados
alfabticamente por apellido y nombre : Conjuntos explcitos 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 NMEROD=ND, NSS=NSSE, NP=NMEROP 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 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 Proceso de consultas anidadas


T1 T2
SELECT en la clusula 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
Informacin de los empleados que trabajan en algn 5 aba 8 1
proyecto en el que trabaje ms de 10 horas a la semana Atributo de T1
el empleado 123456789 SELECT A, B, C
Atributo de T2
Puede haber ms 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 explcitos 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 parntesis) 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 slo si la subconsulta devuelve


WHERE atributo(s) = ANY subconsulta alguna tupla.
Cierto si y slo 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 slo 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 slo 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 slo 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 Divisin en SQL


TRABAJA_EN PROYECTO
Devuelve cierto si y slo 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
teora de conjuntos
Transformacin 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
Transformacin de

WHERE NOT EXISTS (


clculo 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 Cdigo 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 estara 2 Mara 1500 1000
comparando si NULL = NULL 3 Jess 500 Null
4 Ana 1000 1200
Esta comparacin NO devuelve cierto ni falso 5 Aitor 1100 1000
La comparacin devuelve NULL (UNKNOWN) 6 Leire 2000 Null

Una condicin 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 Mara 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
Mara 1500 V(CD,VR,VD,CU)
Jess 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
Cdigo de
vendedor Ventas
Cod Vendedor Vendido Cuota C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO,
1 Juan 1000 1000 S.APELLIDO AS NOMBRE_SUPERVISOR
2 Mara 1500 1000 FROM EMPLEADO AS E, EMPLEADO AS S
3 Jess 500 Null
WHERE E.NSS_SUPERV = S.NSS
4 Ana 1000 1200
5 Aitor 1100 1000
6 Leire 2000 Null Cambia el nombre de cualquier columna
(atributo) que aparezca en el resultado
SELECT SUM(CU) AS C1, COUNT(CU) AS C2 , COUNT(*) AS C3
FROM Ventas AS V(CD,VR,VD,CU)
Antes hemos visto que la construccin AS
WHERE Vendido=500 OR Vendido=2000 tambin sirve para declarar alias de tablas:

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 DIRECCIN ...
... APELLIDO NSS FECHA_NCTO DIRECCIN ...
... SEXO SALARIO NSS_SUPERV ND
DEPARTAMENTO DEPARTAMENTO PROYECTO
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE ... NMD NSS_JEFE ... ... NMEROP LOCALIZACINP NMD

Nombre y direccin de los empleados del departamen-


to de Investigacin SELECT NMEROP, NMD, APELLIDO, DIRECCIN
FECHA_NCTO
C1: C1A: SELECT NOMBRE, APELLIDO, DIRECCIN
FROM (PROYECTO NATURAL JOIN DEPARTAMENTO)
FROM (EMPLEADO INNER JOIN DEPARTAMENTO
INNER JOIN EMPLEADO ON NSS_JEFE=NSS
ON ND=NMEROD)
WHERE LOCALIZACINP=Stafford
WHERE NOMBRED=Investigacin

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
NO se pueden definir alias de tablas combinadas:

FROM (EMPLEADO INNER JOIN DEPARTAMENTO

ON ND=NMEROD) 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 unin. 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 agrupacin Funciones agregadas y de agrupacin (2)

COUNT (cuenta), SUM (suma), MAX (mximo), MIN Cuntos valores de salario diferentes hay:
(mnimo), AVG (media) C23: SELECT COUNT(DISTINCT SALARIO)
dominio con
Con expresiones : AVG(1.1*SALARIO) orden total FROM EMPLEADO NO cuenta
los valores nulos
MAX y MIN tambin con atributos NO numricos
Cuntos valores de salario hay (con repeticiones):
Suma de salarios del dpto. Investigacin, junto a los
C23: SELECT COUNT(SALARIO) Cuenta las filas con
salarios mximo, mnimo y medio:
FROM EMPLEADO salario NO nulo
C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),
AVG(SALARIO)
Cuntos empleados hay:
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NMEROD C23: SELECT COUNT(*) Cuenta todas las
WHERE NOMBRED=Investigacin FROM EMPLEADO filas de la tabla

N de empleados en el departamento Investigacin:


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=NMEROD Franklin 15.000 NULL C23:
WHERE NOMBRED=Investigacin Ramesh
Joyce
... 10.000
10.000
... 5
5
COUNT( SALARIO)

DEPARTAMENTO 7
EMPLEADO Alicia 10.000 4
NOMBRED NMEROD C23:
NOMBREP SALARIO ND Jennifer 20.000 4 COUNT( *)
Investigacin 5
John NULL 5
Administracin 4 ... Ahmad
James
20.000
20.000
4
1
8
Franklin 15.000 5 Direccin 1
Ramesh
Joyce
... 10.000
10.000
... 5
5 SUM(SA- MAX(SA- MIN(SA- AVG(SAL-
Alicia 10.000 4 C20 LARIO) LARIO) LARIO) ARIO) Qu ocurre cuando todos los salarios valen NULL?
Jennifer 20.000 4 35.000 15.000 10.000 11.666 Qu ocurre cuando la tabla est vaca?
Ahmad 20.000 4
James 20.000 1 C22 COUNT(*) 35.000
35.000/ /33
4
A. Jaime 2003 DBD Tema 4 53 A. Jaime 2003 DBD Tema 4 54

Atributos de agrupacin: GROUP BY HAVING

Obtener por cada dpto. su nombre y nmero junto al


Para especificar una condicin en trminos del grupo
nmero de empleados del mismo y el salario medio
del dpto.: de tuplas asociado a cada valor de los atributos de
agrupacin
C24: SELECT NOMBRED, ND, COUNT(*) AS N_EMP,
AVG(SALARIO) AS SAL_MED PROYECTO TRABAJA_EN
FROM EMPLEADO LEFT JOIN DEPARTAMENTO ON
ND=NMEROD
NOMBREP NP
... NMD NSSE NP ...
GROUP BY NOMBRED, ND
Todos los atributos de SELECT (que no son Para cada proyecto con ms de 2 empleados, obtener
atributos de funciones) deben estar en GROUP BY su nmero, nombre y n de empleados
Los atributos de GROUP BY no es obligatorio que
estn en SELECT SELECT NP, NOMBREP, COUNT(*)
FROM PROYECTO NATURAL JOIN TRABAJA_EN
EMPLEADO LEFT JOIN GROUP BY NP, NOMBREP
DEPARTAMENTO ON ND=NMEROD C24:
HAVING COUNT(*)>2
SALARIO ND NOMBRED NOMBRED ND N_EMP SAL_MED

30.000 5 Investigacin Investigacin 5 4 16.250


15.000 5 Investigacin Administracin 4 3 16.666
... 10.000 ... 5 ... Investigacin ... Direccin 1 1 20.000
10.000 5 Investigacin
10.000 4 Administracin
20.000 4 Administracin
20.000 4 Administracin Los valores
20.000 1 Direccin nulos forman su
propio grupo
EMPLEADO LEFT JOIN
DEPARTAMENTO ON ND=NMEROD 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, despus HAVING GROUP BY con ORDER BY

N de empleados con salario>30.000 en cada dpto. Obtener por cada proyecto su nmero y nombre
Slo para dptos. con ms de 2 empleados con ese junto al nmero de empleados que trabajan en l,
sueldo ordenado ascendentemente por el nmero de
SELECT NOMBRED, COUNT(*) empleados
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
C25: SELECT NMEROP, NOMBREP, COUNT(*)
ND = NMEROD
FROM PROYECTO INNER JOIN TRABAJA_EN
WHERE SALARIO>30.000
ON NMEROP=NP
GROUP BY NOMBRED
GROUP BY NMEROP, NOMBREP
HAVING COUNT(*) > 2 ORDER BY COUNT(*) ASC

EMPLEADO NOMBREP SALARIO ND NOMBRED C25: SELECT NMEROP, NOMBREP, COUNT(*) AS


INNER JOIN Jos 35.000 5 Investigacin NUM_EMP
DEPARTA- Federico 40.000 5 Investigacin
MENTO: FROM PROYECTO INNER JOIN TRABAJA_EN
Ramn 38.000 5 Investigacin
Josefa ... 25.000 ... 5 ... Investigacin ... ON NMEROP=NP
Alicia 25.000 4 Administracin GROUP BY NMEROP, NOMBREP
Jazmn 43.000 4 Administracin
Primero ORDER BY NUM_EMP ASC
Ahmed 25.000 4 Administracin
se ejecuta Jaime 55.000 1 Direccin
WHERE NO se puede usar
... el nuevo nombre
NOMBREP SALARIO ND NOMBRED (AS) del atributo
INNER JOIN
... WHERE Jos 35.000 5 Investigacin del resultado en
SALARIO Federico ... 40.000 ... 5 ... Investigacin ... ORDER BY
>30.000: Ramn 38.000 5 Investigacin
Jazmn 43.000 4 Administracin NO
Jaime 55.000 1 Direccin NO
Despus
se ejecuta
NOMBRED COUNT(*)
HAVING
Investigacin 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 divisin tiene un comportamiento predefinido
En los WHEN cualquier condicin (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 MSICA 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 (conversin de tipos)
Anlisis de consultas SQL
y constructor de valor de tupla
SELECT <atributos y funciones> Tambin hay
WHERE DIRECTOR.FECHA_INICIO > FROM <tablas>
HAVING, que
este curso no
CAST(EMPLEADO.FECHA_ALTA_SS [WHERE <condicin>] estudiaremos
AS DATE); [GROUP BY <atributos agrupacin>]
[ORDER BY <atributos ordenacin>]
Convierte el campo FECHA_ALTA_SS a tipo
DATE

Una consulta SQL se evala conceptualmente as:


Una sola comparacin 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 Mara, 18, S)
Si no hay GROUP BY ni ORDER BY, para cada
combinacin de tuplas (una de cada tabla de
equivale a:
FROM), se evala la condicin de WHERE. Si es
WHERE NOMBRE= Jos Mara 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 evaluacin.
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

Anlisis 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 tcnica que le en CREATE TABLE
resulte ms cmoda.
A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, NSS)
Desde el punto de vista de optimizacin de VALUES (Richard, Marini, 653298653)
consultas, conviene que las consultas tengan el As los atributos con valor NULL o DEFAULT se
menor anidamiento y el menor ordenamiento pueden omitir
implcito posible. Los valores de VALUES en el mismo orden que se
especifican los atributos en INSERT INTO
Desventaja: el programador puede desconocer Tambin se pueden incluir varias tuplas en la misma
cul es la tcnica ms eficiente en cada caso instruccin: INSERT ... INTO ... VALUES (tupla1), (tupla2),
... (tuplaN)
Idealmente, el SGBD debera procesar la consulta
de la misma manera sin importar cmo se haya A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND)
escrito. VALUES (Robert, Hatcher, 980760540, 2)
Rechazada por la inexistencia del departamento
En la prctica esto resulta muy difcil, y es nmero 2
conveniente que el usuario sea consciente de qu
A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND)
construcciones tienen un costo ms elevado que
VALUES (Robert, Hatcher, 5)
otras.
Rechazada por no proporcionar valor para NSS
(clave primaria: NOT NULL)

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
NM_DE_EMPS INTEGER, Una sola tabla
SAL_TOTAL INTEGER);
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) A4B: DELETE FROM EMPLEADO
FROM DEPARTAMENTO INNER JOIN EMPLEADO WHERE NSS=123456789
ON NMEROD=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 NMEROD
Sus datos pueden perder actualidad FROM DEPARTAMENTO
Alternativa sin este problema: vista 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 Vistas en SQL

A5: UPDATE PROYECTO Una vista es una tabla derivada de otras tablas (que
SET LOCALIZACINP=Bellaire, NMD=5 pueden ser tablas de base u otras vistas).
WHERE NMEROP=10
Tipos de vista:
Una sola tabla
Tabla virtual: se calcula, no se almacena en la
WHERE: seleccin de tuplas a modificar BD. Siempre est al da: sus tuplas se crean
SET: atributos a modificar y nuevos valores cuando se realiza una consulta sobre la vista.
SET: el nuevo valor puede ser NULL o DEFAULT Vista materializada: se crea una fsicamente una
Modificaciones de clave primaria pueden tabla cuando se consulta por primera vez. Se
propagarse a clave/s extranjera/s (debido a las pueden hacer sucesivas consultas sobre esa tabla.
acciones declaradas en la RI, como CASCADE) Hay tcnicas para mantener la vista actualizada de
forma incremental.
Ejemplo de creacin de la vista TRABAJA_EN_1:
A6: UPDATE EMPLEADO CREATE VIEW TRABAJA_EN_1
SET SALARIO=SALARIO*1.1 AS SELECT NOMBRE, APELLIDO, NOMBREP, HORAS
WHERE ND IN (SELECT NMEROD FROM (EMPLEADO INNER JOIN TRABAJA_EN ON
NSS=NSSE) INNER JOIN PROYECTO ON NP=NUMEROP
FROM DEPARTAMENTO
WHERE NOMBRED= Investigacin) La vista se puede usar en consultas:
SELECT NOMBRE, APELLIDO
A la izda se refiere al nuevo valor de SALARIO
FROM TRABAJA_EN_1
A la dcha al valor antiguo WHERE NOMBREP=ProyectoX
Para borrar una vista: DROP VIEW TRABAJA_EN_1
Una vista tiene limitaciones para actualizar sus tuplas
como si fuese una tabla, ya que puede corresponder a
varias actualizaciones de las tablas de base.

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 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

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 DIRECCIN ...
... 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 NMEROD NSS_JEFE FECHA_INIC_JEFE
a) Empleados del departamento 5 que trabajan ms de
LOCALIZACIONES_DEPT 10 horas/semana en el proyecto Producto X
NMEROD LOCALIZACIND
b) Empleados con un dependiente con su mismo nombre
PROYECTO de pila
NOMBREP NMEROP LOCALIZACINP NMD
c) Empleados cuyo jefe directo es Franklin Wong
TRABAJA_EN d) Nombre de cada proyecto junto al nmero 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 ms de 10 f) Empleados que no trabajan en ningn proyecto
horas/semana en el proyecto Producto X
g) Nombre de cada departamento junto al salario medio
b) Nombre de cada proyecto junto al nmero 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 compaa
todos y cada uno de los proyectos i) Nombre y direccin de los empleados que trabajan en
d) Empleados que no trabajan en ningn proyecto algn proyecto situado en Houston pero
e) Nombre y direccin de los empleados que trabajan en departamento no est situado all
algn 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 Cdigo AsigNom Curso Crditos SuDpto Asignatura Cdigo AsigNom Curso Crditos SuDpto

AlumAsig Alum Asig Nota Convocatoria Cdigo AlumAsig Alum Asig Nota Convocatoria Cdigo

Alumno DNI AlumNom Tfno Ciudad Edad Alumno DNI AlumNom Tfno Ciudad Edad

a) Por cada curso, obtener el alumno con mejor nota media g) Nombre de los alumnos que han obtenido como nota
en las asignaturas de este curso. SOBRESALIENTE en al menos dos asignaturas de
cualquiera de los cursos en los que hayan estado
b) Obtener el DNI de los alumnos que estn limpios en
matriculados (sin utilizar funciones agregadas).
3 curso, es decir, que estn matriculados en 3 y tienen
aprobadas todas las asignaturas de cursos inferiores. h) Obtener, sin usar funciones agregadas, el nombre de
los alumnos que estn matriculados slo de
c) DNI de los alumnos que estn matriculados de
asignaturas del departamento DMC.
ALGUNA asignatura de tercero y tienen aprobadas
TODAS las asignaturas de segundo. i) Obtener, sin usar funciones agregadas, el nombre de
los alumnos matriculados en alguna asignatura de
d) Obtener el DNI de los alumnos matriculados en al
tercer curso que no tengan ninguna matrcula en
menos una asignatura de cada uno de los departamentos
asignaturas de segundo curso.
de Informtica.
j) Para cada asignatura del departamento DMC con ms
e) Obtener el nombre de los alumnos que estn
de 10 alumnos matriculados, obtener el cdigo de la
matriculados en sexta convocatoria en al menos dos
asignatura y el nmero de convocatoria media en la
asignaturas (sin utilizar funciones agregadas).
que se encuentran los alumnos de Arnedo
f) Obtener el DNI de los alumnos que estn matriculados
k) Obtener el nombre de los alumnos de Njera mayores
de todas las asignaturas de 3 y de alguna otra asignatura
de 20 aos que se encuentran matriculados en alguna
de cursos inferiores.
asignatura de tercero
A. Jaime 2003 DBD Tema 4 73 A. Jaime 2003 DBD Tema 4 74

Solucin 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)
R3TODOS_PRY - R2
R4 R5
NOMBRE NSS ND NUMD NOMD NOMBRE NOMD
Iker 11 1 1 LSI Iker LSI
Ana 22 1 1 LSI Ana LSI
Jon 33 2 2 ATC Jon ATC
Karmele 44 2 2 ATC Karmele ATC

R4 EMP || ND=NNUMD DEP


R5 NOMBRE, NOMD (R4)

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


Solucin consultas lgebra relacional
Solucin Operaciones del lgebra (2) EMPRESA
(Elmasri/Navathe 7.18)
EMP DEP PROY TRAB a) Empleados del departamento 5 que trabajan ms 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) NMEROP(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 nmero total de
PERS_PRY R6 * PRY
horas trabajadas por los empleados en l.
R7 NOMBRE, NOMP(PERS_PRY)
PROY_NOM PROYECTO ||NMEROP=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

Solucin consultas EMPRESA (2) Solucin consultas EMPRESA (3)


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

e) Nombres de todos los empleados que trabajan en cada i) Nombre y direccin de los empleados que trabajan en
uno de los proyectos algn proyecto situado en Houston pero cuyo
PRY_EMPS(NOMP,NSS) NOMBREP, NSSE( departamento no est situado all
Todos los pro-
los empleados
yectos junto a

en cada uno
que trabajan

PROYECTO ||NMEROP=NP TRABAJA_EN)) PRY_HOUSTON NMEROP, NMD(LOCALIZACINP=Houston


R5 NOMP, NOMBRE, APELLIDO(PRY_EMPS * EMPLEADO) (PROYECTO))
DPT_HOUSTON NMEROD(LOCALIZACIND =Houston (LO-
CALIZACIONES_DEPTOS))
PROYS(NP) NMEROP(PROYECTO) (1)
Los que trabajan

TODOS_DPTOS NMEROD(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) NMEROP(PRY_HOUSTON
||NMD=NMEROD DPT_NO_HOUSTON)
f) Empleados que no trabajan en ningn proyecto EMP_BUSCADOS(NSS) NSSE(TRABAJA_EN * PRY_BUS-
CADOS)
EMP_PROY(NSS) NSSE(TRABAJA_EN)
R9 NOMBRE, APELLIDO, DIRECCIN(EMPLEADO *
EMPS NSS(EMPLEADO) EMPS_BUSCADOS)
Puede haber departamentos que estn
EMPS_SIN_PRY EMPS - EMP_PROY en lugares distintos a Houston
(1) NO se puede calcular as: y que tambin estn en Houston
R6 NOMBRE, APELLIDO(EMPLEADO* EMPS_SIN_PRY)
DPT_NO_HOUSTON NMEROD(LOCALIZACIND 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 ||NMEROD=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 vlida ||NSS=NSSE DEPENDIENTE))
A. Jaime 2003 DBD Tema 4 79 A. Jaime 2003 DBD Tema 4 80

También podría gustarte