Está en la página 1de 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

BD: coleccin de relaciones


Relacin:

Valores columna
mismo domino

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

El estndar de las Bases de Datos Relacionales


Elmasri/Navathe 02

Fila=
Tupla

Columna =
Atributo

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

Modelo relacional: conceptos, restricciones, operaciones


de actualizacin y operaciones del lgebra
Revisin de SQL

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

A. Jaime 2003

DBD Tema 4

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

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

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_JEFE
333445555
987654321
888665555

Clave
extranjera

...

EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

... SEXO

...

SALARIO NSS_SUPERV ND

DEPARTAMENTO
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE
LOCALIZACIONES_DEPT
NMEROD LOCALIZACIND
PROYECTO
NOMBREP NMEROP LOCALIZACINP NMD
TRABAJA_EN

Clave
extranjera

NSSE

NP

HORAS

DEPENDIENTE

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

NSSE

NOMBRE_DEPENDIENTE

SEXO FECHA_NCTO

PARENTESCO

Figura 7.7 restricciones de integridad referencial


representadas en el esquema de la base de
datos relacional EMPRESA

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

DBD Tema 4

A. Jaime 2003

DBD Tema 4

Estado de la BD relacional EMPRESA

Estado de la BD relacional EMPRESA (cont)

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

FECHA_NCTO

DIRECCIN

123456789
333445555
999887777
987654321
666884444
453453453
987987987
888665555

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

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

TRABAJA_EN
NSSE

...

HORAS

1
2
3
1
2
2
3
10
20
30
10
10
30
30
20
20

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

...

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

NMEROD

LOCALIZACIND

1
4
5
5
5

Houston
Stafford
Bellaire
Sugarland
Houston

PROYECTO
NOMBREP

SEXO SALARIO NSS_SUPERV ND


NP

123456789
123456789
666884444
453453453
453453453
333445555
333445555
333445555
333445555
999887777
999887777
987987987
987987987
987654321
987654321
888665555

LOCALIZACIONES_DEPT

5
5
4
4
5
5
4
1

NMEROP LOCALIZACINP NMD

ProductoX
ProductoY
ProductoZ
Automatizacin
Reorganizacin
Nuevos beneficios

1
2
3
10
20
30

Bellaire
Sugarland
Houston
Stafford
Houston
Stafford

5
5
5
4
1
4

DEPENDIENTE

Figura 7.6 (1 parte)


Un posible estado de la base de datos
relacional del esquema EMPRESA

NSSE

NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO

333445555
333445555
333445555
987654321
123456789
123456789
123456789

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

Figura 7.6 (2 parte) Un posible estado de la base de datos


relacional del esquema EMPRESA

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

DBD Tema 4

A. Jaime 2003

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)

DBD Tema 4

lgebra relacional

Operaciones para manipular relaciones enteras


Permiten especificar consultas (recuperacin de datos)
El resultado de una consulta es otra relacin

Operaciones especficas del lgebra relacional:


SELECCIONAR
PROYECTAR
REUNIN (JOIN)

Binario

Operaciones de teora de conjuntos:

Unarios

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:

Proyectar:
EMPLEADO

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

NOMBRE INIC APELLIDO

NSS_SUPERV ND

123456789
333445555
999887777
987654321
666884444
453453453
987987987
888665555

...

333445555
888665555
987654321
888665555
333445555
333445555
987654321
nulo

John
Franklin
Alicia
Jennifer
Ramesh
Joyce
Ahmad
James

5
5
4
4
5
5
4
1

B
T
J
S
K
A
V
E

Alicia
Jennifer
Ahmad

J
S
V

Zelaya
Wallace
Jabbar

NSS

...

999887777
987654321
987987987

NSS_SUPERV ND
987654321
888665555
987654321

4
4
4

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

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


DBD Tema 4

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

...

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

John
Franklin
Ramesh
Joyce

B
T
K
A

Smith
Wong
Narayan
English

NSS
123456789
333445555
666884444
453453453

...

30.000
40.000
38.000
25.000

333445555
888665555
333445555
333445555

5
5
5
5

R(NOMBRE_PILA, PRIMER_APELL, SALARIO)


NOMBRE,APELLIDO,SALARIO(TEMP)
30.000
40.000
38.000
25.000

...

DBD Tema 4

DBD Tema 4

10

PROFESOR
NOMBRE APELLIDO
John
Smith
Ricardo
Browne
Susan
Yao
Francis
Johnson
Ramesh
Shah

APEL
Yao
Shah
Kohler
Jones
Ford
Wang
Gilbert

11

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

Compatibilidad con la unin: ambas relaciones deben


tener el mismo nmero de atributos y cada par de
atributos correspondientes pertenecer al mismo dominio
conmutativas

Alternativa sin resultados intermedios o renombre de atributos


NOMBRE, APELLIDO, SALARIO(ND=5(EMPLEADO))
A. Jaime 2003

<LISTA1> (<LISTA2> (R)) = <LISTA1> (R)


No es conmutativa

PROFESOR ALUMNO
NOMBRE APELLIDO
John
Smith
Ricardo
Browne
Francis
Johnson

NOMBRE_PILA PRIMER_APELL SALARIO


Smith
Wong
Narayan
English

