Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Esquema de la BD “EMPRESA”
Restricciones relacionales con restricciones de integridad referencial
Operaciones de actualización
Álgebra relacional
y violación de las RI
• Operaciones de actualización: • Operaciones para manipular relaciones enteras
– Insertar • Permiten especificar consultas (recuperación de datos)
– Eliminar • El resultado de una consulta es otra relación
– Actualizar (modificar)
• Operaciones específicas del álgebra relacional:
• Cuando se aplican no deben violar ninguna RI – SELECCIONAR
Unarios
– PROYECTAR
• Insertar y actualizar pueden violar los 4 tipos de RI – REUNIÓN (JOIN) Binario
• Eliminar sólo puede violar la I. Referencial
• Operaciones de teoría de conjuntos:
• En SQL se pueden definir acciones asociadas a la
violación de RI (ejemplo. ON UPDATE – UNIÓN
CASCADE) – INTERSECCIÓN
Binarios
– DIFERENCIA
– PRODUCTO CARTESIANO
• Otras operaciones:
– DIVISIÓN
– FUNCIONES AGREGADAS Y DE AGRUPACIÓN
– Etc.
EMPLEADO EMPLEADO
NOMBRE INIC APELLIDO NSS NSS_SUPERV ND NOMBRE INIC APELLIDO NSS SEXO SALARIO NSS_SUPERV ND
John B Smith 123456789 333445555 5 John B Smith 123456789 H 30.000 333445555 5
Franklin T Wong 333445555 888665555 5 Franklin T Wong 333445555 H 40.000 888665555 5
Alicia J Zelaya 999887777 ... 987654321 4 Alicia J Zelaya 999887777 ... M 25.000 987654321 4
Jennifer S Wallace 987654321 888665555 4 Jennifer S Wallace 987654321 M 43.000 888665555 4
Ramesh K Narayan 666884444 333445555 5 Ramesh K Narayan 666884444 H 38.000 333445555 5
Joyce A English 453453453 333445555 5 Joyce A English 453453453 M 25.000 333445555 5
Ahmad V Jabbar 987987987 987654321 4 Ahmad V Jabbar 987987987 H 25.000 987654321 4
James E Borg 888665555 nulo 1 James E Borg 888665555 H 55.000 nulo 1
• Conmutativa: σ<COND1>( σ<COND2>(R) ) = σ<COND2>( σ<COND1>(R) ) • π<LISTA1> (π<LISTA2> (R)) = π<LISTA1> (R)
• σ<COND1>( σ<COND2>(R) ) = σ<COND1> Y <COND2>(R) • No es conmutativa
÷
N D R
NOMBREP NÚMD B A A B
ProductoX 5 b1 a1 a1 b1
ProductoY 5 b1 a2 a2 b4
ProductoZ 5 b1 a3 a3
Automatización 4 b1 a4
Reorganización 1 b2 a1
Nuevos beneficios 4 b2 a3
b3 a2 X ≡ cjto. de atributos de N
DPT(NOMBRED, NÚMD) b3 a3 Y ≡ cjto. de atributos de D
← π NOMBRED, NÚMEROD(DEPARTAMENTO) b3 a4 Z ≡ cjto. de atributos de R
b4 a1
NOMBRED NÚMD Tiene que haber al b4 a2
menos un par de b4 a3 t[X] ≡ valores de los atributos
Investigación 5
atributos con el del cjto X en la tupla t
Administración 4
Dirección 1 mismo nombre
• Para cada atributo de D debe haber otro en N de igual
nombre: Y ⊆ X
Desaparece un NÚMD • El resultado tiene los atributos de N que NO están en D:
DEPTO_PROY ← PRY * DPT Z=X - Y
NOMBREP NÚMD NOMBRED • Son tuplas del resultado, t∈R, las que cumplen:
ProductoX 5 Investigación – La combinación de valores de t está en alguna tupla de
ProductoY 5 Investigación N
ProductoZ 5 Investigación – Esa combinación de valores de t se encuentra en tuplas
Automatización 4 Administración de N junto todas y cada una de las combinaciones de
Reorganización 1 Dirección valores de las tuplas de D
Nuevos beneficios 4 Administración • Es decir, t∈R si y solo si :
∀tD ∈ D ∃tN ∈ N tal que ( t = tN[Z] ∧ tD = tN[Y] )
© A. Jaime 2003 DBD Tema 4 17 © A. Jaime 2003 DBD Tema 4 18
EMP
EMP←πAPELLIDO, NSS(EM- DEP←πNOMBRED, NSS_JEFE(DE-
NSS NOM DPTO PLEADO) PARTAMENTO)
11 Alfredo LSI APELLIDO NSS NOMBRED NSS_JEFE
22 Ana LSI Smith 123456789 Investigación 333445555
33 Juan ATC NO cuenta los Wong 333445555 Administración 987654321
44 Federico nulo valores diferentes Zelaya 999887777
en el campo NOM Dirección 888665555
55 Ana LSI Wallace 987654321
para un mismo
R1←DPTO ℑ CUENTA NOM(EMP) DPTO, sino cuántas Narayan 666884444
tuplas tienen valor English 453453453
DPTO CUENTA_NOM asignado en NOM Jabbar 987987987 Reunión externa
LSI 3 para un mismo valor
de DPTO Borg 888665555 izquierda R ]×| S
ATC 1
nulo 1
Sí considera el nulo R ← ←πAPELLIDO, NOMBRED(
como valor de EMP ]×|NSS=NSS_JEFE DEP)
R2←NOM ℑ CUENTA DPTO(EMP) agrupación APELLIDO NOMBRED Conserva todas
NOM CUENTA_DPTO
Smith nulo las tuplas de
Alfredo 1 NO considera en la Wong Investigación EMP aunque sea
Ana 2 cuenta (o en el
Zelaya nulo rellenando todos
Juan 1 promedio, suma, ...)
Federico 0 los valores nulos Wallace Administración los campos
que pueda haber correspondientes
Narayan nulo
Permite especificar a DEP con
English nulo
una combinación de valores nulos
Jabbar nulo
atributos de R3←NOM, DPTO ℑ CUENTA NSS(EMP)
agrupación Borg Dirección
NOM DPTO CUENTA_NSS
Alfredo LSI 1
Ana LSI 2 Reunión externa derecha R |×[ S
Juan ATC 1
Federico nulo 1
Reunión externa completa R ]×[ S
Atributos
Atributos
( NOMBRED VARCHAR(15) NOT NULL,
CREATE SCHEMA Nombre [AUTHORIZATION Usuario]; NUMEROD INT NOT NULL,
NSS_JEFE CHAR(9) NOT NULL,
Cuenta propietaria del esquema FECHA_INIC_JEFE DATE, Clave primaria
Restricciones
Restricciones
PRIMARY KEY(NUMEROD), Integridad de entidades
UNIQUE(NOMBRED), Clave candidata
• Catálogo del SGBD: colección de esquemas en un FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
entorno SQL ); Clave extranjera (o externa)
Atributos
_SCHEMA Valor por
Atributos
CREATE TABLE DEPARTAMENTO
Tablas defecto
( NOMBRED VARCHAR(15) NOT NULL,
Elementos
Restricciones
Vistas
... NUMEROD INT NOT NULL DEFAULT ‘888665555’,
de un NSS_JEFE CHAR(9) NOT NULL,
esquema Dominios FECHA_INIC_JEFE DATE,
nombre)
Restricciones
(connombre)
Restricciones
Autorizaciones CONSTRAINT CLP_DPTO PRIMARY KEY(NUMEROD),
CONSTRAINT CLS_DPTO UNIQUE(NOMBRED),
(con
CONSTRAINT CLE_JEFES_DPTO FOREIGN KEY(NSS_JEFE)
Esquema especial que da
REFERENCES EMPLEADO(NSS)
a los usuarios autorizados
ON DELETE SET DEFAULT
información de todos los
esquemas del catálogo del ON UPDATE CASCADE
SGBD );
Acciones: a realizar en caso de borrado (ON DELETE) o
Constraint: modificación (ON UPDATE) del valor referenciado
– Restricciones de integridad (RI): sólo entre se pone
nombre a la Opciones:
relaciones del mismo catálogo del SGBD RI, para poder • CASCADE
cambiarla o
– Esquemas del catálogo del SGBD: pueden eliminarla con • SET DEFAULT
ALTER y • SET NULL
compartir elementos (por ejemplo dominios) DROP • RESTRICT (no poner ON UPDATE – ON DELETE)
– RESTRICT:borra el esquema sólo si NO contiene – En las tuplas existentes se asignan valores NULL.
Alternativas: definir DEFAULT o introducir valores con
ningún elemento la orden UPDATE (se estudiará más adelante)
– CASCADE: borra el esquema y todos sus – NOT NULL no está permitido
contenidos
• Borrar columnas:
ALTER TABLE EMPRESA.EMPLEADO DROP
• Borrar una tabla de un esquema: DIRECCIÓN CASCADE;
– CASCADE borra también las restricciones
DROP TABLE DEPENDIENTE CASCADE
(constraints) y vistas que hagan referencia a la
columna (DIRECCIÓN)
– RESTRICT: borra la tabla sólo si NO existen
– RESTRICT sólo borra la columna (DIRECCIÓN) si no
referencias a la misma:
hay restricciones ni vistas que le hagan referencia
– Desde claves externa de otra tabla
• Modificar la definición de columnas:
– Desde alguna vista ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
– CASCADE: borra tabla y todas las restricciones NSS_JEFE DROP DEFAULT;
ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
(constraints) y vistas donde haya referencias a ésta NSS_JEFE SET DEFAULT ‘333445555’;
– Elimina la definición DEFAULT ‘888665555’
– Inserta una nueva definición de DEFAULT para el
atributo NSS_JEFE
• Nombre, apellido y dirección de los empleados del • Seleccionar todos los atributos de EMPLEADO
departamento de investigación
C1Aiv: SELECT EMPLEADO.*
Calificando atributos: FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD
C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIÓN
FROM EMPLEADO, DEPARTAMENTO • Seleccionar todos los valores (incluidos los repetidos)
WHERE DEPARTAMENTO.NOMBRE = ‘Investigación’ AND de salario de EMPLEADO
DEPARTAMENTO.ND=EMPLEADO.ND
C11:SELECT ALL SALARIO Opción por
FROM EMPLEADO defecto
Utilizando alias:
Declaración
C1A’:SELECT E.NOMBRE, APELLIDO, DIRECCIÓN de alias • Seleccionar todos los diferentes valores de salario de
EMPLEADO
FROM EMPLEADO AS E, DEPARTAMENTO AS D
WHERE D.NOMBRE = ‘Investigación’ AND D.ND=E.ND C11A:SELECT DISTINCT SALARIO
Uso de alias FROM EMPLEADO
LIKE
UNION [ALL], INTERSECT [ALL] y
EXCEPT [ALL] ‘+’, ‘-’, ‘*’, ‘/’ y ‘||’
• Empleados que viven en Houston, Texas:
• Por defecto las tuplas repetidas se eliminan del
resultado C12: SELECT NOMBRE, APELLIDO
FROM EMPLEADO
• Con UNION ALL se conservan las repeticiones
WHERE DIRECCIÓN LIKE ‘%Houston, TX%’
• Se exige compatibilidad de unión
– % sustituye a un nº arbitrario de caracteres
– _ sustituye a un solo carácter
EMPLEADO DEPARTAMENTO
... APELLIDO NSS ... NOMBRED NÚMEROD NSS_JEFE ...
EMPLEADO
TRABAJA_EN PROYECTO
NOMBRE ... APELLIDO NSS ... SALARIO ...
NSSE NP ... ... NÚMEROP ... NÚMD
TRABAJA_EN PROYECTO
NSSE NP ... NOMBREP NÚMEROP
...
• Números de proyecto donde participa Smith como
trabajador o como jefe del departamento controlador:
• Nombre y salario de los empleados que trabajan en
C4: SELECT NUMEROP
‘ProductoX’ tras aumentarles el sueldo un 10% :
FROM PROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIO
APELLIDO=‘Smith’ FROM EMPLEADO, TRABAJA_EN, PROYECTO
UNION WHERE NSS=NSSE AND NP=NÚMEROP AND
SELECT NP NOMBREP=‘ProductoX’
BETWEEN:
EMPLEADO TRABAJA_EN • Información de los empleados cuyo salario está entre
NOMBRE ... APELLIDO NSS ... ND NSSE NP ... 30.000 y 40.000
DEPARTAMENTO PROYECTO SELECT *
FROM EMPLEADO
NOMBRED NÚMEROD NSS_JEFE ... NOMBREP NÚMEROP
... NÚMD WHERE (SALARIO BETWEEN 30000 AND 40000)
3 aba 8 aba
5 aba 8 aba ( SELECT NP FROM PROYECTO AS P
Proyectos en WHERE NOT EXISTS
los que no ( SELECT *
trabaja el FROM TRABAJA_EN
empleado T1
WHERE T1.NSSE = T2.NSSE AND
P.NP=T2.NP)
) Tuplas del proyecto
P y del empleado T1
© A. Jaime 2003 DBD Tema 4 43 © A. Jaime 2003 DBD Tema 4 44
IS NULL e IS NOT NULL Ejemplos con valor null
Ejemplos con valor null (2) Renombrar atributos del resultado con AS
Código de
vendedor Ventas
Cod Vendedor Vendido Cuota C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO,
1 Juan 1000 1000 S.APELLIDO AS NOMBRE_SUPERVISOR
2 María 1500 1000 FROM EMPLEADO AS E, EMPLEADO AS S
3 Jesús 500 Null
WHERE E.NSS_SUPERV = S.NSS
4 Ana 1000 1200
5 Aitor 1100 1000
6 Leire 2000 Null – Cambia el nombre de cualquier columna
(atributo) que aparezca en el resultado
SELECT SUM(CU) AS C1, COUNT(CU) AS C2 , COUNT(*) AS C3
FROM Ventas AS V(CD,VR,VD,CU)
– Antes hemos visto que la construcción AS
WHERE Vendido=500 OR Vendido=2000 también sirve para declarar alias de tablas:
EMPLEADO
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ...
... APELLIDO NSS FECHA_NCTO DIRECCIÓN ...
... SEXO SALARIO NSS_SUPERV ND
DEPARTAMENTO DEPARTAMENTO PROYECTO
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE ... NÚMD NSS_JEFE ... ... NÚMEROP LOCALIZACIÓNP NÚMD
ON ND=NÚMEROD) AS ED ...
• COUNT (cuenta), SUM (suma), MAX (máximo), MIN • Cuántos valores de salario diferentes hay:
(mínimo), AVG (media) C23: SELECT COUNT(DISTINCT SALARIO)
dominio con
– Con expresiones : AVG(1.1*SALARIO) orden total FROM EMPLEADO NO cuenta
los valores nulos
– MAX y MIN también con atributos NO numéricos
• Cuántos valores de salario hay (con repeticiones):
• Suma de salarios del dpto. ‘Investigación’, junto a los
C23’: SELECT COUNT(SALARIO) Cuenta las filas con
salarios máximo, mínimo y medio:
FROM EMPLEADO salario NO nulo
C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),
AVG(SALARIO)
• Cuántos empleados hay:
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NÚMEROD C23’’: SELECT COUNT(*) Cuenta todas las
WHERE NOMBRED=‘Investigación’ FROM EMPLEADO filas de la tabla
DEPARTAMENTO 7
EMPLEADO Alicia 10.000 4
NOMBRED NÚMEROD C23’’:
NOMBREP SALARIO ND Jennifer 20.000 4 COUNT( *)
Investigación 5
John NULL 5
Administración 4 ... Ahmad
James
20.000
20.000
4
1
8
Franklin 15.000 5 Dirección 1
Ramesh
Joyce
... 10.000
10.000
... 5
5 SUM(SA- MAX(SA- MIN(SA- AVG(SAL-
Alicia 10.000 4 C20 LARIO) LARIO) LARIO) ARIO) ¿Qué ocurre cuando todos los salarios valen NULL?
Jennifer 20.000 4 35.000 15.000 10.000 11.666 ¿Qué ocurre cuando la tabla está vacía?
Ahmad 20.000 4
James 20.000 1 C22 COUNT(*) 35.000
35.000/ /33
4
© A. Jaime 2003 DBD Tema 4 53 © A. Jaime 2003 DBD Tema 4 54
• Nº de empleados con salario>30.000 en cada dpto. • Obtener por cada proyecto su número y nombre
Sólo para dptos. con más de 2 empleados con ese junto al número de empleados que trabajan en él,
sueldo ordenado ascendentemente por el número de
SELECT NOMBRED, COUNT(*) empleados
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
C25’: SELECT NÚMEROP, NOMBREP, COUNT(*)
ND = NÚMEROD
FROM PROYECTO INNER JOIN TRABAJA_EN
WHERE SALARIO>30.000
ON NÚMEROP=NP
GROUP BY NOMBRED
GROUP BY NÚMEROP, NOMBREP
HAVING COUNT(*) > 2 ORDER BY COUNT(*) ASC
WHERE (C1, C2, C3) < (T1, T2, T3) – Esta NO es una forma eficiente de implementar
una consulta SQL. Así pues, cada SGBD tiene
equivale a: rutinas para optimizar la evaluación.
WHERE C1<T1 OR
(C1=T1 AND C2<T2) OR
(C1=T1 AND C2=T2 AND C3<T3)
• En SQL hay varias alternativas para especificar la A1: INSERT INTO EMPLEADO
misma consulta : VALUES (‘Richard’, ‘K’, ‘Marini’, ‘653298653’, ‘1962-12-30’, ’98
Oak Forest, Katy, TX’, ‘H’, 37000, ‘987654321’, 4)
– Mismo orden en el que se especificaron los atributos
– Ventaja: el programador elige la técnica que le en CREATE TABLE
resulte más cómoda.
A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, NSS)
– Desde el punto de vista de optimización de VALUES (‘Richard’, ‘Marini’, ‘653298653’)
consultas, conviene que las consultas tengan el – Así los atributos con valor NULL o DEFAULT se
menor anidamiento y el menor ordenamiento pueden omitir
implícito posible. – Los valores de VALUES en el mismo orden que se
especifican los atributos en INSERT INTO
– Desventaja: el programador puede desconocer – También se pueden incluir varias tuplas en la misma
cuál es la técnica más eficiente en cada caso instrucción: INSERT ... INTO ... VALUES (tupla1), (tupla2),
... (tuplaN)
– Idealmente, el SGBD debería procesar la consulta
de la misma manera sin importar cómo se haya A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND)
escrito. VALUES (‘Robert’, ‘Hatcher’, ‘980760540’, 2)
– Rechazada por la inexistencia del departamento
– En la práctica esto resulta muy difícil, y es número 2
conveniente que el usuario sea consciente de qué
A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND)
construcciones tienen un costo más elevado que
VALUES (‘Robert’, ‘Hatcher’, 5)
otras.
– Rechazada por no proporcionar valor para NSS
(clave primaria: NOT NULL)
A5: UPDATE PROYECTO • Una vista es una tabla derivada de otras tablas (que
SET LOCALIZACIÓNP=‘Bellaire’, NÚMD=5 pueden ser tablas de base u otras vistas).
WHERE NÚMEROP=10
• Tipos de vista:
– Una sola tabla
– Tabla virtual: se calcula, no se almacena en la
– WHERE: selección de tuplas a modificar BD. Siempre está al día: sus “tuplas” se crean
– SET: atributos a modificar y nuevos valores cuando se realiza una consulta sobre la vista.
– SET: el nuevo valor puede ser NULL o DEFAULT – Vista materializada: se crea una físicamente una
– Modificaciones de clave primaria pueden tabla cuando se consulta por primera vez. Se
propagarse a clave/s extranjera/s (debido a las pueden hacer sucesivas consultas sobre esa tabla.
acciones declaradas en la RI, como CASCADE) Hay técnicas para mantener la vista actualizada de
forma incremental.
• Ejemplo de creación de la vista TRABAJA_EN_1:
A6: UPDATE EMPLEADO CREATE VIEW TRABAJA_EN_1
SET SALARIO=SALARIO*1.1 AS SELECT NOMBRE, APELLIDO, NOMBREP, HORAS
WHERE ND IN (SELECT NÚMEROD FROM (EMPLEADO INNER JOIN TRABAJA_EN ON
NSS=NSSE) INNER JOIN PROYECTO ON NP=NUMEROP
FROM DEPARTAMENTO
WHERE NOMBRED= ‘Investigación’) • La vista se puede usar en consultas:
SELECT NOMBRE, APELLIDO
– A la izda se refiere al nuevo valor de SALARIO
FROM TRABAJA_EN_1
– A la dcha al valor antiguo WHERE NOMBREP=‘ProyectoX’
• Para borrar una vista: DROP VIEW TRABAJA_EN_1
• Una vista tiene limitaciones para actualizar sus tuplas
como si fuese una tabla, ya que puede corresponder a
varias actualizaciones de las tablas de base.
Departamento DepNom Director Presupuesto Centro Departamento DepNom Director Presupuesto Centro
Asignatura Código AsigNom Curso Créditos SuDpto Asignatura Código AsigNom Curso Créditos SuDpto
AlumAsig Alum Asig Nota Convocatoria Código AlumAsig Alum Asig Nota Convocatoria Código
Alumno DNI AlumNom Tfno Ciudad Edad Alumno DNI AlumNom Tfno Ciudad Edad
a) Por cada curso, obtener el alumno con mejor nota media g) Nombre de los alumnos que han obtenido como nota
en las asignaturas de este curso. SOBRESALIENTE en al menos dos asignaturas de
cualquiera de los cursos en los que hayan estado
b) Obtener el DNI de los alumnos que están “limpios” en
matriculados (sin utilizar funciones agregadas).
3º curso, es decir, que están matriculados en 3º y tienen
aprobadas todas las asignaturas de cursos inferiores. h) Obtener, sin usar funciones agregadas, el nombre de
los alumnos que están matriculados sólo de
c) DNI de los alumnos que están matriculados de
asignaturas del departamento DMC.
ALGUNA asignatura de tercero y tienen aprobadas
TODAS las asignaturas de segundo. i) Obtener, sin usar funciones agregadas, el nombre de
los alumnos matriculados en alguna asignatura de
d) Obtener el DNI de los alumnos matriculados en al
tercer curso que no tengan ninguna matrícula en
menos una asignatura de cada uno de los departamentos
asignaturas de segundo curso.
de Informática.
j) Para cada asignatura del departamento DMC con más
e) Obtener el nombre de los alumnos que están
de 10 alumnos matriculados, obtener el código de la
matriculados en sexta convocatoria en al menos dos
asignatura y el número de convocatoria media en la
asignaturas (sin utilizar funciones agregadas).
que se encuentran los alumnos de Arnedo
f) Obtener el DNI de los alumnos que están matriculados
k) Obtener el nombre de los alumnos de Nájera mayores
de todas las asignaturas de 3º y de alguna otra asignatura
de 20 años que se encuentran matriculados en alguna
de cursos inferiores.
asignatura de tercero
© A. Jaime 2003 DBD Tema 4 73 © A. Jaime 2003 DBD Tema 4 74
PRY1_MAS1HORA R1 R2 TODOS_PRY R3
NSSE NP HORAS NSSE NP NP NP
Soluciones
11 1 5 11 1 1 4
22 1 3 22 2 2
3 3
4
PRY1_MAS1HORA← σNP=1 Y HORAS>1 (TRAB)
R1 ← πNSS (PRY1_MAS1HORA)
R2← πNP (TRAB)
TODOS_PRY ← πNP (PROY)
R3←TODOS_PRY - R2
R4 R5
NOMBRE NSS ND NUMD NOMD NOMBRE NOMD
Iker 11 1 1 LSI Iker LSI
Ana 22 1 1 LSI Ana LSI
Jon 33 2 2 ATC Jon ATC
Karmele 44 2 2 ATC Karmele ATC
e) Nombres de todos los empleados que trabajan en cada i) Nombre y dirección de los empleados que trabajan en
uno de los proyectos algún proyecto situado en Houston pero cuyo
PRY_EMPS(NOMP,NSS) ← πNOMBREP, NSSE( departamento no está situado allí
Todos los pro-
los empleados
yectos junto a
en cada uno
que trabajan
TODOS_DPTOS ← πNÚMEROD(DEPARTAMENTO)
en todos y cada
EMPS_TODOS_PRYS(NSS)← πNP,NSSE(TRABAJA_EN) ÷
proyectos
uno de los