Sunteți pe pagina 1din 20

Conceptos Anexo al tema 4.

Repaso de lgebra relacional y SQL


El modelo de datos relacional, las restricciones relacionales y el lgebra relacional Elmasri/Navathe 02 El estndar de las Bases de Datos Relacionales
Elmasri/Navathe 02

BD: coleccin de relaciones Relacin:

ALUMNO Nombre CdigoAlumno Ao Especialidad Smith 17 1 CS Brown 8 2 CS


Columna = Atributo

Valores columna mismo domino

Fila= Tupla

Modelo relacional: conceptos, restricciones, operaciones de actualizacin y operaciones del lgebra Revisin de SQL

Relacin = conjunto de tuplas (no tienen sentido tuplas duplicadas) Dominios atmicos: ni compuestos ni multivaluados Esquema de relacin R(A1, ... , An): intensin Relacin (o estado de relacin) r r(R): extensin r={t1, t2, . . ., tm}: conjunto de tuplas Cada valor vi de un ti 1i n es: un elemento de dom(Ai) o un valor nulo

Orden entre las tuplas: no se considera Orden en los valores de una tupla: es una lista ordenada de n valores. Lo importante es la correspondencia atributo-valor
DBD Tema 4 2

A. Jaime 2003

DBD Tema 4

A. Jaime 2003

Esquema de la BD EMPRESA Restricciones relacionales


De dominio: valor atmico de un tipo De clave: atributo(s) que identifica(n) unvocamente a las tuplas. Superclave y clave Clave candidata y clave primaria Integridad de entidades:ninguna clave primaria puede contener el valor nulo Integridad referencial: Una tupla que referencia a otra (de la misma u otra relacin), debe referirse a una tupla existente en dicha relacin Se hace referencia a otra tupla mediante una clave extranjera (fornea, externa). Conjunto de atributos no vaco. Puede contener valor nulo.
Clave extranjera Clave extranjera DEPENDIENTE NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO

con restricciones de integridad referencial

EMPLEADO NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

...

... SEXO
DEPARTAMENTO

SALARIO NSS_SUPERV ND

NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE LOCALIZACIONES_DEPT NMEROD LOCALIZACIND PROYECTO NOMBREP NMEROP LOCALIZACINP NMD TRABAJA_EN NSSE NP HORAS

EMPLEADO NOMBRE INIC APELLIDO NSS John B Smith 123456789 Franklin T Wong 333445555 Alicia J Zelaya 999887777 Jennifer S Wallace 987654321 Ramesh K Narayan 666884444 Joyce A English 453453453 Ahmad V Jabbar 987987987 James E Borg 888665555 DEPARTAMENTO NOMBRED NMEROD Investigacin 5 Administracin 4 Direccin 1
A. Jaime 2003

...

NSS_SUPERV ND 333445555 5 888665555 5 987654321 4 888665555 4 333445555 5 333445555 5 987654321 4 nulo 1

Figura 7.7 restricciones de integridad referencial representadas en el esquema de la base de datos relacional EMPRESA

NSS_JEFE 333445555 987654321 888665555

FECHA_INIC_JEFE 1988-05-22 1995-01-01 1981-06-19 3


A. Jaime 2003

DBD Tema 4

DBD Tema 4

Estado de la BD relacional EMPRESA


EMPLEADO NOMBRE INIC APELLIDO John Franklin Alicia Jennifer Ramesh Joyce Ahmad James B T J S K A V E Smith Wong Zelaya Wallace Narayan English Jabbar Borg NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555
FECHA_NCTO

Estado de la BD relacional EMPRESA (cont)


LOCALIZACIONES_DEPT

DIRECCIN
731 Fondren, Houston, TX 638 Voss, Houston, TX 3321 Castle, Spring, TX 291 Berry, Bellaire, TX 975 Fire Oak, Humble, TX 5631 Rice, Houston, TX 980 Dallas, Houston, TX 450 Stone, Houston, TX

1965-01-09 1955-12-08 1968-07-19 1941-06-20 1962-09-15 1972-07-31 1969-03-29 1937-11-10

...

NMEROD 1 4 5 5 5 PROYECTO NOMBREP ProductoX ProductoY ProductoZ Automatizacin Reorganizacin Nuevos beneficios DEPENDIENTE

LOCALIZACIND Houston Stafford Bellaire Sugarland Houston

TRABAJA_EN NSSE 123456789 123456789 666884444 453453453 453453453 333445555 333445555 333445555 333445555 999887777 999887777 987987987 987987987 987654321 987654321 888665555 NP 1 2 3 1 2 2 3 10 20 30 10 10 30 30 20 20 HORAS 32.5 7.5 40.0 20.0 20.0 10.0 10.0 10.0 10.0 30.0 10.0 35.0 5.0 20.0 15.0 nulo

SEXO SALARIO NSS_SUPERV ND H H M M H M H H 30.000 40.000 25.000 43.000 38.000 25.000 25.000 55.000 333445555 888665555 987654321 888665555 333445555 333445555 987654321 nulo 5 5 4 4 5 5 4 1

NMEROP LOCALIZACINP NMD 1 2 3 10 20 30 Bellaire Sugarland Houston Stafford Houston Stafford 5 5 5 4 1 4

...

Figura 7.6 (1 parte) Un posible estado de la base de datos relacional del esquema EMPRESA

NSSE 333445555 333445555 333445555 987654321 123456789 123456789 123456789

NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO

Alice Theodore Joy Abner Michael Alice Elizabeth

M H M H H M M

1986-04-05 1983-10-25 1958-05-03 1942-02-28 1988-01-04 1988-12-30 1967-05-05

HIJA HIJO ESPOSA ESPOSO HIJO HIJA ESPOSA

DEPARTAMENTO NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE Investigacin Administracin Direccin


A. Jaime 2003

5 4 1

333445555 987654321 888665555 DBD Tema 4

1988-05-22 1995-01-01 1981-06-19 5

Figura 7.6 (2 parte) Un posible estado de la base de datos relacional del esquema EMPRESA
A. Jaime 2003

DBD Tema 4

Operaciones de actualizacin y violacin de las RI


Operaciones de actualizacin: Insertar Eliminar Actualizar (modificar) Cuando se aplican no deben violar ninguna RI Insertar y actualizar pueden violar los 4 tipos de RI Eliminar slo puede violar la I. Referencial En SQL se pueden definir acciones asociadas a la violacin de RI (ejemplo. ON UPDATE CASCADE)

lgebra relacional
Operaciones para manipular relaciones enteras Permiten especificar consultas (recuperacin de datos) El resultado de una consulta es otra relacin Operaciones especficas del lgebra relacional:
SELECCIONAR PROYECTAR REUNIN (JOIN)

Unarios Binario

Operaciones de teora de conjuntos:


UNIN INTERSECCIN DIFERENCIA PRODUCTO CARTESIANO

Binarios

Otras operaciones:
DIVISIN FUNCIONES AGREGADAS Y DE AGRUPACIN Etc.

A. Jaime 2003

DBD Tema 4

A. Jaime 2003

DBD Tema 4

Seleccionar:
EMPLEADO NOMBRE INIC APELLIDO John Franklin Alicia Jennifer Ramesh Joyce Ahmad James B T J S K A V E Smith Wong Zelaya Wallace Narayan English Jabbar Borg NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555 NSS_SUPERV ND 333445555 888665555 987654321 888665555 333445555 333445555 987654321 nulo 5 5 4 4 5 5 4 1 EMPLEADO NOMBRE INIC APELLIDO John Franklin Alicia Jennifer Ramesh Joyce Ahmad James B T J S K A V E Smith Wong Zelaya Wallace Narayan English Jabbar Borg

Proyectar:
NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555

SEXO SALARIO NSS_SUPERV ND

...

...

H H M M H M H H

30.000 40.000 25.000 43.000 38.000 25.000 25.000 55.000

333445555 888665555 987654321 888665555 333445555 333445555 987654321 nulo

5 5 4 4 5 5 4 1

= sigma ND=4(EMPLEADO)
NOMBRE INIC APELLIDO Alicia Jennifer Ahmad J S V Zelaya Wallace Jabbar NSS 999887777 987654321 987987987 NSS_SUPERV ND 987654321 888665555 987654321 4 4 4

SEXO, SALARIO(EMPLEADO) ...


SEXO SALARIO 30.000 H H 40.000 25.000 M 43.000 M H 38.000 H 25.000 H 55.000

El (M, 25.000) duplicado se ha eliminado

Fig 7.8 (c)

Selecciona un subconjunto de filas (tuplas) de una relacin Las que satisfacen una condicin Condicin: {=, <, , >, , } Y, O, NO El resultado es otra relacin

Selecciona las columnas especificadas de una relacin (desechando el resto de columnas) El resultado es otra relacin Eliminacin de duplicados <LISTA1> (<LISTA2> (R)) = <LISTA1> (R) No es conmutativa
DBD Tema 4 10

Conmutativa: <COND1>( <COND2>(R) ) = <COND2>( <COND1>(R) )