Fig 7.8 (c)

NOM
Susan
Ramesh

SALARIO NSS_SUPERV ND

Renombre de atributos

John
Franklin
Ramesh
Joyce

El (M, 25.000)
duplicado se ha
eliminado

ALUMNO PROFESOR

ND=5(EMPLEADO)

NOMBRE INIC APELLIDO

333445555
888665555
987654321
888665555
333445555
333445555
987654321
nulo

ALUMNO
NOM
Susan
Ramesh
Johnny
Brbara
Amy
Jimmy
Ernest

SALARIO NSS_SUPERV ND

Resultado intermedio
TEMP

30.000
40.000
25.000
43.000
38.000
25.000
25.000
55.000

Unin, interseccin y diferencia

EMPLEADO
John
Franklin
Alicia
Jennifer
Ramesh
Joyce
Ahmad
James

...

H
H
M
M
H
M
H
H

Selecciona las columnas especificadas de una relacin


(desechando el resto de columnas)
El resultado es otra relacin
Eliminacin de duplicados

A. Jaime 2003

Renombrar y resultados intermedios


NOMBRE INIC APELLIDO

SEXO SALARIO NSS_SUPERV ND

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

Selecciona un subconjunto de filas (tuplas) de una


relacin
Las que satisfacen una condicin
Condicin: {=, <, , >, , }
Y, O, NO
El resultado es otra relacin

A. Jaime 2003

NSS
123456789
333445555
999887777
987654321
666884444
453453453
987987987
888665555

SEXO, SALARIO(EMPLEADO)

= sigma
ND=4(EMPLEADO)
NOMBRE INIC APELLIDO

Smith
Wong
Zelaya
Wallace
Narayan
English
Jabbar
Borg

asociativas

no conmutativa

R S = S R (R S) T = R (S T) R S S R
R S = S R (R S) T = R (S T)
A. Jaime 2003

DBD Tema 4

12

5
5
4
4
5
5
4
1

Reunin (JOIN): ||

Producto Cartesiano: (CROSSJOIN)

EMP
DP_STAF

PR_STAF
NOMBREP
Automatizacin
Nuevos beneficios

NOMBRED
Administracin
Mantenimiento

APELLIDO

NSS

ND

Smith
Wong
Zelaya
Wallace
Narayan
English
Jabbar
Borg

123456789
333445555
999887777
987654321
666884444
453453453
987987987
888665555

5
5
4
4
5
5
4
1

NMEROD
4
8

R PR_STAF DP_STAF
NOMBREP
Automatizacin
Automatizacin
Nuevos beneficios
Nuevos beneficios

NOMBRED
Administracin
Mantenimiento
Administracin
Mantenimiento

NMEROD
4
8
4
8

DPT

NOMBRED

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

NOMBRED NSS_JEFE APELLIDO

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

A. Jaime 2003

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 {=, <, , >, , }

DBD Tema 4

NSS

ND

333445555 5
987654321 4
888665555 1

DBD Tema 4

14

Tipos de reunin (JOIN)

A. Jaime 2003

Wong
Wallace
Borg

Combina tuplas relacionadas de 2 relaciones (o de


la misma)
Operacin muy importante para cualquier BDR
Permite procesar vnculos entre relaciones

Reunin (JOIN) (2)

|| NSS_JEFE=NSS EMP

Investigacin 333445555
Administracin 987654321
Direccin
888665555

13

NSS_JEFE

JEFE_DTO DPT

Q consta de todas las combinaciones de cada


tupla de R seguida de otra de S

DBD Tema 4

NOMBRED, NSS_JEFE(DEPARTAMENTO)

Investigacin 333445555
Administracin 987654321
Direccin
888665555

Relaciones: no han de ser compatibles con la unin

A. Jaime 2003

APELLIDO, NSS, ND(EMPLEADO)

15

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

16

Divisin:

Ejemplo de reunin natural: *

Ejemplo: R N D
PRY

NOMBREP, NMD(PROYECTO)

NOMBREP
NMD
ProductoX
5
ProductoY
5
ProductoZ
5
Automatizacin
4
Reorganizacin
1
Nuevos beneficios
4
DPT(NOMBRED, NMD)

NOMBRED, NMEROD(DEPARTAMENTO)

NOMBRED

NMD

Investigacin
Administracin
Direccin

5
4
1

Tiene que haber al


menos un par de
atributos con el
mismo nombre

Desaparece un NMD

DEPTO_PROY PRY * DPT


NOMBREP

NMD

NOMBRED

ProductoX
ProductoY
ProductoZ
Automatizacin
Reorganizacin
Nuevos beneficios

5
5
5
4
1
4

Investigacin
Investigacin
Investigacin
Administracin
Direccin
Administracin

A. Jaime 2003

DBD Tema 4

17

NSSE , NMP(TRABAJA_EN)

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

NMP(NSSE=123456789 (TRABAJA_EN))

NMS_PRY
NMP
1
2

NSSS

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

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

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

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

A. Jaime 2003

DBD Tema 4

18

(SUMA, PROMEDIO,

y de agrupacin

EMP
NSS

SALARIO

123456789
333445555
999887777
987654321
666884444
453453453
987987987
888665555

30.000
40.000
25.000
43.000
38.000
25.000
25.000
55.000

R1

NSS
123456789
453453453

En general, los valores


duplicados tambin se
consideran en los clculos

En SQL se puede poner para


ello, por ejemplo:
COUNT(DISTINCT SALARIO)

CUENTA NSS, PROMEDIO SALARIO(EMP)

CUENTA_NSS PROMEDIO_SALARIO
8

R2
NSSS(NSS) NSS_NMS_PRY NMS_PRY

35125

PROMEDIO SALARIO(EMP)

PROMEDIO_SALARIO
35125

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

MXIMO, MNIMO y CUENTA)

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.

NSS_NMS_PRY

Funciones agregadas

Divisin: (2)

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

EMPAPELLIDO, NSS(EMPLEADO)

DPTO
LSI
LSI
ATC
nulo
LSI

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

R1DPTO CUENTA NOM(EMP)


DPTO
LSI
ATC
nulo

CUENTA_NOM

3
1
1

S considera el nulo
como valor de
agrupacin

R2NOM CUENTA DPTO(EMP)


NOM
Alfredo
Ana
Juan
Federico

Reunin externa

CUENTA_DPTO

1
2
1
0

NO considera en la
cuenta (o en el
promedio, suma, ...)
los valores nulos
que pueda haber

Permite especificar
una combinacin de
atributos de
agrupacin

R3NOM, DPTO CUENTA NSS(EMP)


NOM
Alfredo
Ana
Juan
Federico

A. Jaime 2003

DPTO
LSI
LSI
ATC
nulo

CUENTA_NSS

1
2
1
1

DEPNOMBRED, NSS_JEFE(DEPARTAMENTO)
NOMBRED NSS_JEFE

APELLIDO
NSS
Smith
123456789
Wong
333445555
Zelaya 999887777
Wallace 987654321
Narayan 666884444
English 453453453
Jabbar 987987987
Borg
888665555

Investigacin 333445555
Administracin 987654321
Direccin
888665555

Reunin externa
izquierda R ]| S

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

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

Reunin externa derecha R |[ S


Reunin externa completa R ][ S

DBD Tema 4

21

A. Jaime 2003

DBD Tema 4

22

Revisin de SQL

Ejemplos de consultas con lgebra relacional

(Structured Query Language)

EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

... SEXO

...

SALARIO NSS_SUPERV ND

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,...)

DEPARTAMENTO
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE
TRABAJA_EN
NSSE

NP

HORAS

PROYECTO
NOMBREP NMEROP LOCALIZACINP NMD

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)

A. Jaime 2003

DBD Tema 4

23

A. Jaime 2003

DBD Tema 4

24

Instruccin CREATE TABLE

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

Restricciones
Restricciones

Atributos
Atributos

Esquema y catlogo en SQL2

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)

Catlogo del SGBD

...

Restricciones

Vistas
Dominios
Autorizaciones

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

DBD Tema 4

INT

NOT NULL DEFAULT 888665555,

CHAR(9)
DATE,

NOT NULL,

CONSTRAINT CLP_DPTO PRIMARY KEY(NUMEROD),


CONSTRAINT CLS_DPTO UNIQUE(NOMBRED),

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:

A. Jaime 2003

Opciones:

CASCADE
SET DEFAULT
SET NULL
RESTRICT (no poner ON UPDATE ON DELETE)
DBD Tema 4

26

CREATE TABLE:
especificacin de restricciones y valores por omisin (2)
FOREIGN KEY (clave extranjera):

Definicin de atributos:

NOT NULL:

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

no se permite que el atributo tome 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

NUMEROD

DROP

25

Valor por
defecto

NSS_JEFE
FECHA_INIC_JEFE

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

CREATE TABLE:
especificacin de restricciones y valores por omisin