<COND1>( <COND2>(R) ) = <COND1> Y <COND2>(R)


A. Jaime 2003

DBD Tema 4

A. Jaime 2003

Renombrar y resultados intermedios


EMPLEADO
NOMBRE INIC APELLIDO John Franklin Alicia Jennifer Ramesh Joyce Ahmad James B T J S K A V E Smith Wong Zelaya Wallace Narayan English Jabbar Borg NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555 SALARIO NSS_SUPERV ND 30.000 40.000 25.000 43.000 38.000 25.000 25.000 55.000 333445555 888665555 987654321 888665555 333445555 333445555 987654321 nulo 5 5 4 4 5 5 4 1

Unin, interseccin y diferencia


ALUMNO NOM Susan Ramesh Johnny Brbara Amy Jimmy Ernest APEL Yao Shah Kohler Jones Ford Wang Gilbert PROFESOR NOMBRE APELLIDO John Smith Ricardo Browne Susan Yao Francis Johnson Ramesh Shah ALUMNO PROFESOR NOM APEL Susan Yao Ramesh Shah Johnny Kohler Brbara Jones Amy Ford Jimmy Wang Ernest Gilbert John Smith Ricardo Browne Francis Johnson

...

Resultado intermedio
TEMP

ND=5(EMPLEADO)
NSS 123456789 333445555 666884444 453453453 SALARIO NSS_SUPERV ND B T K A Smith Wong Narayan English

ALUMNO PROFESOR NOM Susan Ramesh APEL Yao Shah

NOMBRE INIC APELLIDO John Franklin Ramesh Joyce

...

30.000 40.000 38.000 25.000

333445555 888665555 333445555 333445555

5 5 5 5

Renombre de atributos
R(NOMBRE_PILA, PRIMER_APELL, SALARIO) NOMBRE,APELLIDO,SALARIO(TEMP)
NOMBRE_PILA PRIMER_APELL SALARIO John Franklin Ramesh Joyce Smith Wong Narayan English 30.000 40.000 38.000 25.000

PROFESOR ALUMNO NOMBRE APELLIDO John Smith Ricardo Browne Francis Johnson

...

Compatibilidad con la unin: ambas relaciones deben tener el mismo nmero de atributos y cada par de atributos correspondientes pertenecer al mismo dominio
conmutativas asociativas no conmutativa R S = S R (R S) T = R (S T) R S S R R S = S R (R S) T = R (S T)
A. Jaime 2003

Alternativa sin resultados intermedios o renombre de atributos NOMBRE, APELLIDO, SALARIO(ND=5(EMPLEADO))


A. Jaime 2003

DBD Tema 4

11

DBD Tema 4

12

Producto Cartesiano: (CROSSJOIN)

Reunin (JOIN): ||
EMP

APELLIDO, NSS, ND(EMPLEADO)


NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555 ND 5 5 4 4 5 5 4 1

PR_STAF NOMBREP Automatizacin Nuevos beneficios

DP_STAF NOMBRED Administracin Mantenimiento NMEROD 4 8

APELLIDO Smith Wong Zelaya Wallace Narayan English Jabbar Borg

R PR_STAF DP_STAF NOMBREP Automatizacin Automatizacin Nuevos beneficios Nuevos beneficios NOMBRED Administracin Mantenimiento Administracin Mantenimiento NMEROD 4 8 4 8

DPT

NOMBRED, NSS_JEFE(DEPARTAMENTO)
NSS_JEFE

NOMBRED

Relaciones: no han de ser compatibles con la unin R(A1,...,An) S(B1,...,Bm) = Q(A1,...,An, B1,...,Bm) donde R tiene n tuplas y S m tuplas Q tiene n* m tuplas Q consta de todas las combinaciones de cada tupla de R seguida de otra de S

Investigacin 333445555 Administracin 987654321 Direccin 888665555

JEFE_DTO DPT

|| NSS_JEFE=NSS EMP
NSS ND Wong Wallace Borg 333445555 5 987654321 4 888665555 1

NOMBRED NSS_JEFE APELLIDO Investigacin 333445555 Administracin 987654321 Direccin 888665555

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)


Relaciones: no han de ser compatibles con la unin R(A1,...,An) ||COND S(B1,...,Bm) = Q(A1,...,An, B1,...,Bm) donde R tiene n tuplas y S m tuplas Q tiene un mximo de n* m tuplas Q consta de todas las combinaciones de cada tupla de R seguida de otra de S, que satisfagan la condicin de reunin COND R y Q pueden ser el mismo conjunto Si ninguna combinacin cumple la condicin COND el resultado es una relacin vaca (sin tuplas) Condicin COND: Se evala para cada combinacin de tuplas tiene la forma: <subcondicin> Y <subcondicin> Y ... Y <subcondicin> Cada subcondicin tiene la forma: Ai Bj donde Ai R y Bj S y {=, <, , >, , }

Tipos de reunin (JOIN)


Reunin Theta: Cualquier reunin Las tuplas cuyo atributo de reunin sea nulo NO aparecen en el resultado Equirreunin (equijoin): slo comparaciones de igualdad en COND El resultado siempre tiene pares de atributos con valores idnticos en todas las tuplas Reunin natural (join natural): equirreunin seguida de la eliminacin de atributos superfluos. COND implcita: igualdades de todos los pares de atributos de igual nombre Exige algn par de atributos de igual nombre Se identifica con *

A. Jaime 2003

DBD Tema 4

15

A. Jaime 2003

DBD Tema 4

16

Ejemplo de reunin natural: *


PRY

Divisin:
Ejemplo: R N D
X

NOMBREP, NMD(PROYECTO)

N
B A

NOMBREP NMD ProductoX 5 ProductoY 5 ProductoZ 5 Automatizacin 4 Reorganizacin 1 Nuevos beneficios 4


DPT(NOMBRED, NMD)

NOMBRED, NMEROD(DEPARTAMENTO)
NMD 5 4 1 Tiene que haber al menos un par de atributos con el mismo nombre Desaparece un NMD

NOMBRED Investigacin Administracin Direccin

b1 b1 b1 b1 b2 b2 b3 b3 b3 b4 b4 b4

a1 a2 a3 a4 a1 a3 a2 a3 a4 a1 a2 a3

D
A

R
B

a1 a2 a3

b1 b4

X cjto. de atributos de N Y cjto. de atributos de D Z cjto. de atributos de R t[X] valores de los atributos del cjto X en la tupla t

DEPTO_PROY PRY * DPT NOMBREP NMD NOMBRED

ProductoX ProductoY ProductoZ Automatizacin Reorganizacin Nuevos beneficios


A. Jaime 2003

5 5 5 4 1 4

Investigacin Investigacin Investigacin Administracin Direccin Administracin


17

Para cada atributo de D debe haber otro en N de igual nombre: Y X El resultado tiene los atributos de N que NO estn en D: Z=X - Y Son tuplas del resultado, tR, las que cumplen: La combinacin de valores de t est en alguna tupla de N Esa combinacin de valores de t se encuentra en tuplas de N junto todas y cada una de las combinaciones de valores de las tuplas de D Es decir, tR si y solo si : tD D tN N tal que ( t = tN[Z] tD = tN[Y] )
DBD Tema 4 18

DBD Tema 4

A. Jaime 2003

Divisin: (2)
La divisin sirve para construir consultas como la siguiente: Obtener el NSS de los empleados que trabajan en todos y cada uno de los proyectos en los que trabaja el empleado con NSS=123456789. NSSE , NMP(TRABAJA_EN) NMP(NSSE=123456789 (TRABAJA_EN))
NMS_PRY NMP 1 2

Funciones agregadas
MXIMO, MNIMO y CUENTA)

(SUMA, PROMEDIO,

y de agrupacin

EMP
NSS 123456789 333445555 999887777 987654321 666884444 453453453 987987987 888665555 SALARIO 30.000 40.000 25.000 43.000 38.000 25.000 25.000 55.000

En general, los valores duplicados tambin se consideran en los clculos En SQL se puede poner para ello, por ejemplo:
COUNT(DISTINCT SALARIO)

NSS_NMS_PRY

NMS_PRY NSS_NMS_PRY NSSE 123456789 123456789 666884444 453453453 453453453 333445555 333445555 333445555 333445555 999887777 999887777 987987987 987987987 987654321 987654321 888665555 NMP 1 2 3 1 2 2 3 10 20 30 10 10 30 30 20 20

NSSS NSS 123456789 453453453

R1

CUENTA NSS, PROMEDIO SALARIO(EMP)


8 35125

CUENTA_NSS PROMEDIO_SALARIO

R2
NSSS(NSS) NSS_NMS_PRY NMS_PRY

PROMEDIO SALARIO(EMP)
35125

PROMEDIO_SALARIO

Proyectos en los que trabaja el empleado con NSS = 123456789

El resultado es una relacin, aunque se trate de una sola tupla con un solo atributo

R3 ND CUENTA NSS, PROMEDIO SALARIO(EMP) ND CUENTA_NSS PROMEDIO_SALARIO 5 4 33250 4 3 31000 1 1 55000

Todas las parejas NSS de 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 y valor nulo


EMP NSS NOM 11 Alfredo 22 Ana 33 Juan 44 Federico 55 Ana DPTO LSI ATC nulo NOM Alfredo Ana Juan Federico DPTO LSI LSI ATC nulo LSI

Reunin externa
EMPAPELLIDO, NSS(EMPLEADO)
APELLIDO NSS Smith 123456789 Wong 333445555 Zelaya 999887777 Wallace 987654321 Narayan 666884444 English 453453453 Jabbar 987987987 Borg 888665555

DEPNOMBRED, NSS_JEFE(DEPARTAMENTO)
NOMBRED NSS_JEFE Investigacin 333445555 Administracin 987654321 Direccin 888665555

R1DPTO CUENTA NOM(EMP)


CUENTA_NOM

3 1 1

NO cuenta los valores diferentes en el campo NOM para un mismo DPTO, sino cuntas tuplas tienen valor asignado en NOM para un mismo valor de DPTO S considera el nulo como valor de agrupacin NO considera en la cuenta (o en el promedio, suma, ...) los valores nulos que pueda haber

Reunin externa izquierda R ]| S

R2NOM CUENTA DPTO(EMP)


CUENTA_DPTO

R APELLIDO, NOMBRED( EMP ]|NSS=NSS_JEFE DEP)


APELLIDO NOMBRED Smith nulo Wong Investigacin Zelaya nulo Wallace Administracin Narayan nulo English nulo Jabbar nulo Borg Direccin

1 2 1 0

Permite especificar una combinacin de atributos de agrupacin

R3NOM, DPTO CUENTA NSS(EMP)


NOM Alfredo Ana Juan Federico DPTO LSI LSI ATC nulo
CUENTA_NSS

Conserva todas las tuplas de EMP aunque sea rellenando todos los campos correspondientes a DEP con valores nulos

1 2 1 1
21

Reunin externa derecha R |[ S Reunin externa completa R ][ S


A. Jaime 2003

A. Jaime 2003

DBD Tema 4

DBD Tema 4

22

Ejemplos de consultas con lgebra relacional


EMPLEADO NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

Revisin de SQL
(Structured Query Language)

...

... SEXO
DEPARTAMENTO

SALARIO NSS_SUPERV ND

NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE TRABAJA_EN NSSE NP HORAS PROYECTO NOMBREP NMEROP LOCALIZACINP NMD

lgebra relacional orden de las operaciones SQL: lenguaje declarativo Se indica cul es el resultado esperado Permite que el SGBD seleccione las operaciones y el orden ms adecuados para obtener el resultado: optimizacin SGBD comerciales son variantes de SQL Estndares SQL: SQL1 1986, SQL2 1992 y SQL3 (extender SQL2 con conceptos recientes de BD y OO) SQL: Lenguaje de Definicin de Datos (LDD) Lenguaje de Manipulacin de Datos (LMD): consulta y actualizacin Definicin de vistas Especificacin de seguridad y autorizacin Definicin de restricciones de integridad Especificacin de control de transacciones Reglas para inclusin en lenguajes (C, PASCAL,...)

N de proyecto, n de departamento que lo controla, apellido, direccin y fecha de nacimiento del jefe del departamento de todos los proyectos realizados en Stafford PRYS_STAFF LOCALIZACINP=Stafford(PROYECTO) DPT_CONTR PRYS_STAFF || NMD=NMEROD
DEPARTAMENTO JEFE_DP_PRY DPT_CONTR || NSS_JEFE=NSS EMPLEADO RESULTADO NMEROP,NMD,APELLIDO,DIRECCIN,FECHA_NCTO (JEFE_DP_PRY)

Nombre de los empleados que trabajan en todos los proyectos del departamento 5. PRY_DP5 (NMP) NMEROP (NMD=5 (PROYECTO)) EMP_PRY(NSS,NMP) NSSE,NP (TRABAJA_EN) NSSS_EMP EMP_PRY PRY_DP5 RESULTADO APELLIDO, NOMBRE (NSSS_EMP * EMPLEADO)
DBD Tema 4 23

A. Jaime 2003

A. Jaime 2003

DBD Tema 4

24

Esquema y catlogo en SQL2


Atributos Atributos

Instruccin CREATE TABLE


Fig 8.1(a) No pueden tomar valor nulo CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, Clave primaria PRIMARY KEY(NUMEROD), Integridad de entidades UNIQUE(NOMBRED), Clave candidata FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ); Clave extranjera (o externa)

Esquema de BD: el trmino se incorpor en SQL2

CREATE SCHEMA Nombre [AUTHORIZATION Usuario];


Cuenta propietaria del esquema

Catlogo del SGBD: coleccin de esquemas en un entorno SQL Catlogo del SGBD
Esquema 1
Tablas
Restricciones

Atributos Atributos

Esquema 2

INFORMATION _SCHEMA

Restricciones Restricciones

Restricciones Restricciones (con nombre) (con nombre)

Elementos de un esquema

Vistas Dominios
Autorizaciones

...

Fig 8.1(b) CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD NSS_JEFE FECHA_INIC_JEFE INT CHAR(9) DATE, NOT NULL,

Valor por defecto

NOT NULL DEFAULT 888665555,

CONSTRAINT CLP_DPTO PRIMARY KEY(NUMEROD), CONSTRAINT CLS_DPTO UNIQUE(NOMBRED),

Esquema especial que da a los usuarios autorizados informacin de todos los esquemas del catlogo del SGBD

Restricciones de integridad (RI): slo entre relaciones del mismo catlogo del SGBD Esquemas del catlogo del SGBD: pueden compartir elementos (por ejemplo dominios)
A. Jaime 2003

se pone nombre a la RI, para poder cambiarla o eliminarla con ALTER y


DROP

CONSTRAINT CLE_JEFES_DPTO FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON DELETE SET DEFAULT ON UPDATE CASCADE ); Acciones: a realizar en caso de borrado (ON DELETE) o modificacin (ON UPDATE) del valor referenciado Constraint: CASCADE SET DEFAULT SET NULL RESTRICT (no poner ON UPDATE ON DELETE) DBD Tema 4 26

Opciones:

DBD Tema 4

25

A. Jaime 2003

CREATE TABLE: especificacin de restricciones y valores por omisin


Definicin de atributos:
NOT NULL:

CREATE TABLE: especificacin de restricciones y valores por omisin (2)


FOREIGN KEY (clave extranjera):

no se permite que el atributo tome valor nulo

DEFAULT un-valor: se indica qu valor tomar el atributo si no se le asigna nada. Si no se indica DEFAULT, el valor por defecto es el valor nulo

Especificacin de restricciones (tras las definiciones de atributo):


PRIMARY KEY: clave primaria UNIQUE: clave candidata FOREIGN KEY: clave extranjera

Se puede calificar con: ON DELETE: en caso de borrarse la tupla a la que se hace referencia con un valor de la clave extranjera ON UPDATE: en caso de modificarse el valor de clave primaria al que se hace referencia con el valor de clave extranjera
CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL DEFAULT 1, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, PRIMARY KEY(NUMEROD), UNIQUE(NOMBRED), FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON UPDATE CASCADE ON DELETE SET NULL );
A. Jaime 2003

Acciones posibles (en ON DELETE / ON UPDATE): SET NULL: el valor de clave extranjera en cuestin se sustituye por el valor nulo SET DEFAULT: el valor de clave extranjera en cuestin se sustituye por el valor por defecto del atributo clave extranjera CASCADE: en caso de ON DELETE se borran las tuplas que hacen referencia a la tupla que desaparece. En caso de ON UPDATE se aplica la misma modificacin en las claves extranjeras que la realizada sobre la clave primaria a la que hacen referencia. CASCADE es adecuada para: vnculos (TRABAJA_EN) atributos multivaluados (LOCALIZACIONES_DEPT) tipos de entidad dbiles (DEPENDIENTE) RESTRICT (cuando NO se pone ON DELETE / ON UPDATE): impide el borrado (si falta ON DELETE) o la modificacin (si falta ON UPDATE) de cualquier tupla referenciada desde un valor de la clave extranjera en cuestin.
CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL DEFAULT 1, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, PRIMARY KEY(NUMEROD), UNIQUE(NOMBRED), FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON UPDATE CASCADE ON DELETE SET NULL );

DBD Tema 4

27

A. Jaime 2003

DBD Tema 4

28

Borrar esquemas (DROP SCHEMA) y borrar tablas (DROP TABLE)


Borrar un esquema completo:
DROP SCHEMA EMPRESA CASCADE RESTRICT:borra el esquema slo si NO contiene

Evolucin del esquema: columnas


(ALTER TABLE)

Aadir columnas:
ALTER TABLE EMPRESA.EMPLEADO ADD PUESTO VARCHAR(12);

ningn elemento
CASCADE: borra el esquema y todos sus

En las tuplas existentes se asignan valores NULL. Alternativas: definir DEFAULT o introducir valores con
la orden UPDATE (se estudiar ms adelante) NOT NULL no est permitido