Fig 8.1(b)
CREATE TABLE DEPARTAMENTO
( NOMBRED
VARCHAR(15) NOT NULL,

Atributos
Atributos

Tablas

Elementos
de un
esquema

INFORMATION
_SCHEMA

Esquema 2

Restricciones
Restricciones
(connombre)
nombre)
(con

Esquema 1

DBD Tema 4

27

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

A. Jaime 2003

DBD Tema 4

28

Borrar esquemas (DROP SCHEMA)


y borrar tablas (DROP TABLE)

Evolucin del esquema: columnas


(ALTER TABLE)

Borrar un esquema completo:

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

DROP SCHEMA EMPRESA CASCADE

En las tuplas existentes se asignan valores NULL.


Alternativas: definir DEFAULT o introducir valores con

RESTRICT:borra el esquema slo si NO contiene

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
DIRECCIN CASCADE;

Borrar una tabla de un esquema:

CASCADE

DROP TABLE DEPENDIENTE CASCADE

borra tambin las restricciones

(constraints) y vistas que hagan referencia a la

columna (DIRECCIN)

RESTRICT: borra la tabla slo si NO existen

slo borra la columna (DIRECCIN) si no


hay restricciones ni vistas que le hagan referencia

RESTRICT

referencias a la misma:
Desde claves externa de otra tabla

Desde alguna vista

Modificar la definicin de columnas:


ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
NSS_JEFE DROP DEFAULT;

CASCADE: borra tabla y todas las restricciones

ALTER TABLE EMPRESA.DEPARTAMENTO ALTER


NSS_JEFE SET DEFAULT 333445555;

(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

Evolucin del esquema: restricciones (constraints)

Consultas bsicas

(ALTER TABLE)

SELECT columnas
FROM tablas
[WHERE condicin]

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)

30

Aadir restricciones:

La omisin de
WHERE equivale
a WHERE TRUE

Condiciones en WHERE:
{=, <>, <, >, <=, >=}, AND, OR, NOT
El resultado puede contener TUPLAS REPETIDAS
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

EMPLEADO(NSS)

FECHA_INIC_JEFE

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

A. Jaime 2003

DBD Tema 4

31

A. Jaime 2003

DBD Tema 4

32

SELECT *
ALL y DISTINCT

Calificar atributos y alias


EMPLEADO
NOMBRE INIC APELLIDO NSS

...

...

DIRECCIN

ND

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

DEPARTAMENTO
NOMBRE ND NSS_JEFE

Seleccionar todos los atributos de las tablas de FROM

FECHA_INIC_JEFE

Nombre, apellido y direccin de los empleados del


departamento de investigacin

Seleccionar todos los atributos de EMPLEADO

C1Aiv: SELECT EMPLEADO.*


FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=Investigacin AND ND=NMEROD

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

EMPLEADO,

DEPARTAMENTO

WHERE DEPARTAMENTO.NOMBRE = Investigacin AND


DEPARTAMENTO.ND=EMPLEADO.ND

C11:SELECT ALL SALARIO


FROM EMPLEADO

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

Declaracin
de alias

Opcin por
defecto

Seleccionar todos los diferentes valores de salario de


EMPLEADO

EMPLEADO AS E, DEPARTAMENTO AS D

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


Uso de alias

Seleccionar todos los valores (incluidos los repetidos)


de salario de EMPLEADO

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

LIKE
+, -, *, / y ||

UNION [ALL], INTERSECT [ALL] y


EXCEPT [ALL]

NSSE

C12: SELECT NOMBRE, APELLIDO


FROM EMPLEADO
WHERE DIRECCIN LIKE %Houston, TX%

% sustituye a un n arbitrario de caracteres


_ sustituye a un solo carcter

...

NP

NOMBRED NMEROD NSS_JEFE

...
EMPLEADO

PROYECTO

...

...

NMEROP

...

NOMBRE

NMD

C4: SELECT NUMEROP


FROM

PROYECTO, DEPARTAMENTO, EMPLEADO

WHERE NMD=NMEROD AND NSS_JEFE=NSS AND


APELLIDO=Smith
UNION
SELECT NP
TRABAJA_EN, EMPLEADO

DBD Tema 4

NSSE

NP

NSS

...

SALARIO

...

PROYECTO

...

NOMBREP NMEROP

...

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?

WHERE NSSE=NSS AND APELLIDO=Smith

A. Jaime 2003

... APELLIDO

TRABAJA_EN

Nmeros de proyecto donde participa Smith como


trabajador o como jefe del departamento controlador:

FROM

Empleados que viven en Houston, Texas:

DEPARTAMENTO

APELLIDO NSS

TRABAJA_EN

Por defecto las tuplas repetidas se eliminan del


resultado
Con UNION ALL se conservan las repeticiones
Se exige compatibilidad de unin

EMPLEADO

...

34

35

A. Jaime 2003

DBD Tema 4

36

BETWEEN y
conjuntos explcitos de valores

Ordenacin de tuplas
(ORDER BY)

EMPLEADO
NOMBRE

... APELLIDO

NSS

... ND

DEPARTAMENTO

NSSE

NP

...

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

PROYECTO

NOMBRED NMEROD NSS_JEFE

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

TRABAJA_EN

...

NOMBREP NMEROP

... NMD

Empleados y proyectos donde trabajan, ordenados por


departamento y, dentro de cada departamento, ordenados
alfabticamente por apellido y nombre :

C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREP


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

Equivale a SALARIO >= 30000


AND SALARIO <= 40000

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

Consultas anidadas

DBD Tema 4

Proceso de consultas anidadas


T1

SELECT en la clusula WHERE de otra SELECT

A
1
2
3
4

TRABAJA_EN
NSSE

NP

HORAS

Informacin de los empleados que trabajan en algn


proyecto en el que trabaje ms de 10 horas a la semana
el empleado 123456789

Algunas anidadas (como las que usan = e IN) se


pueden escribir sin anidamientos:

Tuplas de T2
en resultado
de subconsulta

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

Se admite el uso de conjuntos explcitos de valores:


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

DBD Tema 4

39

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

Resultado
de subconsulta
T1.A=1

E F GA
1 aaa 2 1

T1
A
1
2
3
4

B
bb
ab
cb
ec

C
5
3
4
2

D
aaa
aba
bbe
aeb

Se compara un valor de atributo (o conjunto de


atributos entre parntesis) con el conjunto de tuplas
devueltas por la subconsulta

A. Jaime 2003

T2
C
5
3
4
2

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 )

SELECT NSSE
FROM TRABAJA_EN
WHERE NP IN (SELECT NP FROM TRABAJA_EN
WHERE NSS=123456789 AND HORAS>10)