contenidos Borrar una tabla de un esquema:


DROP TABLE DEPENDIENTE CASCADE RESTRICT: borra la tabla slo si NO existen

Borrar columnas:
ALTER TABLE EMPRESA.EMPLEADO DROP DIRECCIN CASCADE; CASCADE

borra tambin las restricciones

(constraints) y vistas que hagan referencia a la

columna (DIRECCIN)
RESTRICT

referencias a la misma: Desde claves externa de otra tabla Desde alguna vista
CASCADE: borra tabla y todas las restricciones

slo borra la columna (DIRECCIN) si no hay restricciones ni vistas que le hagan referencia
ALTER TABLE EMPRESA.DEPARTAMENTO ALTER NSS_JEFE DROP DEFAULT; ALTER TABLE EMPRESA.DEPARTAMENTO ALTER NSS_JEFE SET DEFAULT 333445555;

Modificar la definicin de columnas:

(constraints) y vistas donde haya referencias a sta

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)


(ALTER TABLE)

Consultas bsicas
SELECT columnas FROM tablas [WHERE condicin]
La omisin de WHERE equivale a WHERE TRUE

Borrar restricciones:
ALTER TABLE EMPRESA.EMPLEADO DROP CONSTRAINT CLE_SUPERV_EMP;

Es preciso haberle dado un nombre con CONSTRAINT en la definicin (por ejemplo en CREATE TABLE) Aadir restricciones:
ALTER TABLE EMPRESA.EMPLEADO ADD CONSTRAINT CLE_SUPERV_EMP
FOREIGN KEY (NSS_SUPERV) REFERENCES EMPLEADO(NSS) ON DELETE SET NULL ON UPDATE CASCADE;

Condiciones en WHERE: {=, <>, <, >, <=, >=}, AND, OR, NOT El resultado puede contener TUPLAS REPETIDAS
EMPLEADO NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

...

...
DEPARTAMENTO

SEXO SALARIO NSS_SUPERV ND FECHA_INIC_JEFE

NOMBRED NMEROD NSS_JEFE

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 ||NMEROD=ND EMPLEADO

A. Jaime 2003

DBD Tema 4

31

A. Jaime 2003

DBD Tema 4

32

Calificar atributos y alias


EMPLEADO NOMBRE INIC APELLIDO NSS DEPARTAMENTO NOMBRE ND NSS_JEFE FECHA_INIC_JEFE

SELECT * ALL y DISTINCT ...


ND

...

DIRECCIN

Seleccionar todos los atributos de las tablas de FROM

C1A: SELECT * FROM EMPLEADO, DEPARTAMENTO WHERE NOMBRED=Investigacin AND ND=NMEROD

Nombre, apellido y direccin de los empleados del departamento de investigacin

Seleccionar todos los atributos de EMPLEADO

Calificando atributos:
C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIN FROM EMPLEADO, DEPARTAMENTO

C1Aiv: SELECT EMPLEADO.* FROM EMPLEADO, DEPARTAMENTO WHERE NOMBRED=Investigacin AND ND=NMEROD

WHERE DEPARTAMENTO.NOMBRE = Investigacin AND DEPARTAMENTO.ND=EMPLEADO.ND

Seleccionar todos los valores (incluidos los repetidos) de salario de EMPLEADO


Opcin por defecto

Utilizando alias:
C1A:SELECT E.NOMBRE, APELLIDO, DIRECCIN FROM
Declaracin de alias

C11:SELECT ALL SALARIO FROM EMPLEADO

Seleccionar todos los diferentes valores de salario de


EMPLEADO

EMPLEADO AS E, DEPARTAMENTO AS D
Uso de alias

WHERE D.NOMBRE = Investigacin AND D.ND=E.ND

C11A:SELECT DISTINCT SALARIO 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

UNION [ALL], INTERSECT [ALL] y EXCEPT [ALL]


Por defecto las tuplas repetidas se eliminan del resultado Con UNION ALL se conservan las repeticiones Se exige compatibilidad de unin
DEPARTAMENTO

LIKE +, -, *, / y ||
Empleados que viven en Houston, Texas:
C12: SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE DIRECCIN LIKE %Houston, TX%

% sustituye a un n arbitrario de caracteres _ sustituye a un solo carcter

EMPLEADO

...

APELLIDO NSS

...

NOMBRED NMEROD NSS_JEFE

...
EMPLEADO NOMBRE

TRABAJA_EN NSSE NP

PROYECTO

...

...

NMEROP

...

NMD

... APELLIDO ...

NSS

...

SALARIO

... ...

TRABAJA_EN NSSE NP

PROYECTO NOMBREP NMEROP

Nmeros de proyecto donde participa Smith como trabajador o como jefe del departamento controlador:
FROM PROYECTO, DEPARTAMENTO, EMPLEADO

C4: SELECT NUMEROP WHERE NMD=NMEROD AND NSS_JEFE=NSS AND APELLIDO=Smith UNION SELECT NP FROM TRABAJA_EN, EMPLEADO WHERE NSSE=NSS AND APELLIDO=Smith

Nombre y salario de los empleados que trabajan en ProductoX tras aumentarles el sueldo un 10% :

C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIO FROM EMPLEADO, TRABAJA_EN, PROYECTO WHERE NSS=NSSE AND NP=NMEROP AND NOMBREP=ProductoX

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
(ORDER BY)

BETWEEN y conjuntos explcitos de valores


BETWEEN: Informacin de los empleados cuyo salario est entre 30.000 y 40.000

EMPLEADO NOMBRE

TRABAJA_EN NSS

... APELLIDO

... ND ...

NSSE

NP

... ... NMD

DEPARTAMENTO NOMBRED NMEROD NSS_JEFE

PROYECTO NOMBREP NMEROP

SELECT * FROM EMPLEADO WHERE (SALARIO BETWEEN 30000 AND 40000)

Empleados y proyectos donde trabajan, ordenados por departamento y, dentro de cada departamento, ordenados alfabticamente por apellido y nombre :

Equivale a SALARIO >= 30000 AND SALARIO <= 40000

C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREP FROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN, PROYECTO WHERE NMEROD=ND, NSS=NSSE, NP=NMEROP ORDER BY NOMBRED, APELLIDO, NOMBRE

Conjuntos explcitos de valores: NSS de los empleados que trabajan en los proyectos 1, 2 o 3
C17: SELECT DISTINCT NSSE FROM TRABAJA_EN WHERE NP IN (1,2,3)

Por defecto, el orden es ascendente DESC indica orden descendente ASC indica orden ascendente El valor null tambin ocupa un orden entre los dems valores
ORDER BY NOMBRED DESC, APELLIDO ASC, NOMBRE ASC

A. Jaime 2003

DBD Tema 4

37

A. Jaime 2003

DBD Tema 4

38

Consultas anidadas
SELECT en la clusula WHERE de otra SELECT
TRABAJA_EN NSSE NP HORAS

Proceso de consultas anidadas


T1
A 1 2 3 4 Atributo de T1 SELECT A, B, C Atributo de T2 FROM T1 WHERE A IN ( SELECT A Atributo del SELECT externo FROM T2 WHERE G<6 AND F=T1.D )
Tuplas de T2 en resultado de subconsulta Resultado de subconsulta
T1.A=1

T2
C 5 3 4 2 D aaa aba bbe aeb E F G 1 aaa 2 2 aeb 3 3 aeb 8 4 aeb 5 5 aba 8 A 1 4 2 3 1

Informacin de los empleados que trabajan en algn proyecto en el que trabaje ms de 10 horas a la semana el empleado 123456789
SELECT NSSE FROM TRABAJA_EN WHERE NP IN (SELECT NP FROM TRABAJA_EN WHERE NSS=123456789 AND HORAS>10) Puede haber ms niveles de anidamiento

B bb ab cb ec

Algunas anidadas (como las que usan = e IN) se pueden escribir sin anidamientos:
SELECT T.NSSE FROM TRABAJA_EN AS T INNER JOIN TRABAJA_EN AS T_EMP ON T.NP=T_EMP.NP WHERE T_EMP.NSS=123456789 AND T_EMP.HORAS>10

T1
A 1 2 3 4 B bb ab cb ec C 5 3 4 2 D aaa aba bbe aeb

E F GA 1 aaa 2 1

A 1
RESULTADO

Se admite el uso de conjuntos explcitos de valores:


WHERE (NP,HORAS) IN (SELECT NP, HORAS FROM ...)

E F GA

A
T1.A=2

A B C 1 bb 5 4 ec 2

E F GA

Se compara un valor de atributo (o conjunto de atributos entre parntesis) con el conjunto de tuplas devueltas por la subconsulta
DBD Tema 4 39
A. Jaime 2003

T1.A=3

E F GA 2 aeb 3 4 4 aeb 5 3

A 4 3
DBD Tema 4

T1.A=4

A. Jaime 2003

40

IN, ALL y ANY (o SOME)


WHERE atributo(s) IN subconsulta WHERE atributo(s) = ANY subconsulta