B
bb
ab
cb
ec

Atributo de T1

Puede haber ms niveles de


anidamiento

38

A. Jaime 2003

A
1
RESULTADO

E F GA

A
T1.A=2

E F GA

E F GA
2 aeb 3 4
4 aeb 5 3

A
4
3
DBD Tema 4

A B C
1 bb 5
4 ec 2

T1.A=3

T1.A=4

40

EXISTS

IN, ALL y ANY (o SOME)

WHERE atributo(s) IN subconsulta


WHERE atributo(s) = ANY subconsulta

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)

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

(*)
< ALL
<=ALL
< ANY
<= ANY

A. Jaime 2003

Resultado

1
1, 2, 3, 5
1, 2, 3, 4, 5

DBD Tema 4

Devuelve cierto si y slo si la subconsulta devuelve


alguna tupla.
EMPLEADO
NOMBRE

DEPENDIENTE

... APELLIDO

Devuelve cierto si y slo si la subconsulta no devuelve


tuplas duplicadas.

Ejemplo:

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

A. Jaime 2003

C
5
3
4
8

Resultado
de subconsulta

E F G
4 aeb 5

F
aeb

E F G
2 aeb 3
6 aeb 3

F
aeb
aeb

E F G

E F G
3 aba 8
5 aba 8

F
aba
aba

DBD Tema 4

DNI Asig Nota

RESULTADO

Nombre
Jon
Leire

Asig Nota
7984 7,5
4544 9
7540 8

DBD Tema 4

TRABAJA_EN
NSSE

42

RESULTADO
A
1
3
4

B
bb
cb
ec

43

NP

PROYECTO

...

NP

...

NSS de aquellos empleados que trabajan en todos los


proyectos de la empresa
Resultado(NSSE , NP TRABAJA_EN) (NP PROYECTO)

Transformacin de
teora de conjuntos

B
bb
ab
cb
ec

DNI Asig Nota


1 7540 8,5

A. Jaime 2003

Transformacin de
clculo relacional

A
1
2
3
4

Resultado
de subconsulta

ALUMNO

SELECT A, B
FROM T1
WHERE UNIQUE ( SELECT F FROM T2 WHERE G=T1.C )

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

SELECT Nombre
FROM ALUMNO AS A
WHERE EXISTS ( SELECT * FROM NOTA
WHERE Nota>=7 AND DNI=A.DNI)

DNI Nombre
1
Jon
2
Ana
3
Leire

T1

...

Divisin en SQL

T2

NSSE NOMBRE

SELECT NOMBRE, APELLIDO


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

DNI
3
3
3
41

...

Empleados sin familiares dependientes:

UNIQUE

Tuplas de T2
en resultado
de subconsulta

NSS

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

A. Jaime 2003

DBD Tema 4

44

Ejemplos con valor null

IS NULL e IS NOT NULL

Nombre y apellido de empleados sin supervisores

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)

Cualquier cosa operada con NULL devuelve NULL

Vendedor
Mara
Aitor

Vendedor
Juan
Ana

SELECT Vendedor, Cuota+500


AS X FROM Ventas
Vendedor
Juan
Mara
Jess
Ana
Aitor
Leire
DBD Tema 4

AND OR
A NOT
Null True Null Null
Null Null
Null Null

SELECT Vendedor FROM Ventas SELECT Vendedor FROM Ventas


WHERE Vendido>Cuota
WHERE Vendido<=Cuota

(UNKNOWN)

A. Jaime 2003

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

Una condicin puede NO verificarse


por FALSE o por NULL

A
True
False
Null

La tabla
del null

45

Ejemplos con valor null (2)

Cuota
1500
1500
Null
1700
1500
Null

A. Jaime 2003

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

Renombrar atributos del resultado con AS

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

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

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

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

FROM

EMPLEADO AS E, ...

SQL1
SQL2

SELECT Cuota , COUNT(*) AS C1


FROM Ventas
GROUP BY Cuota

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

Anidamiento de tablas combinadas

(INNER, NATURAL y OUTER JOIN en FROM)


EMPLEADO

...

NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

...

...

APELLIDO NSS FECHA_NCTO DIRECCIN

...

SEXO SALARIO NSS_SUPERV ND


DEPARTAMENTO

DEPARTAMENTO
NOMBRED NMEROD NSS_JEFE

EMPLEADO

... NMD

FECHA_INIC_JEFE

Nombre y direccin de los empleados del departamento de Investigacin

NSS_JEFE

PROYECTO

...

...

NMEROP LOCALIZACINP NMD

SELECT NMEROP, NMD, APELLIDO, DIRECCIN


FECHA_NCTO
FROM (PROYECTO NATURAL JOIN DEPARTAMENTO)
INNER JOIN EMPLEADO ON NSS_JEFE=NSS
WHERE LOCALIZACINP=Stafford

C1: C1A: SELECT NOMBRE, APELLIDO, DIRECCIN


FROM (EMPLEADO INNER JOIN DEPARTAMENTO
ON ND=NMEROD)
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)

A. Jaime 2003

AS ED ...

DBD Tema 4

49

A. Jaime 2003

DBD Tema 4

OUTER JOIN
T1
A
@
aa
bb
cc

UNION JOIN

T2
B
null
1
2
3

E
F
000 null
100 1
101 1
200 2
400 4

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

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

Oracle: SELECT * FROM T1,T2 WHERE B=(+)F


SQLServer:SELECT * FROM T1,T2 WHERE B*=F
Oracle: ...WHERE B(+)=F
SQLServer: ...WHERE B=*F

Oracle: no lo implementa
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

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

A. Jaime 2003

DBD Tema 4

50

51

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

T4
B
a
aa
b

D
1
2
3

SELECT *
FROM T1 UNION JOIN T2

A
aa
ab
bb
bc
cc

SELECT *
FROM T2 UNION JOIN T3

B
aa
ab
bc
null
null

SELECT *
FROM T2 UNION JOIN T4

B
a
aa
ab
b
bc

A. Jaime 2003

DBD Tema 4

C
null
null
null
1
2

D
1
2
null
3
null
52

Funciones agregadas y de agrupacin (2)

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

Suma de salarios del dpto. Investigacin, junto a los


salarios mximo, mnimo y medio:

C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),


AVG(SALARIO)
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NMEROD
WHERE NOMBRED=Investigacin

C23: SELECT COUNT(DISTINCT SALARIO)


FROM EMPLEADO

DEPARTAMENTO
NOMBRED NMEROD
Investigacin
5
Administracin
4
Direccin
1

NOMBREP

SALARIO

ND

John
Franklin
Ramesh
Joyce
Alicia
Jennifer
Ahmad
James

NULL
15.000
10.000
10.000
10.000
20.000
20.000
20.000

5
5
5
5
4
4
4
1

...

...

35.000

15.000

C22 COUNT(*)

C23:

NOMBREP

SALARIO

ND

John
Franklin
Ramesh
Joyce
Alicia
Jennifer
Ahmad
James

NULL
15.000
10.000
10.000
10.000
20.000
20.000
20.000

5
NULL
5
5
4
4
4
1

...

DBD Tema 4

11.666

53

A. Jaime 2003

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

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

SALARIO

ND

NOMBRED

30.000
15.000
10.000
10.000
10.000
20.000
20.000
20.000

5
5
5
5
4
4
4
1

Investigacin
Investigacin
Investigacin
Investigacin
Administracin
Administracin
Administracin
Direccin

...

...

...

C24:
NOMBRED

...

ND

NOMBRED

NULL
10
10
10

NULL
NULL
5
5

NULL
NULL
DMC
DMC

...

...

A. Jaime 2003

...

...

ND N_EMP SAL_MED

Investigacin 5
Administracin 4
Direccin
1

COUNT( SALARIO)

7
C23:
COUNT( *)

4
3
1

DBD Tema 4

54

Para especificar una condicin en trminos del grupo


de tuplas asociado a cada valor de los atributos de
agrupacin
PROYECTO
NOMBREP NP

TRABAJA_EN

...

NMD

NSSE

NP

...

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

16.250
16.666
20.000

Los valores
nulos forman su
propio grupo

EMPLEADO LEFT JOIN


DEPARTAMENTO ON ND=NMEROD
SALARIO

3
C23:

HAVING

Obtener por cada dpto. su nombre y nmero junto al


nmero de empleados del mismo y el salario medio
del dpto.:

EMPLEADO LEFT JOIN


DEPARTAMENTO ON ND=NMEROD

...

COUNT(DISTINCT SALARIO)

Qu ocurre cuando todos los salarios valen NULL?


Qu ocurre cuando la tabla est vaca?

Atributos de agrupacin: GROUP BY

Cuenta todas las


filas de la tabla

35.000
35.000/ /33

4
A. Jaime 2003

...

10.000

Cuntos empleados hay:

EMPLEADO

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


ARIO)

C20

Cuenta las filas con


salario NO nulo

C23: SELECT COUNT(*)


FROM EMPLEADO

N de empleados en el departamento Investigacin:

NO cuenta
los valores nulos

Cuntos valores de salario hay (con repeticiones):

C23: SELECT COUNT(SALARIO)


FROM EMPLEADO

**seserefiere
C22: SELECT COUNT(*)
refiereaatuplas
tuplas
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NMEROD
WHERE NOMBRED=Investigacin
EMPLEADO

Cuntos valores de salario diferentes hay:

C24:
NOMBRED

ND

NULL
DMC

NULL
5

DBD Tema 4

N_EMP SAL_MED

2
2

10
10

55

A. Jaime 2003

DBD Tema 4

56

GROUP BY con ORDER BY

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

C25: SELECT NMEROP, NOMBREP, COUNT(*)


FROM PROYECTO INNER JOIN TRABAJA_EN
ON NMEROP=NP
GROUP BY NMEROP, NOMBREP
ORDER BY COUNT(*) ASC

WHERE SALARIO>30.000
GROUP BY NOMBRED
HAVING COUNT(*) > 2
EMPLEADO
INNER JOIN
DEPARTAMENTO:

Primero
se ejecuta
WHERE

NOMBREP

SALARIO

ND

NOMBRED

Jos
Federico
Ramn
Josefa
Alicia
Jazmn
Ahmed
Jaime

35.000
40.000
38.000
25.000
25.000
43.000
25.000
55.000