EXISTS
Devuelve cierto si y slo si la subconsulta devuelve alguna tupla.
EMPLEADO NOMBRE DEPENDIENTE

Cierto si y slo si el valor del/de los atributo/s coincide con alguna tupla de la subconsulta WHERE atributo(s) < ANY subconsulta Cierto si y slo si el valor del/de los atributo/s es menor que alguna tupla de la subconsulta =, <, >, <=, >=, <> WHERE atributo(s) < ALL subconsulta Cierto si y slo si el valor del/de los atributo/s es menor que todas las tuplas de la subconsulta <, >, <=, >=, <> WHERE atributo(s) < subconsulta Cierto si y slo si el valor del/de los atributo/s es menor que la nica tupla de la subconsulta =, <, >, <=, >=, <>
SELECT DNI FROM EMPLEADO WHERE SALARIO (*) ( SELECT SALARIO FROM EMPLEADO) (*) < ALL <=ALL < ANY <= ANY Resultado 1 1, 2, 3, 5 1, 2, 3, 4, 5
41

... APELLIDO

NSS

...

NSSE NOMBRE

...

Empleados sin familiares dependientes:


SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE NOT EXISTS ( SELECT * FROM DEPENDIENTE WHERE NSS=NSSE)

NOTA
DNI 1 1 1 2 2 3 3 3 Asig 7984 7450 7540 7984 4544 7984 4544 7540 Nota 5 4,5 8,5 6 3 7,5 9 8 SELECT Nombre FROM ALUMNO AS A WHERE EXISTS ( SELECT * FROM NOTA WHERE Nota>=7 AND DNI=A.DNI)
Resultado de subconsulta

EMPLEADO
DNI SALARIO 1 100 2 150 3 175 4 200 5 160

ALUMNO
DNI Nombre 1 Jon 2 Ana 3 Leire

DNI Asig Nota 1 7540 8,5 DNI Asig Nota DNI 3 3 3 Asig Nota 7984 7,5 4544 9 7540 8

RESULTADO

Nombre Jon Leire

A. Jaime 2003

DBD Tema 4

A. Jaime 2003

DBD Tema 4

42

UNIQUE
Devuelve cierto si y slo si la subconsulta no devuelve tuplas duplicadas. Ejemplo:
SELECT A, B FROM T1 WHERE UNIQUE ( SELECT F FROM T2 WHERE G=T1.C )
Tuplas de T2 en resultado de subconsulta Resultado de subconsulta Transformacin de teora de conjuntos NSSE

Divisin en SQL
TRABAJA_EN NP PROYECTO

...

NP

...

NSS de aquellos empleados que trabajan en todos los proyectos de la empresa


Resultado(NSSE , NP TRABAJA_EN) (NP PROYECTO)
SELECT DISTINCT T1.NSSE FROM TRABAJA_EN AS T1 Todos los proyectos de la empresa WHERE NOT EXISTS ( ( SELECT NP FROM PROYECTO) EXCEPT ( SELECT NP FROM TRABAJA_EN AS T2 WHERE T1.NSSE = T2.NSSE) ) Todos los proyectos del empleado T1 SELECT DISTINCT T1.NSSE FROM TRABAJA_EN AS T1 WHERE NOT EXISTS ( ( SELECT NP FROM PROYECTO AS P Proyectos en WHERE NOT EXISTS ( SELECT * los que no 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
DBD Tema 4 44

T2
E F G 1 aaa 2 2 aeb 3 3 aba 8 4 aeb 5 5 aba 8 6 aeb 3

T1
A 1 2 3 4 B bb ab cb ec C 5 3 4 8

E F G 4 aeb 5 E F G 2 aeb 3 6 aeb 3 E F G E F G 3 aba 8 5 aba 8

F aeb F aeb aeb F F aba aba

RESULTADO
A 1 3 4 B bb cb ec

A. Jaime 2003

DBD Tema 4

43

A. Jaime 2003

Transformacin de clculo relacional

IS NULL e IS NOT NULL


Nombre y apellido de empleados sin supervisores
La tabla del null

Ejemplos con valor null


A True False Null B Null Null Null AND OR A NOT Null True Null Null Null Null Null Null

C18: SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE NSS_SUPERV IS NULL

Si pusiera WHERE NSS_SUPERV = NULL Para las filas con NSS_SUPERV nulo se estara comparando si NULL = NULL Esta comparacin NO devuelve cierto ni falso La comparacin devuelve NULL (UNKNOWN)
Una condicin puede NO verificarse por FALSE o por NULL

Cdigo de vendedor Ventas Cod Vendedor Vendido Cuota 1 Juan 1000 1000 2 Mara 1500 1000 3 Jess 500 Null 4 Ana 1000 1200 5 Aitor 1100 1000 6 Leire 2000 Null

SELECT Vendedor FROM Ventas SELECT Vendedor FROM Ventas WHERE Vendido>Cuota WHERE Vendido<=Cuota Vendedor Mara Aitor SELECT Vendedor, Cuota+500 AS X FROM Ventas Vendedor Juan Mara Jess Ana Aitor Leire Cuota 1500 1500 Null 1700 1500 Null Vendedor Juan Ana SELECT SUM(VD) AS V1, SUM(CU) AS V2 , (SUM(VD)SUM(CU)) AS V3, SUM(VD-CU) AS V4 FROM Ventas AS V(CD,VR,VD,CU) V1 V2 V3 V4 7100 4200 2900 400
DBD Tema 4 46

Cualquier cosa operada con NULL devuelve NULL


(UNKNOWN)

A. Jaime 2003

DBD Tema 4

45

A. Jaime 2003

Ejemplos con valor null (2)


Cdigo de vendedor Ventas Cod Vendedor Vendido Cuota 1 Juan 1000 1000 2 Mara 1500 1000 3 Jess 500 Null 4 Ana 1000 1200 5 Aitor 1100 1000 6 Leire 2000 Null SELECT SUM(CU) AS C1, COUNT(CU) AS C2 , COUNT(*) AS C3 FROM Ventas AS V(CD,VR,VD,CU) WHERE Vendido=500 OR Vendido=2000

Renombrar atributos del resultado con AS


C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO, S.APELLIDO AS NOMBRE_SUPERVISOR FROM EMPLEADO AS E, EMPLEADO AS S WHERE E.NSS_SUPERV = S.NSS

Cambia el nombre de cualquier columna (atributo) que aparezca en el resultado Antes hemos visto que la construccin AS tambin sirve para declarar alias de tablas:
FROM EMPLEADO E, ... EMPLEADO AS E, ... SQL1 SQL2

SELECT Cuota , COUNT(*) AS C1 FROM Ventas GROUP BY Cuota

FROM

SQL2

FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR, SEX, SAL, NSSS, ND), ...

SELECT VD, SUM(CU) AS V , COUNT(CU) AS C1, COUT(*) AS C2 FROM Ventas AS V(CD,VR,VD,CU) GROUP BY Vendido

A. Jaime 2003

DBD Tema 4

47

A. Jaime 2003

DBD Tema 4

48

Tablas combinadas
(INNER, NATURAL y OUTER JOIN en FROM)
EMPLEADO NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

Anidamiento de tablas combinadas ...


EMPLEADO

...
DEPARTAMENTO

...

APELLIDO NSS FECHA_NCTO DIRECCIN PROYECTO

...

SEXO SALARIO NSS_SUPERV ND DEPARTAMENTO FECHA_INIC_JEFE

NOMBRED NMEROD NSS_JEFE

... NMD

NSS_JEFE

...

...

NMEROP LOCALIZACINP NMD

Nombre y direccin de los empleados del departamento de Investigacin

C1: C1A: SELECT NOMBRE, APELLIDO, DIRECCIN FROM (EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NMEROD) WHERE NOMBRED=Investigacin

SELECT NMEROP, NMD, APELLIDO, DIRECCIN FECHA_NCTO FROM (PROYECTO NATURAL JOIN DEPARTAMENTO) INNER JOIN EMPLEADO ON NSS_JEFE=NSS WHERE LOCALIZACINP=Stafford

Este concepto se incorpor a SQL2 La consulta se entiende ms fcilmente, al evitar la mezcla de condiciones de || y en el WHERE Se pueden especificar diferentes tipos de reunin:
INNER JOIN (o JOIN), NATURAL JOIN, LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN y FULL [OUTER] JOIN

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
T1
A @ aa bb cc B null 1 2 3

UNION JOIN
Se puede considerar como una mezcla de FULL OUTER JOIN y UNION. Los atributos correspondientes con dominio compatible se tratan como en la unin. Los incompatibles, se tratan como en FULL OUTER JOIN. Utilidad limitada.
T1 T2 T3
A aa bb cc B aa ab bc C 1 2

T2
E F 000 null 100 1 101 1 200 2 400 4 SELECT * FROM T1 LEFT JOIN T2 ON B=F A B E F @ null null null aa 1 100 1 aa 1 101 1 bb 2 200 2 cc 3 null null

SELECT * FROM T1 INNER JOIN T2 ON B=F A B E F aa 1 100 1 aa 1 101 1 bb 2 200 2

T4
B a aa b D 1 2 3 A aa ab bb bc cc B aa ab bc null null B a aa ab b bc C null null null 1 2

Oracle: SELECT * FROM T1,T2 WHERE B=(+)F SQLServer:SELECT * FROM T1,T2 WHERE B*=F Oracle: ...WHERE B(+)=F SQLServer: ...WHERE B=*F SELECT * FROM T1 RIGTH JOIN T2 ON B=F A B E F null null 000 null aa 1 100 1 aa 1 101 1 bb 2 200 2 null null 400 4 Oracle: no lo implementa SQLServer: ...WHERE B*=*F SELECT * FROM T1 FULL JOIN T2 ON B=F A B E F @ null null null null null 000 null aa 1 100 1 aa 1 101 1 bb 2 200 2 cc 3 null null null null 400 4
DBD Tema 4 51

SELECT * FROM T1 UNION JOIN T2

SELECT * FROM T2 UNION JOIN T3

SELECT * FROM T2 UNION JOIN T4

D 1 2 null 3 null
52

A. Jaime 2003

A. Jaime 2003

DBD Tema 4

Funciones agregadas y de agrupacin


COUNT (cuenta), SUM (suma), MAX (mximo), MIN (mnimo), AVG (media) dominio con Con expresiones : AVG(1.1*SALARIO) orden total MAX y MIN tambin con atributos NO numricos

Funciones agregadas y de agrupacin (2)


Cuntos valores de salario diferentes hay:
NO cuenta los valores nulos

C23: SELECT COUNT(DISTINCT SALARIO) FROM EMPLEADO

Suma de salarios del dpto. Investigacin, junto a los salarios mximo, mnimo y medio:

Cuntos valores de salario hay (con repeticiones):


Cuenta las filas con salario NO nulo

C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO), AVG(SALARIO) FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NMEROD WHERE NOMBRED=Investigacin

C23: SELECT COUNT(SALARIO) FROM EMPLEADO

Cuntos empleados hay:


Cuenta todas las filas de la tabla

C23: SELECT COUNT(*) FROM EMPLEADO

N de empleados en el departamento Investigacin:

**se refiere aatuplas C22: SELECT COUNT(*) se refiere tuplas FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NMEROD WHERE NOMBRED=Investigacin
EMPLEADO NOMBREP John Franklin Ramesh Joyce Alicia Jennifer Ahmad James SALARIO NULL 15.000 10.000 10.000 10.000 20.000 20.000 20.000 ND 5 5 5 5 4 4 4 1 DEPARTAMENTO NOMBRED NMEROD Investigacin 5 Administracin 4 Direccin 1 C20

EMPLEADO NOMBREP John Franklin Ramesh Joyce Alicia Jennifer Ahmad James SALARIO NULL 15.000 10.000 10.000 10.000 20.000 20.000 20.000 ND 5 NULL 5 5 4 4 4 1

C23:
COUNT(DISTINCT SALARIO)

3 C23:
COUNT( SALARIO)

...

...

7 C23:
COUNT( *)

...

...

...

SUM(SA- MAX(SA- MIN(SA- AVG(SALLARIO) LARIO) LARIO) ARIO)

35.000
C22 COUNT(*)

15.000

10.000

11.666

Qu ocurre cuando todos los salarios valen NULL? Qu ocurre cuando la tabla est vaca?

4
A. Jaime 2003

35.000 / /33 35.000


53
A. Jaime 2003

DBD Tema 4

DBD Tema 4

54

Atributos de agrupacin: GROUP BY


Obtener por cada dpto. su nombre y nmero junto al nmero de empleados del mismo y el salario medio del dpto.:

HAVING
Para especificar una condicin en trminos del grupo de tuplas asociado a cada valor de los atributos de agrupacin
PROYECTO NOMBREP NP TRABAJA_EN

C24: SELECT NOMBRED, ND, COUNT(*) AS N_EMP, AVG(SALARIO) AS SAL_MED FROM EMPLEADO LEFT JOIN DEPARTAMENTO ON ND=NMEROD GROUP BY NOMBRED, ND

...

NMD

NSSE

NP

...

Todos los atributos de SELECT (que no son atributos de funciones) deben estar en GROUP BY Los atributos de GROUP BY no es obligatorio que estn en SELECT
EMPLEADO LEFT JOIN DEPARTAMENTO ON ND=NMEROD SALARIO 30.000 15.000 10.000 10.000 10.000 20.000 20.000 20.000 ND 5 5 5 5 4 4 4 1 NOMBRED Investigacin Investigacin Investigacin Investigacin Administracin Administracin Administracin Direccin C24:
NOMBRED ND N_EMP SAL_MED

Para cada proyecto con ms de 2 empleados, obtener su nmero, nombre y n de empleados


SELECT NP, NOMBREP, COUNT(*) FROM PROYECTO NATURAL JOIN TRABAJA_EN GROUP BY NP, NOMBREP HAVING COUNT(*)>2

...

...

...

...

Investigacin 5 Administracin 4 Direccin 1

4 3 1

16.250 16.666 20.000

EMPLEADO LEFT JOIN DEPARTAMENTO ON ND=NMEROD SALARIO NULL 10 10 10 ND NULL NULL 5 5 NOMBRED NULL NULL DMC DMC

Los valores nulos forman su propio grupo


C24:
NOMBRED ND N_EMP SAL_MED

...

...

...

...

NULL DMC

NULL 5

2 2

10 10

A. Jaime 2003

DBD Tema 4

55

A. Jaime 2003

DBD Tema 4

56

Primero WHERE, despus HAVING


N de empleados con salario>30.000 en cada dpto. Slo para dptos. con ms de 2 empleados con ese sueldo
SELECT NOMBRED, COUNT(*) FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND = NMEROD WHERE SALARIO>30.000 GROUP BY NOMBRED HAVING COUNT(*) > 2
EMPLEADO INNER JOIN DEPARTAMENTO: NOMBREP Jos Federico Ramn Josefa Alicia Jazmn Ahmed Jaime SALARIO 35.000 40.000 38.000 25.000 25.000 43.000 25.000 55.000 SALARIO ND 5 5 5 5 4 4 4 1 ND NOMBRED Investigacin Investigacin Investigacin Investigacin Administracin Administracin Administracin Direccin NOMBRED

GROUP BY con ORDER BY


Obtener por cada proyecto su nmero y nombre junto al nmero de empleados que trabajan en l, ordenado ascendentemente por el nmero de empleados

C25: SELECT NMEROP, NOMBREP, COUNT(*) FROM PROYECTO INNER JOIN TRABAJA_EN ON NMEROP=NP GROUP BY NMEROP, NOMBREP ORDER BY COUNT(*) ASC C25: SELECT NMEROP, NOMBREP, COUNT(*) AS NUM_EMP FROM PROYECTO INNER JOIN TRABAJA_EN ON NMEROP=NP GROUP BY NMEROP, NOMBREP ORDER BY NUM_EMP ASC

...

...

...

...

Primero se ejecuta WHERE

... NOMBREP INNER JOIN Jos ... WHERE Federico SALARIO >30.000: Ramn Jazmn Jaime

...

Despus se ejecuta HAVING

35.000 40.000 38.000 43.000 55.000

...

5 5 5 4 1

...

Investigacin Investigacin Investigacin Administracin Direccin

...
NO NO

NO se puede usar el nuevo nombre (AS) del atributo del resultado en ORDER BY

NOMBRED

COUNT(*)

Investigacin

A. Jaime 2003

DBD Tema 4

57

A. Jaime 2003

DBD Tema 4

58

CASE
SELECT NOMBRE, CASE WHEN ESTADOCIVIL=S THEN SOLTERO/A WHEN ESTADOCIVIL=C THEN CASADA/O WHEN ESTADOCIVIL=D THEN DIVORCIADO/A ELSE VIUDA/O END, EDAD, FECHA_NACIMIENTO FROM PERSONAS;

NULLIF y COALESCE
Operador NULLIF:
SELECT . . . FROM . . . WHERE BENEFICIO / NULLIF(COSTO, -1) >100

En los WHEN cualquier condicin (AND, OR, ...) Ahorro espacio almacenamiento: S/C/D/V frente a Soltero/Casado ...
SELECT NOMBRE, CASE ESTADO_CIVIL WHEN S THEN SOLTERO/A WHEN C THEN CASADA/O WHEN D THEN DIVORCIADO/A ELSE VIUDA/O END, EDAD, FECHA_NACIMIENTO FROM PERSONAS;

Cuando COSTO vale -1 NULLIF devuelve NULL La divisin tiene un comportamiento predefinido cuando el denominador sea NULL (el resultado es NULL)
WHERE BENEFICIO / CASE WHEN COSTO = -1 THEN NULL ELSE COSTO END >100 NULLIF

es una abreviatura de CASE

Operador COALESCE:
K1: SELECT NOMBRE, COALESCE(SUELDO, PARO, SALARIO_SOCIAL) AS SALARIO FROM DATOS_HACIENDA;

En los WHEN un valor posible del atributo


UPDATE EMPLEADO SET SUELDO = CASE DEPTO WHEN VIDEO THEN SUELDO*1.1 WHEN MSICA THEN SUELDO*1.2 ELSE 0 END;

Devuelve el primer valor NO nulo de la lista que sigue a la palabra COALESCE


DATOS_HACIENDA
NOMBRE SUELDO PARO SALARIO_SOCIAL

K1:
NOMBRE SALARIO

Matias Marta Maider

NULL NULL NULL 30.000 40.000 NULL

20.000 NULL NULL

Matias Marta Maider

20.000 30.000 40.000

A. Jaime 2003

DBD Tema 4

59

A. Jaime 2003

DBD Tema 4

60

CAST (conversin de tipos) y constructor de valor de tupla


WHERE DIRECTOR.FECHA_INICIO > CAST(EMPLEADO.FECHA_ALTA_SS AS DATE);

Anlisis de consultas SQL


SELECT <atributos y funciones> FROM <tablas> [WHERE <condicin>] [GROUP BY <atributos agrupacin>] [ORDER BY <atributos ordenacin>]
Tambin hay HAVING, que este curso no estudiaremos

Convierte el campo FECHA_ALTA_SS a tipo


DATE

Una sola comparacin incluye todos los valores de dos tuplas:


WHERE (NOMBRE,EDAD,ESTADO_CIVIL) = (Jos Mara, 18, S) equivale a: WHERE NOMBRE= Jos Mara AND EDAD=18 AND ESTADO_CIVIL=S

Una consulta SQL se evala conceptualmente as: Primero FROM, seguido de WHERE, en tercer lugar GROUP BY y por ltimo ORDER BY Si no hay GROUP BY ni ORDER BY, para cada combinacin de tuplas (una de cada tabla de FROM), se evala la condicin de WHERE. Si es cierta se colocan en el resultado los valores correspondientes a los atributos del SELECT. Esta NO es una forma eficiente de implementar una consulta SQL. As pues, cada SGBD tiene rutinas para optimizar la evaluacin.

WHERE (C1, C2, C3) < (T1, T2, T3) equivale a: WHERE C1<T1 OR (C1=T1 AND C2<T2) OR (C1=T1 AND C2=T2 AND C3<T3)

A. Jaime 2003

DBD Tema 4

61

A. Jaime 2003

DBD Tema 4

62

Anlisis de consultas SQL (2)


En SQL hay varias alternativas para especificar la misma consulta : Ventaja: el programador elige la tcnica que le resulte ms cmoda. Desde el punto de vista de optimizacin de consultas, conviene que las consultas tengan el menor anidamiento y el menor ordenamiento implcito posible. Desventaja: el programador puede desconocer cul es la tcnica ms eficiente en cada caso Idealmente, el SGBD debera procesar la consulta de la misma manera sin importar cmo se haya escrito. En la prctica esto resulta muy difcil, y es conveniente que el usuario sea consciente de qu construcciones tienen un costo ms elevado que otras.

INSERT
A1: INSERT INTO EMPLEADO 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 en CREATE TABLE


A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, NSS) VALUES (Richard, Marini, 653298653)