5
5
5
5
4
4
4
1

Investigacin
Investigacin
Investigacin
Investigacin
Administracin
Administracin
Administracin
Direccin

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

Despus
se ejecuta
HAVING

A. Jaime 2003

...

...

ND

SALARIO

...

35.000
40.000
38.000
43.000
55.000

...

...

5
5
5
4
1

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(*) AS


NUM_EMP
FROM PROYECTO INNER JOIN TRABAJA_EN
ON NMEROP=NP
GROUP BY NMEROP, NOMBREP
ORDER BY NUM_EMP ASC

...

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

NOMBRED

...

NOMBRED

COUNT(*)

Investigacin

Investigacin
Investigacin
Investigacin
Administracin
Direccin

DBD Tema 4

...
NO
NO

57

A. Jaime 2003

CASE

En los WHEN cualquier condicin (AND, OR, ...)


Ahorro espacio almacenamiento: S/C/D/V frente
a Soltero/Casado ...

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

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

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;

es una abreviatura de CASE

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

Devuelve el primer valor NO nulo de la lista que


sigue a la palabra COALESCE

En los WHEN un valor posible del atributo

DATOS_HACIENDA

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

DBD Tema 4

58

NULLIF y COALESCE

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;

A. Jaime 2003

DBD Tema 4

K1:

NOMBRE SUELDO PARO SALARIO_SOCIAL

Matias
Marta
Maider

59

A. Jaime 2003

NULL NULL
NULL 30.000
40.000 NULL

20.000
NULL
NULL

DBD Tema 4

NOMBRE SALARIO

Matias
Marta
Maider

20.000
30.000
40.000

60

CAST (conversin de tipos)


y constructor de valor de tupla

Anlisis de consultas SQL


SELECT <atributos y funciones>
FROM <tablas>
[WHERE <condicin>]
[GROUP BY <atributos agrupacin>]
[ORDER BY <atributos ordenacin>]

WHERE DIRECTOR.FECHA_INICIO >


CAST(EMPLEADO.FECHA_ALTA_SS
AS DATE);

Convierte el campo FECHA_ALTA_SS a tipo

Tambin hay
HAVING, que
este curso no
estudiaremos

DATE

Una sola comparacin incluye todos los valores de


dos tuplas:
WHERE (NOMBRE,EDAD,ESTADO_CIVIL) =
(Jos Mara, 18, 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.

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

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

Anlisis de consultas SQL (2)

A1: INSERT INTO EMPLEADO


VALUES (Richard, K, Marini, 653298653, 1962-12-30, 98
Oak Forest, Katy, TX, H, 37000, 987654321, 4)

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.

DBD Tema 4

62

INSERT

En SQL hay varias alternativas para especificar la


misma consulta :

A. Jaime 2003

DBD Tema 4

63

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

DBD Tema 4

64

DELETE

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

A4A: DELETE FROM EMPLEADO


WHERE
APELLIDO=Brown

Una sola tabla


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

A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO,


NM_DE_EMPS, SAL_TOTAL)
SELECT NOMBRED, COUNT (*), SUM(SALARIO)
FROM DEPARTAMENTO INNER JOIN EMPLEADO
ON NMEROD=ND
GROUP BY NOMBRED;

Inserta varias tuplas (el resultado de la consulta)


Utilidad: tabla temporal donde realizar consultas
Sus datos pueden perder actualidad
Alternativa sin este problema: vista

A4B: DELETE FROM EMPLEADO


WHERE
NSS=123456789

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

UPDATE

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

67

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

A la izda se refiere al nuevo valor de SALARIO


A la dcha al valor antiguo

DBD Tema 4

66

Vistas en SQL

A5: UPDATE PROYECTO


SET
LOCALIZACINP=Bellaire, NMD=5
WHERE NMEROP=10

A. Jaime 2003

DBD Tema 4

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

68

Ejercicio: Operaciones del lgebra


EMP

DEP

NOMBRE NSS ND

NUMD NOMD

Iker
Ana
Jon
Karmele

11
22
33
44

1
1
2
2

1
2

PROY
LSI
ATC

TRAB

NP NOMBRE
1
2
3
4

NSSE NP HORAS

.NET
XML
EJB
UML

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

Ejercicio: consultas lgebra relacional


EMPRESA
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN

... SEXO

70

(8.13 (7.18) Elmasri/Navathe 02)

...

SALARIO NSS_SUPERV ND

Sobre el esquema de BD de la figura 7.7 (pg. 4):


(donde pide empleados se refiere a su nombre y apellido)

DEPARTAMENTO
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE

a) Empleados del departamento 5 que trabajan ms de


10 horas/semana en el proyecto Producto X

LOCALIZACIONES_DEPT
NMEROD LOCALIZACIND

b) Empleados con un dependiente con su mismo nombre


de pila

PROYECTO
NOMBREP NMEROP LOCALIZACINP NMD

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.

TRABAJA_EN
NSSE

DBD Tema 4

Ejercicio: consultas SQL EMPRESA

(7.18 Elmasri/Navathe 02)

EMPLEADO

NP

HORAS

DEPENDIENTE
NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO

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

A. Jaime 2003

DBD Tema 4

71

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

A. Jaime 2003