As los atributos con valor NULL o DEFAULT se pueden omitir Los valores de VALUES en el mismo orden que se especifican los atributos en INSERT INTO Tambin se pueden incluir varias tuplas en la misma instruccin: INSERT ... INTO ... VALUES (tupla1), (tupla2), ... (tuplaN)
A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND) VALUES (Robert, Hatcher, 980760540, 2)

Rechazada por la inexistencia del departamento nmero 2


A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND) VALUES (Robert, Hatcher, 5)

Rechazada por no proporcionar valor para NSS (clave primaria: NOT NULL)
A. Jaime 2003

A. Jaime 2003

DBD Tema 4

63

DBD Tema 4

64

INSERT (2)
A3A: CREATE TABLE INFO_DEPTOS ( NOMBRE_DEPTO VARCHAR(15), NM_DE_EMPS INTEGER, SAL_TOTAL INTEGER);

DELETE
A4A: DELETE FROM EMPLEADO WHERE APELLIDO=Brown

Una sola tabla WHERE: seleccin de tuplas a eliminar El borrado se puede propagar (RI referencial)

A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO, NM_DE_EMPS, SAL_TOTAL) SELECT NOMBRED, COUNT (*), SUM(SALARIO) FROM DEPARTAMENTO INNER JOIN EMPLEADO ON NMEROD=ND GROUP BY NOMBRED;

A4B: DELETE FROM EMPLEADO WHERE NSS=123456789

Inserta varias tuplas (el resultado de la consulta) Utilidad: tabla temporal donde realizar consultas Sus datos pueden perder actualidad Alternativa sin este problema: vista

A4C: DELETE FROM EMPLEADO WHERE ND IN (SELECT NMEROD FROM DEPARTAMENTO WHERE NOMBRED=Investigacin) A4D: DELETE FROM EMPLEADO

Sin WHERE se borran todas las tuplas (quedara la tabla vaca) Usando DROP TABLE se hubiera eliminado adems la definicin de la tabla

A. Jaime 2003

DBD Tema 4

65

A. Jaime 2003

DBD Tema 4

66

UPDATE
A5: UPDATE PROYECTO SET LOCALIZACINP=Bellaire, NMD=5 WHERE NMEROP=10

Vistas en SQL
Una vista es una tabla derivada de otras tablas (que pueden ser tablas de base u otras vistas). Tipos de vista: Tabla virtual: se calcula, no se almacena en la BD. Siempre est al da: sus tuplas se crean cuando se realiza una consulta sobre la vista. Vista materializada: se crea una fsicamente una tabla cuando se consulta por primera vez. Se pueden hacer sucesivas consultas sobre esa tabla. Hay tcnicas para mantener la vista actualizada de forma incremental. Ejemplo de creacin de la vista TRABAJA_EN_1:
CREATE VIEW TRABAJA_EN_1 AS SELECT NOMBRE, APELLIDO, NOMBREP, HORAS FROM (EMPLEADO INNER JOIN TRABAJA_EN ON NSS=NSSE) INNER JOIN PROYECTO ON NP=NUMEROP

Una sola tabla WHERE: seleccin de tuplas a modificar SET: atributos a modificar y nuevos valores SET: el nuevo valor puede ser NULL o DEFAULT Modificaciones de clave primaria pueden propagarse a clave/s extranjera/s (debido a las acciones declaradas en la RI, como CASCADE)

A6: UPDATE EMPLEADO SET SALARIO=SALARIO*1.1 WHERE ND IN (SELECT NMEROD FROM DEPARTAMENTO WHERE NOMBRED= Investigacin)

La vista se puede usar en consultas:


SELECT NOMBRE, APELLIDO FROM TRABAJA_EN_1 WHERE NOMBREP=ProyectoX

A la izda se refiere al nuevo valor de SALARIO A la dcha al valor antiguo

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 NOMBRE NSS ND Iker Ana Jon Karmele 11 22 33 44 1 1 2 2 DEP NUMD NOMD 1 2 LSI ATC PROY NP NOMBRE 1 2 3 4 .NET XML EJB UML TRAB NSSE NP HORAS 11 11 22 22 44 1 2 1 3 3 5 2 3 1 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 EMPRESA


EMPLEADO

Ejercicio: consultas SQL EMPRESA


(8.13 (7.18) Elmasri/Navathe 02)

(7.18 Elmasri/Navathe 02)

NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

...
Sobre el esquema de BD de la figura 7.7 (pg. 4): (donde pide empleados se refiere a su nombre y apellido) a) Empleados del departamento 5 que trabajan ms de 10 horas/semana en el proyecto Producto X b) Empleados con un dependiente con su mismo nombre de pila c) Empleados cuyo jefe directo es Franklin Wong d) Nombre de cada proyecto junto al nmero total de horas trabajadas por los empleados en l. e) Empleados que trabajan en todos los proyectos de la empresa f) Empleados que no trabajan en ningn proyecto g) Nombre de cada departamento junto al salario medio de los empleados asignados al mismo h) Salario medio de las empleadas de la compaa i) Nombre y direccin de los empleados que trabajan en algn proyecto situado en Houston pero departamento no est situado all j) Jefes de departamento sin dependientes

... SEXO
DEPARTAMENTO

SALARIO NSS_SUPERV ND

NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE LOCALIZACIONES_DEPT NMEROD LOCALIZACIND PROYECTO NOMBREP NMEROP LOCALIZACINP NMD TRABAJA_EN NSSE DEPENDIENTE NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO NP HORAS

a) Empleados del departamento 5 que trabajan ms de 10 horas/semana en el proyecto Producto X b) Nombre de cada proyecto junto al nmero total de horas invertidas por los empleados en l. c) Nombres de todos los empleados que trabajan en todos y cada uno de los proyectos d) Empleados que no trabajan en ningn proyecto e) Nombre y direccin de los empleados que trabajan en algn proyecto que, por una parte, est situado en Houston y por otra el proyecto pertenece a un departamento que no est situado en Houston.
A. Jaime 2003

DBD Tema 4

71

A. Jaime 2003

DBD Tema 4

72

Ejercicio: consultas SQL UNIVERSIDAD (1)


Departamento DepNom Director Presupuesto Centro Asignatura Cdigo AsigNom Curso Crditos SuDpto AlumAsig Alum Asig Nota Convocatoria Cdigo Alumno DNI AlumNom Tfno Ciudad Edad

Ejercicio: consultas SQL UNIVERSIDAD (2)


Departamento DepNom Director Presupuesto Centro Asignatura Cdigo AsigNom Curso Crditos SuDpto AlumAsig Alum Asig Nota Convocatoria Cdigo Alumno DNI AlumNom Tfno Ciudad Edad

a) Por cada curso, obtener el alumno con mejor nota media en las asignaturas de este curso. b) Obtener el DNI de los alumnos que estn limpios en 3 curso, es decir, que estn matriculados en 3 y tienen aprobadas todas las asignaturas de cursos inferiores. c) DNI de los alumnos que estn matriculados de ALGUNA asignatura de tercero y tienen aprobadas TODAS las asignaturas de segundo. d) Obtener el DNI de los alumnos matriculados en al menos una asignatura de cada uno de los departamentos de Informtica. e) Obtener el nombre de los alumnos que estn matriculados en sexta convocatoria en al menos dos asignaturas (sin utilizar funciones agregadas). f) Obtener el DNI de los alumnos que estn matriculados de todas las asignaturas de 3 y de alguna otra asignatura de cursos inferiores.
A. Jaime 2003

g) Nombre de los alumnos que han obtenido como nota SOBRESALIENTE en al menos dos asignaturas de cualquiera de los cursos en los que hayan estado matriculados (sin utilizar funciones agregadas). h) Obtener, sin usar funciones agregadas, el nombre de los alumnos que estn matriculados slo de asignaturas del departamento DMC. i) Obtener, sin usar funciones agregadas, el nombre de los alumnos matriculados en alguna asignatura de tercer curso que no tengan ninguna matrcula en asignaturas de segundo curso. j) Para cada asignatura del departamento DMC con ms de 10 alumnos matriculados, obtener el cdigo de la asignatura y el nmero de convocatoria media en la que se encuentran los alumnos de Arnedo k) Obtener el nombre de los alumnos de Njera mayores de 20 aos que se encuentran matriculados en alguna asignatura de tercero
A. Jaime 2003

DBD Tema 4

73

DBD Tema 4

74

Solucin Operaciones del lgebra (1)


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

PRY1_MAS1HORA

R1 NSSE 11 22

R2 TODOS_PRY R3 NP 1 2 3 NP 1 2 3 4 NP 4

Soluciones

NSSE NP HORAS 11 22 1 1 5 3

PRY1_MAS1HORA

TODOS_PRY NP (PROY) R3TODOS_PRY - R2


R4 NOMBRE NSS ND NUMD NOMD Iker Ana Jon Karmele 11 22 33 44 1 1 2 2 1 1 2 2 LSI LSI ATC ATC R5 NOMBRE NOMD Iker Ana Jon Karmele LSI LSI ATC ATC

R2 NP (TRAB)

R1 NSS (PRY1_MAS1HORA)

NP=1 Y HORAS>1 (TRAB)

R4 EMP

R5 NOMBRE, NOMD (R4)

|| ND=NNUMD DEP

A. Jaime 2003

DBD Tema 4

75

A. Jaime 2003

DBD Tema 4

76

Solucin Operaciones del lgebra (2)


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

Solucin consultas lgebra relacional EMPRESA


(Elmasri/Navathe 7.18)

a) Empleados del departamento 5 que trabajan ms de 10 horas/semana en el proyecto Producto X


EMP_DP5(NSSE) NSS( ND=5 (EMPLEADO) ) NUM_PROY(NP) NMEROP(NOMBREP=ProductoX (PROYECTO)) EMP_PR HORAS>10 (TRABAJA_EN * NUM_PROY) R1 NOMBRE,APELLIDO(EMP_PR * EMP_DP5)

TRB NSS 11 11 22 22 44

NOMBRE NSS NP 1 2 1 3 3

b) Empleados con un dependiente con su mismo nombre de pila


DEP(NSS, NOMBRE) NSSE, NOMBRE-DEPENDIENTE (DEPENDIENTE) EMP_CON_DEP_IGUAL EMPLEADO * DEP R2 NOMBRE,APELLIDO(EMP_CON_DEP_IGUAL )

PERS NOMBRE, NSS(EMP) TRB(NSS,NP) NSSE, NP (TRAB) R6 PERS * TRB


PRY NP NOMP 1 2 3 4 .NET XML EJB UML PERS_PRY NOMBRE NSS NP NOMP Iker Iker Ana Ana Karmele 11 11 22 22 44 1 2 1 3 3 .NET XML .NET EJB EJB R7 NOMBRE NOMP Iker Iker Ana Ana Karmele .NET XML .NET EJB EJB

c) Empleados cuyo jefe directo es Franklin Wong


F_WONG(NSS_SUPERV) NSS, (NOMBRE=Franklin Y APELLIDO=Wong (EMPLEADO)) SUPERVISADOS F_WONG * EMPLEADO R3 NOMBRE,APELLIDO(SUPERVISADOS)

PRY(NP,NOMP) NP, NOMBRE (PROY) PERS_PRY R6 * PRY R7 NOMBRE, NOMP(PERS_PRY)


PERS_PRY NOMBRE NSS NP

d) Nombre de cada proyecto junto al nmero total de horas trabajadas por los empleados en l.
PROY_NOM PROYECTO ||NMEROP=NP TRABAJA_EN R4(NOMBREP, HORAS) NOMBREP SUMA HORAS(PROY_NOM)

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)


(Elmasri/Navathe 7.18)

Solucin consultas EMPRESA (3)


(Elmasri/Navathe 7.18)

e) Nombres de todos los empleados que trabajan en cada uno de los proyectos
Todos los proyectos junto a los empleados que trabajan en cada uno

PRY_EMPS(NOMP,NSS) NOMBREP, NSSE( PROYECTO ||NMEROP=NP TRABAJA_EN)) R5 NOMP, NOMBRE, APELLIDO(PRY_EMPS * EMPLEADO) PROYS(NP) NMEROP(PROYECTO) EMPS_TODOS_PRYS(NSS) NP,NSSE(TRABAJA_EN)
PROYS

i) Nombre y direccin de los empleados que trabajan en algn proyecto situado en Houston pero cuyo departamento no est situado all
PRY_HOUSTON NMEROP, NMD(LOCALIZACINP=Houston (PROYECTO)) DPT_HOUSTON NMEROD(LOCALIZACIND =Houston (LOCALIZACIONES_DEPTOS)) TODOS_DPTOS NMEROD(DEPARTAMENTO) DPT_NO_HOUSTON TODOS_DPTOS - DPT_HOUSTON PRY_BUSCADOS(NP) NMEROP(PRY_HOUSTON ||NMD=NMEROD DPT_NO_HOUSTON) EMP_BUSCADOS(NSS) NSSE(TRABAJA_EN * PRY_BUSCADOS) R9 NOMBRE, APELLIDO, DIRECCIN(EMPLEADO * EMPS_BUSCADOS) (1) NO se puede calcular as:

Los que trabajan en todos y cada uno de los proyectos

(1)

R5 NOMBRE, APELLIDO(EMPLEADO* EMPS_TODOS_PRYS)

f) Empleados que no trabajan en ningn proyecto


EMP_PROY(NSS) NSSE(TRABAJA_EN) EMPS NSS(EMPLEADO) EMPS_SIN_PRY EMPS - EMP_PROY R6 NOMBRE, APELLIDO(EMPLEADO* EMPS_SIN_PRY)

Puede haber departamentos que estn en lugares distintos a Houston y que tambin estn en Houston

g) Nombre de cada departamento junto al salario medio de los empleados asignados al mismo
R7 NOMBRED PROMEDIO SALARIO(DPTO_EMP) DPTO_EMP DEPARTAMENTO ||NMEROD=ND EMPLEADO

DPT_NO_HOUSTON NMEROD(LOCALIZACIND Houston (LOCALIZACIONES_DEPTOS))

j) Jefes de departamento sin dependientes


JEFES(NSSE) NSS_JEFE(DEPARTAMENTO) JEFES_CON_DEP(NSSE) NSSE(JEFES * DEPENDIENTE) JEFES_SIN_DEP(NSS) JEFES - JEFES_CON_DEP R10 NOMBRE, APELLIDO(JEFES_SIN_DEP * EMPLEADO) JEFES_SIN_DEP(NSS) JEFES (NSSE(EMPLEADO ||NSS=NSSE DEPENDIENTE))
DBD Tema 4 80

h) Salario medio de las empleadas de la empresa


R8 PROMEDIO SALARIO(EMP_FEM)
A. Jaime 2003

EMP_FEM SEXO=M (EMPLEADO)

Alternativa vlida 79
A. Jaime 2003

DBD Tema 4

S-ar putea să vă placă și