DBD Tema 4

72

Ejercicio: consultas SQL UNIVERSIDAD (2)

Ejercicio: consultas SQL UNIVERSIDAD (1)

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


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

DBD Tema 4

73

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

74

Solucin Operaciones del lgebra (1)


EMP

DEP

NOMBRE NSS ND

NUMD NOMD

Iker
Ana
Jon
Karmele

Soluciones

11
22
33
44

1
1
2
2

PROY

1
2

TRAB

NP NOMBRE

LSI
ATC

1
2
3
4

.NET
XML
EJB
UML

NSSE NP HORAS
11
11
22
22
44

1
2
1
3
3

PRY1_MAS1HORA

R1

R2 TODOS_PRY R3

NSSE NP HORAS

NSSE

NP

NP

NP

11
22

1
2
3

1
2
3
4

11
22

1
1

5
3

PRY1_MAS1HORA

5
2
3
1
4

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


Iker
Ana
Jon
Karmele

11
22
33
44

1
1
2
2

R4 EMP

1
1
2
2

NOMBRE NOMD

LSI
LSI
ATC
ATC

Iker
Ana
Jon
Karmele

LSI
LSI
ATC
ATC

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


EMPRESA

Solucin Operaciones del lgebra (2)

(Elmasri/Navathe 7.18)
EMP

DEP

NOMBRE NSS ND

NUMD NOMD

Iker
Ana
Jon
Karmele

11
22
33
44

1
1
2
2

1
2

PERS

LSI
ATC

11
22
33
44

TRAB

NP NOMBRE
1
2
3
4

NSSE NP HORAS

.NET
XML
EJB
UML

11
11
22
22
44

R6

TRB

NOMBRE NSS
Iker
Ana
Jon
Karmele

PROY

NSS

NP

11
11
22
22
44

1
2
1
3
3

1
2
1
3
3

5
2
3
1
4

NOMBRE NSS NP
Iker
Iker
Ana
Ana
Karmele

11
11
22
22
44

1
2
1
3
3

NP NOMP
1
2
3
4

.NET
XML
EJB
UML

DEP(NSS, NOMBRE) NSSE, NOMBRE-DEPENDIENTE


(DEPENDIENTE)
EMP_CON_DEP_IGUAL EMPLEADO * DEP
R2 NOMBRE,APELLIDO(EMP_CON_DEP_IGUAL )

PERS_PRY

R7

NOMBRE NSS NP NOMP

NOMBRE NOMP

Iker
Iker
Ana
Ana
Karmele

11
11
22
22
44

1
2
1
3
3

.NET
XML
.NET
EJB
EJB

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)

b) Empleados con un dependiente con su mismo nombre


de pila

PERS NOMBRE, NSS(EMP)


TRB(NSS,NP) NSSE, NP (TRAB)
R6 PERS * TRB
PRY

a) Empleados del departamento 5 que trabajan ms de


10 horas/semana en el proyecto Producto X

Iker
Iker
Ana
Ana
Karmele

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)

.NET
XML
.NET
EJB
EJB

PRY(NP,NOMP) NP, NOMBRE (PROY)


PERS_PRY R6 * PRY
R7 NOMBRE, NOMP(PERS_PRY)

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)

PERS_PRY
NOMBRE NSS NP

Usando PROY en lugar de PRY en PERS_PRY


A. Jaime 2003

DBD Tema 4

77

Todos los proyectos junto a


los empleados
que trabajan
en cada uno

DBD Tema 4

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


uno de los proyectos

Los que trabajan


en todos y cada
uno de los
proyectos

A. Jaime 2003

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

R5 NOMBRE, APELLIDO(EMPLEADO* EMPS_TODOS_PRYS)

EMP_PROY(NSS) NSSE(TRABAJA_EN)

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)

R9 NOMBRE, APELLIDO, DIRECCIN(EMPLEADO *


EMPS_BUSCADOS)

EMPS NSS(EMPLEADO)
EMPS_SIN_PRY EMPS - EMP_PROY

(1) NO se puede calcular as:

R6 NOMBRE, APELLIDO(EMPLEADO* EMPS_SIN_PRY)

g) Nombre de cada departamento junto al salario medio


de los empleados asignados al mismo
DPTO_EMP DEPARTAMENTO ||NMEROD=ND EMPLEADO

R7 NOMBRED PROMEDIO SALARIO(DPTO_EMP)

Puede haber departamentos que estn


en lugares distintos a Houston
y que tambin estn en Houston

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)

h) Salario medio de las empleadas de la empresa


EMP_FEM SEXO=M (EMPLEADO)

JEFES_SIN_DEP(NSS) JEFES (NSSE(EMPLEADO


||NSS=NSSE DEPENDIENTE))

R8 PROMEDIO SALARIO(EMP_FEM)
DBD Tema 4

i) Nombre y direccin de los empleados que trabajan en


algn proyecto situado en Houston pero cuyo
departamento no est situado all

EMP_BUSCADOS(NSS) NSSE(TRABAJA_EN * PRY_BUSCADOS)

f) Empleados que no trabajan en ningn proyecto

A. Jaime 2003

78

Alternativa vlida
79

A. Jaime 2003

DBD Tema 4

80

(1)

También podría gustarte