Tema 5. SQL El estándar de las Bases de Datos Relacionales

Anuncio
Tema 5. SQL
El estándar de las Bases de Datos Relacionales
Elmasri/Navathe 07
• Definición de datos y restricciones (CREATE TABLE),
y cambios en el esquema (DROP y ALTER)
• Consultas (SELECT...FROM...WHERE) → restringidas *
• Actualización (INSERT, DELETE, UPDATE)
restringidas *
En este curso NO se cubren todos los aspectos de SELECT.
No se estudian, por ejemplo, SELECT anidados o la cláusula HAVING
(consultar el temario de la asignatura).
En el examen NO se admiten soluciones que incluyan aspectos de
SQL no cubiertos en la asignatura.
FBD Tema 5 – Dpto. LSI - Donostia
1
SQL
(Structured Query Language)
•
•
Álgebra relacional → orden de las operaciones
SQL: lenguaje declarativo →
– Se indica cuál es el resultado esperado
– Permite que el SGBD seleccione las operaciones y
el orden más adecuados para obtener el resultado:
optimización
•
•
SGBD comerciales → son variantes de SQL
Estándares SQL: SQL1 1986, SQL2 1992, SQL3
(extiende SQL2 con conceptos de BD y OO)
•
SQL:
– Lenguaje de Definición de Datos (LDD)
– Lenguaje de Manipulación de Datos (LMD):
consulta y actualización
– Definición de vistas
– Especificación de seguridad y autorización
– Definición de restricciones de integridad
– Especificación de control de transacciones
– Reglas para inclusión en lenguajes (C, PASCAL,...)
•
Nos centraremos en SQL2
SQL
Tabla
Fila
Columna
Mod. Relacional
Relación
Tupla
Atributo
FBD Tema 5 – Dpto. LSI - Donostia
2
Esquema y catálogo en SQL2
•
Esquema de BD: el término se incorporó en SQL2
CREATE SCHEMA Nombre [AUTHORIZATION Usuario];
Cuenta propietaria del esquema
•
Catálogo del SGBD: colección de esquemas en un
entorno SQL
Catálogo del SGBD
Esquema 1
Esquema 2
INFORMATION
_SCHEMA
Tablas
Elementos
de un
esquema
Restricciones
Vistas
Dominios
...
Autorizaciones
Esquema especial que da
a los usuarios autorizados
información de todos los
esquemas del catálogo del
SGBD
– RI: sólo entre relaciones del mismo catálogo del
SGBD
– Esquemas del catálogo del SGBD: pueden
compartir elementos (por ejemplo dominios)
FBD Tema 5 – Dpto. LSI - Donostia
3
Instrucción CREATE TABLE
Restricciones
Restricciones
(con
nombre)
(con nombre)
Atributos
Atributos
Restricciones
Restricciones
Atributos
Atributos
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)
Fig 8.1(b)
CREATE TABLE DEPARTAMENTO
( NOMBRED
VARCHAR(15) NOT NULL,
Valor por
defecto
NUMEROD
INT
NOT NULL DEFAULT ‘888665555’,
NSS_JEFE
FECHA_INIC_JEFE
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
modificación (ON UPDATE) del valor referenciado
Constraint:
se pone
nombre a la
RI, para poder
cambiarla o
eliminarla con
ALTER y
DROP
Opciones:
• CASCADE
• SET DEFAULT
• SET NULL
• RESTRICT (no poner ON UPDATE – ON DELETE)
FBD Tema 5 – Dpto. LSI - Donostia
4
Tipos de datos en SQL2
Enteros de diversos tamaños:
– INTEGER / INT
– SMALLINT
Reales:
– FLOAT
– REAL
– DOUBLE PRECISION
Números con formato:
– NUMERIC(i,j)
– DECIMAL(i,j) / DEC(i,j)
– i dígitos enteros y j dígitos
decimales
– Por defecto: i según la
implementación, j=0
Cadena de caracteres de longitud
fija:
– CHAR(n)
– CHARACTER(n)
Cadena de caracteres de longitud
variable:
– CHARACTER
VARYING(n)
– VARCHAR(n)
– CHAR VARYING(n)
– n=máximo definido. Por
defecto n=1
Cadena de bits de longitud fija:
– BIT(n)
– n = número de bits
– Por defecto n=1
Cadena de bits de longitud
variable:
– BIT VARYING(n)
– n=máximo definido. Por
defecto n=1
Fecha:
– DATE
– Sólo admite fechas válidas
– Generalmente YYYY-MMDD
– Componentes: YEAR,
MONTH, DAY
Hora:
– TIME(i)
– Sólo admite horas válidas
– Normalmente HH-MM-SS
– Componentes: HOUR,
MINUTE, SECOND
– i = posiciones de fracciones
de sg.
Hora con desplazamiento de huso
horario:
– TIME WITH TIME ZONE
– +13:00 a -12:59
– Sin ‘WITH TIME ZONE’:
huso local de la sesión
Marca de tiempo:
– TIMESTAMP [WITH
TIME ZONE]
– Componentes: DATE, TIME
y mínimo 6 posiciones de
fracciones de sg.
Intervalo de tiempo:
– INTERVAL
– valor relativo (de tiempo)
para incrementar o
decrementar a un valor de
fecha, hora o marca de
tiempo
– Se pueden calificar con
YEAR/MONTH o
DAY/TIME (unidad
mayor/unidad menor)
FBD Tema 5 – Dpto. LSI - Donostia
5
Dominios en SQL2
•
Un dominio es un tipo de datos definido por el
usuario
CREATE DOMAIN TIPO_NSS AS CHAR(9);
•
En CREATE TABLE se pueden usar para definir
atributos:
CREATE TABLE EMPLEADO
( NSS TIPO_NSS NOT NULL, ...
•
DEFAULT:
– CREATE DOMAIN TIPO_NSS AS CHAR(9)
DEFAULT ‘987654321’;
– Valor por defecto de los atributos declarados
con ese dominio
– si no se especifica ‘DEFAULT’ el valor por
defecto es NULL
FBD Tema 5 – Dpto. LSI - Donostia
6
CREATE TABLE:
especificación de restricciones y valores por omisión
•
•
Definición de atributos:
–
NOT NULL:
no se permite que el atributo tome valor nulo
–
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
DEFAULT
Especificación 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
);
FBD Tema 5 – Dpto. LSI - Donostia
7
CREATE TABLE:
especificación de restricciones y valores por omisión (2)
FOREIGN KEY (clave extranjera):
•
Acciones posibles (en ON DELETE / ON UPDATE):
– SET NULL: el valor de clave extranjera en cuestión se
sustituye por el valor nulo
– SET DEFAULT: el valor de clave extranjera en cuestión 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 modificación en las
claves extranjeras que la realizada sobre la clave primaria a la
que hacen referencia.
CASCADE es adecuada para:
• vínculos (TRABAJA_EN)
• atributos multivaluados (LOCALIZACIONES_DEPT)
• tipos de entidad débiles (DEPENDIENTE)
– RESTRICT (cuando NO se pone ON DELETE / ON UPDATE):
impide el borrado (si falta ON DELETE) o la modificación (si
falta ON UPDATE) de cualquier tupla referenciada desde un valor
de la clave extranjera en cuestión.
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
);
FBD Tema 5 – Dpto. LSI - Donostia
8
Borrar esquemas (DROP SCHEMA)
y borrar tablas (DROP TABLE)
•
Borrar un esquema completo:
DROP SCHEMA EMPRESA CASCADE
– RESTRICT:borra el esquema sólo si NO contiene
ningún elemento
– CASCADE: borra el esquema y todos sus
contenidos
•
Borrar una tabla de un esquema:
DROP TABLE DEPENDIENTE CASCADE
– RESTRICT: borra la tabla sólo si NO existen
referencias a la misma:
– Desde claves externa de otra tabla
– Desde alguna vista
– CASCADE: borra tabla y todas las restricciones
(constraints) y vistas donde haya referencias a ésta
FBD Tema 5 – Dpto. LSI - Donostia
9
Evolución del esquema: columnas
(ALTER TABLE)
•
Añadir columnas:
ALTER TABLE EMPRESA.EMPLEADO ADD PUESTO
VARCHAR(12);
– En las tuplas existentes se asignan valores NULL.
Alternativas: definir DEFAULT o introducir valores con
la orden UPDATE (se estudiará más adelante)
– NOT NULL no está permitido
•
Borrar columnas:
ALTER TABLE EMPRESA.EMPLEADO DROP
DIRECCIÓN CASCADE;
borra también las restricciones
(constraints) y vistas que hagan referencia a la
columna (DIRECCIÓN)
– CASCADE
sólo borra la columna (DIRECCIÓN) si no
hay restricciones ni vistas que le hagan referencia
– RESTRICT
•
Modificar la definición de columnas:
ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
NSS_JEFE DROP DEFAULT;
ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
NSS_JEFE SET DEFAULT ‘333445555’;
– Elimina la definición DEFAULT ‘888665555’
– Inserta una nueva definición de DEFAULT para el
atributo NSS_JEFE
FBD Tema 5 – Dpto. LSI - Donostia
10
Evolución del esquema: restricciones (constraints)
(ALTER TABLE)
•
Borrar restricciones:
ALTER TABLE EMPRESA.EMPLEADO DROP
CONSTRAINT CLE_SUPERV_EMP;
– Es preciso haberle dado un nombre con
CONSTRAINT en la definición (por ejemplo en
CREATE TABLE)
•
Añadir restricciones:
ALTER TABLE EMPRESA.EMPLEADO ADD
CONSTRAINT CLE_SUPERV_EMP
FOREIGN KEY (NSS_SUPERV) REFERENCES
EMPLEADO(NSS)
ON DELETE SET NULL
ON UPDATE CASCADE;
FBD Tema 5 – Dpto. LSI - Donostia
11
OPERACIONES DE ACTUALIZACIÓN
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
– También se pueden incluir varias tuplas en la misma
instrucción: 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
número 2
A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND)
VALUES (‘Robert’, ‘Hatcher’, 5)
– Rechazada por no proporcionar valor para NSS
(clave primaria: NOT NULL)
FBD Tema 5 – Dpto. LSI - Donostia
12
OPERACIONES DE ACTUALIZACIÓN
INSERT (2)
A3A: CREATE TABLE INFO_DEPTOS (
NOMBRE_DEPTO VARCHAR(15),
NÚM_DE_EMPS INTEGER,
SAL_TOTAL INTEGER);
A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO,
NÚM_DE_EMPS, SAL_TOTAL)
SELECT NOMBRED, COUNT (*), SUM(SALARIO)
FROM DEPARTAMENTO INNER JOIN EMPLEADO
ON NÚMEROD=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
FBD Tema 5 – Dpto. LSI - Donostia
13
OPERACIONES DE ACTUALIZACIÓN
DELETE
A4A: DELETE FROM EMPLEADO
WHERE
APELLIDO=‘Brown’
– Una sola tabla
– WHERE: selección de tuplas a eliminar
– El borrado se puede propagar (RI referencial)
A4B: DELETE FROM EMPLEADO
WHERE
NSS=‘123456789’
A4C: DELETE FROM EMPLEADO
WHERE
ND IN
(SELECT NÚMEROD
FROM DEPARTAMENTO
WHERE NOMBRED=‘Investigación’)
A4D: DELETE FROM EMPLEADO
– Sin WHERE se borran todas las tuplas (quedaría
la tabla vacía)
– Usando DROP TABLE se hubiera eliminado
además la definición de la tabla
FBD Tema 5 – Dpto. LSI - Donostia
14
OPERACIONES DE ACTUALIZACIÓN
UPDATE
A5: UPDATE PROYECTO
SET
LOCALIZACIÓNP=‘Bellaire’, NÚMD=5
WHERE NÚMEROP=10
– Una sola tabla
– WHERE: selección 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 NÚMEROD
FROM DEPARTAMENTO
WHERE NOMBRED= ‘Investigación’)
– A la izda se refiere al nuevo valor de SALARIO
– A la dcha al valor antiguo
FBD Tema 5 – Dpto. LSI - Donostia
15
Consultas básicas
SELECT columnas
FROM tablas
[WHERE condición]
•
El
Eltemario
temariode
deFBD
FBDNO
NOcubre
cubre
todos
los
aspectos
de
SELECT
todos los aspectos de SELECT. .
En
NOestudiaremos
estudiaremos
Enparticular
particularNO
SELECT
SELECTanidados
anidados
Fecha de nacimiento y dirección de John Smith
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
...
...
SEXO SALARIO NSS_SUPERV ND
πFECHA_NCTO, DIRECCIÓN (1)
C0: SELECT FECHA_NCTO, DIRECCIÓN
FROM EMPLEADO
WHERE NOMBRE=‘John’ AND (1) = σNOMBRE=‘John’ Y
APELLIDO=‘Smith’(EMPLEADO)
APELLIDO=‘Smith’
– Secuencia σ- π
– Condiciones en WHERE:
{=, <>, <, >, <=, >=}, AND, OR, NOT
El resultado de una
consulta SQL
puede contener ...
tuplas repetidas
FBD Tema 5 – Dpto. LSI - Donostia
16
Consultas básicas (2)
•
Nombre y dirección de los empleados del departamento
de Investigación
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
...
...
SEXO SALARIO NSS_SUPERV ND
DEPARTAMENTO
NOMBRED NÚMEROD NSS_JEFE
FECHA_INIC_JEFE
πNOMBRE, APELLIDO, DIRECCIÓN (2)
C1: SELECT NOMBRE, APELLIDO, DIRECCIÓN
FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=‘Investigación’ AND NÚMEROD=ND
(2) = σNOMBRED=‘Investigación’ (1)
(1) = DEPARTAMENTO |×|NÚME-
ROD=ND EMPLEADO
– Secuencia: |×| - σ - π
– WHERE:condiciones
de σ y |×|
FBD Tema 5 – Dpto. LSI - Donostia
17
Consultas básicas (3)
•
Nº de proyecto, nº de departamento que lo controla,
apellido, dirección y fecha de nacimiento del jefe del
departamento, de todos los proyectos realizados en
‘Stafford’
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
DEPARTAMENTO
NOMBRED NÚMEROD NSS_JEFE
FECHA_INIC_JEFE
PROYECTO
NOMBREP NÚMEROP LOCALIZACIÓNP
NÚMD
4
πNÚMEROP, NÚMD, APELLIDO, DIRECCIÓN, FECHA_NCTO (JEFE_DP_PR)
C2: SELECT NÚMEROP, NÚMD , APELLIDO, DIRECCIÓN,
FECHA_NCTO
FROM PROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND
LOCALIZACIÓNP=‘Stafford’
1
PR_STF ←
σLOCALIZACIÓNP=‘Stafford’(PROYECTO)
2
DP_CN←
PR_STF |×|NÚMD=NÚMEROD DEPARTAMENTO
3
JEFE_DP_PR←
DP_CN |×| NSS_JEFE
= NSS EMPLEADO
FBD Tema 5 – Dpto. LSI - Donostia
18
...
Calificar atributos
•
Nombre, apellido y dirección de los empleados del
departamento de investigación
C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIÓN
FROM
EMPLEADO,
DEPARTAMENTO
WHERE DEPARTAMENTO.NOMBRE = ‘Investigación’ AND
DEPARTAMENTO.NÚMEROD=EMPLEADO.NÚMEROD
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
...
...
SEXO SALARIO NSS_SUPERV NÚMEROD
DEPARTAMENTO
NOMBRE NÚMEROD NSS_JEFE
FECHA_INIC_JEFE
– Con EMPLEADO.NOMBRE se distingue el atributo
NOMBRE
de la tabla EMPLEADO del atributo
NOMBRE
de la tabla DEPARTAMENTO
FBD Tema 5 – Dpto. LSI - Donostia
19
Alias
•
Nombre y apellido de cada empleado junto al nombre y
apellido de su supervisor
EMPLEADO S
NOMBRE INIC APELLIDO NSS FECHA_NCTO
...
NSS_SUPERV ND
...
NSS_SUPERV ND
EMPLEADO E
NOMBRE INIC APELLIDO NSS FECHA_NCTO
C8: SELECT E.NOMBRE, E.APELLIDO, S.NOMBRE, S.APELLIDO
Uso de alias
FROM EMPLEADO E, EMPLEADO S
WHERE E.NSS_SUPERV=S.NSS
Declaración de alias
Uso de alias
– Admite varias referencias a una misma tabla (útil para
consultas recursivas de un nivel)
– E y S representan dos copias diferentes de la tabla
EMPLEADO, pero no hay más que una copia de EMPLEADO
en la BD
•
Para cambiar los nombres de atributo:
FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR,
SEX, SAL, NSSS, ND), ...
•
•
Se pueden usar alias aunque no haya varias referencias a
una misma tabla→ para manejar nombres más cortos
Por ejemplo, C1A se puede escribir:
C1B:SELECT E.NOMBRE, E.APELLIDO, E.DIRECCIÓN
FROM EMPLEADO E, DEPARTAMENTO D
WHERE D.NOMBRE = ‘Investigación’ AND
D.NÚMEROD=E.NÚMEROD
FBD Tema 5 – Dpto. LSI - Donostia
20
Omisión de WHERE
•
•
•
Indica selección de tuplas incondicional
Equivale a WHERE TRUE
Producto cartesiano:
sin WHERE y más de una relación en FROM
•
NSS de todos los empleados:
C9: SELECT NSS
FROM EMPLEADO
•
Combinaciones posibles de NSS de empleados con
nombres de departamento:
C10: SELECT NSS, NOMBRED
FROM EMPLEADO , DEPARTAMENTO
•
Es importante especificar todas las condiciones de
σ y |×| en WHERE ya que el resultado puede ser
una tabla incorrecta y de gran tamaño
FBD Tema 5 – Dpto. LSI - Donostia
21
SELECT *
•
Selecciona todos los atributos de las tablas de FROM
C1C:SELECT *
FROM EMPLEADO
WHERE ND=5
C1D:SELECT *
FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=‘Investigación’ AND
ND=NÚMEROD
C10A:SELECT *
FROM EMPLEADO, DEPARTAMENTO
•
También se puede usar en SELECT la calificación de
atributos con *. Ejemplo: EMPLEADO.*
FBD Tema 5 – Dpto. LSI - Donostia
22
DISTINCT y ALL
C11:SELECT ALL SALARIO
FROM EMPLEADO
•
Poner SELECT ALL es lo
mismo que poner sólo SELECT
(sin DISTINCT)
SQL NO elimina automáticamente tuplas repetidas
porque:
– Es una operación costosa: ordenar+eliminar
duplicados
– El usuario puede desear ver las tuplas repetidas
– Usando funciones agregadas suele interesar no
eliminarlos. Ejemplo: al calcular el salario
medio, NO interesa considerar únicamente los
valores de salario diferentes entre sí
C11:SELECT DISTINCT SALARIO
FROM EMPLEADO
•
Si sólo nos interesan los salarios distintos
SELECT DISTINCT SALARIO, APELLIDO
FROM EMPLEADO
•
En el resultado:
– Puede haber dos filas con el mismo salario.
– No puede haber dos filas con igual salario y
apellido
FBD Tema 5 – Dpto. LSI - Donostia
23
UNION y UNION ALL
INTERSECT e INTERSECT ALL
EXCEPT y EXCEPT ALL
•
En SQL existen las operaciones UNION (∪),
INTERSECT (∩) y EXCEPT (resta).
•
Por defecto las tuplas repetidas se eliminan del
resultado
Usando UNION ALL se conservan las repeticiones
Se exige compatibilidad de unión (ver en tema anterior)
•
•
•
Números de proyecto donde participa Smith como
trabajador o como jefe del departamento controlador:
C4: SELECT NUMEROP
FROM
PROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND
APELLIDO=‘Smith’
UNION
SELECT NP
FROM
TRABAJA_EN, EMPLEADO
WHERE NSSE=NSS AND APELLIDO=‘Smith’
FBD Tema 5 – Dpto. LSI - Donostia
24
Comparar subcadenas
(LIKE en WHERE)
•
Empleados que viven en Houston, Texas:
C12: SELECT NOMBRE, APELLIDO
FROM EMPLEADO
WHERE DIRECCIÓN LIKE ‘%Houston, TX%’
– Compara parte de una cadena de caracteres
(DIRECCIÓN)
– % sustituye a un nº arbitrario de caracteres
– _ sustituye a un solo carácter
•
Empleados que nacieron en la década de 1950:
C12A: SELECT NOMBRE, APELLIDO
FROM EMPLEADO
WHERE FECHA_NCTO LIKE ’195_ _ _ _ _ _ _’
FBD Tema 5 – Dpto. LSI - Donostia
25
Operaciones aritméticas: ‘+’, ‘-’, ‘*’, ‘/’
y operación de concatenación: ‘||’
•
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=NÚMEROP AND
NOMBREP=‘ProductoX’
– ‘+’, ‘-’,’*’ y ‘/’ son operadores aritméticos
– ‘||’ concatena cadenas de caracteres. Ejemplo:
SELECT ‘Nombre=‘ || NOMBRE
– ‘+’, ‘-’ también sirven para sumar/restar a una
fecha, hora o marca de tiempo, un intervalo
compatible
– Se puede calcular un intervalo como la
diferencia entre fechas, horas o marcas de
tiempo
¿Qué produce 1.1 * SALARIO cuando SALARIO vale
NULL?
FBD Tema 5 – Dpto. LSI - Donostia
26
Ordenación de tuplas
(ORDER BY)
•
Empleados y proyectos donde trabajan, ordenados por
departamento y, dentro de cada departamento, ordenados
alfabéticamente por apellido y nombre :
C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREP
FROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN,
PROYECTO
WHERE NÚMEROD=ND AND NSS=NSSE AND NP=NÚMEROP
ORDER BY NOMBRED, APELLIDO, NOMBRE
– Por defecto, el orden es ascendente
– DESC indica orden descendente
– ASC indica orden ascendente
ORDER BY
NOMBRED DESC, APELLIDO ASC,
NOMBRE ASC
FBD Tema 5 – Dpto. LSI - Donostia
27
Operador BETWEEN y
conjuntos explícitos de valores
Operador BETWEEN:
• Información de los empleados del departamento 5
cuyo salario está entre 30.000 y 40.000
C14: SELECT *
FROM EMPLEADO
WHERE (SALARIO BETWEEN 30000 AND 40000)
AND ND=5
– La condición de WHERE es equivalente a:
SALARIO >= 30000 AND SALARIO <= 40000 AND ND=5
Conjuntos explícitos 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)
– El conjunto explícito se encierra entre paréntesis
•
La consulta anterior utilizando BETWEEN:
C14’: SELECT DISTINCT NSSE
FROM TRABAJA_EN
WHERE NÚMP BETWEEN 1 AND 3
FBD Tema 5 – Dpto. LSI - Donostia
28
IS NULL e IS NOT NULL
•
Nombre y apellido de empleados sin supervisores
C18: SELECT NOMBRE, APELLIDO
FROM EMPLEADO
WHERE NSS_SUPERV IS NULL
– En lugar de = y ≠ se usa IS e IS NOT
– SQL considera el valor nulo de diferente forma
– Las tuplas con valores nulos en el atributo de
reunión no se incluyen en el resultado (salvo en
reunión externa)
•
Si pusiera WHERE NSS_SUPERV = NULL
– Para las filas con NSS_SUPERV nulo se estaría
comparando si NULL = NULL
– Esta comparación NO devuelve cierto
– Tampoco devuelve falso
– La comparación devuelve NULL (UNKNOWN)
Una condición puede NO verificarse
por FALSE o por NULL
•
Cualquier cosa operada con NULL devuelve NULL
(UNKNOWN)
FBD Tema 5 – Dpto. LSI - Donostia
29
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 construcción AS
también sirve para declarar alias de tablas:
FROM
EMPLEADO E, ...
SQL1
SQL2
FROM
EMPLEADO AS E, ...
SQL2
FROM EMPLEADO AS E(NP, IN, AP,
NSS, FN, DIR, SEX, SAL, NSSS, ND), ...
FBD Tema 5 – Dpto. LSI - Donostia
30
Tablas combinadas
(INNER y NATURAL JOIN en FROM)
•
Nombre y dirección de los empleados del departamento de Investigación
C1: SELECT NOMBRE, APELLIDO, DIRECCIÓN
FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD
C1A: SELECT NOMBRE, APELLIDO, DIRECCIÓN
FROM (EMPLEADO INNER JOIN DEPARTAMENTO
ON ND=NÚMEROD)
WHERE NOMBRED=‘Investigación’
– Este concepto se incorporó a SQL2
– La consulta se entiende más fácilmente, al evitar la
mezcla de condiciones de |×| y σ en el WHERE
– Se pueden especificar diferentes tipos de reunión:
INNER JOIN (o JOIN) y NATURAL JOIN
– También de reunión externa (que este curso NO usaremos):
OUTER JOIN, LEFT [OUTER] JOIN, RIGHT [OUTER]
JOIN y FULL [OUTER] JOIN
– NO se pueden definir alias de tablas combinadas:
FROM (EMPLEADO INNER JOIN DEPARTAMENTO
ON ND=NÚMEROD)
AS ED ...
FBD Tema 5 – Dpto. LSI - Donostia
31
Tablas combinadas (2)
(INNER y NATURAL JOIN en FROM)
Uso de NATURAL JOIN:
C1B: SELECT NOMBRE, APELLIDO, DIRECCIÓN
FROM (EMPLEADO NATURAL JOIN (DEPARTAMENTO AS DEPTO (NOMBRED, ND, NSSG, FECHAIG)))
WHERE NOMBRED=‘Investigación’
– Renombra DEPARTAMENTO.NÚMEROD por ND
– condición de reunión implícita:
EMPLEADO.ND = DEPARTAMENTO.ND
Anidamiento de INNER y de NATURAL JOIN:
C2: SELECT NÚMERO, NÚMD, APELLIDO, DIRECCIÓN,
FECHA_NCTO
FROM PROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND
LOCALIZACIÓNP=‘Stafford’
C2A:SELECT NÚMEROP, NÚMD, APELLIDO, DIRECCIÓN
FECHA_NCTO
FROM (PROYECTO INNER JOIN DEPARTAMENTO
ON NÚMD=NÚMEROD)
INNER JOIN EMPLEADO ON NSS_JEFE=NSS
WHERE LOCALIZACIÓNP=‘Stafford’
FBD Tema 5 – Dpto. LSI - Donostia
32
Funciones agregadas y de agrupación
•
COUNT (cuenta), SUM (suma), MAX (máximo), MIN
(mínimo), AVG (media)
– El argumento de una función agregada puede ser
una expresión: AVG(1.1*SALARIO)
– MAX y MIN se pueden aplicar a atributos NO
numéricos (con orden total en el dominio)
•
Suma de los salarios de todos los empleados, junto a
los salarios máximo, mínimo y medio:
C19: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),
AVG(SALARIO)
FROM EMPLEADO
DEPARTAMENTO
EMPLEADO
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
...
...
NOMBRED NÚMEROD
Investigación
Administración
Dirección
C19:
5
4
1
...
SUM(SA- MAX(SA- MIN(SA- AVG(SALLARIO) LARIO) LARIO)
ARIO)
105.000 20.000 10.000 15.000
FBD Tema 5 – Dpto. LSI - Donostia
33
Funciones agregadas y de agrupación (2)
•
Suma de los salarios de los empleados del departamento de ‘Investigación’, junto a los salarios máximo,
mínimo y medio del mismo:
C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),
AVG(SALARIO)
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NÚMEROD
WHERE NOMBRED=‘Investigación’
•
Cuántos empleados hay en la compañía y cuántos en el
departamento ‘Investigación’:
**seserefiere
refiereaatuplas
tuplas
C21: SELECT COUNT(*)
FROM EMPLEADO
C22: SELECT COUNT(*)
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NÚMEROD
WHERE NOMBRED=‘Investigación’
DEPARTAMENTO
EMPLEADO
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
...
...
NOMBRED NÚMEROD
Investigación
Administración
Dirección
C20:
5
4
1
...
SUM(SA- MAX(SA- MIN(SA- AVG(SALLARIO) LARIO) LARIO)
ARIO)
35.000 15.000 10.000 11.666
C21: COUNT(*) C22: COUNT(*)
8
FBD Tema 5 – Dpto. LSI - Donostia
35.000
35.000/ /33
4
34
Funciones agregadas y de agrupación (3)
•
Cuántos valores de salario diferentes hay:
C23: SELECT COUNT(DISTINCT SALARIO)
FROM EMPLEADO
•
los valores nulos
Cuántos valores de salario hay (con repeticiones):
C23’: SELECT COUNT(SALARIO)
FROM EMPLEADO
•
NO cuenta
Cuenta las filas con
salario NO nulo
Cuántos empleados hay:
Cuenta todas las
filas de la tabla
C23’’: SELECT COUNT(*)
FROM EMPLEADO
EMPLEADO
C23:
NOMBREP
SALARIO
ND
COUNT(DISTINCT SALARIO)
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
3
...
...
C23’:
COUNT( SALARIO)
7
C23’’:
COUNT( *)
8
¿Qué ocurre cuando todos los salarios valen NULL?
¿Qué ocurre cuando la tabla está vacía?
FBD Tema 5 – Dpto. LSI - Donostia
35
Atributos de agrupación: GROUP BY
•
Obtener cada número de departamento junto a su
número de empleados y salario medio:
C24: SELECT ND, COUNT(*), AVG(SALARIO)
FROM EMPLEADO
GROUP BY ND
– En GROUP BY está el/los atributo/s de agrupación
– NO confundir GROUP BY y ORDER BY (que ordena)
– Todos los atributos de SELECT deben estar en
GROUP BY
– Los atributos de GROUP BY no es obligatorio que
estén en SELECT
– Se suelen poner en SELECT algunos/todos los de
GROUP BY
C24:
EMPLEADO
NOMBREP
SALARIO
ND
John
Franklin
Ramesh
Joyce
Alicia
Jennifer
Ahmad
James
30.000
15.000
10.000
10.000
10.000
20.000
20.000
20.000
5
5
5
5
4
4
4
1
...
...
EMPLEADO
ND COUNT(*) AVG(SALARIO)
5
4
1
16.250
16.666
20.000
Fig. 8.4 (a)
Los valores
nulos forman su
propio grupo
C24:
NOMBREP
SALARIO
ND
ND
Jon
Juan
Rosa
Ana
NULL
10
10
10
NULL
NULL
5
5
NULL
5
...
4
3
1
...
COUNT(*) AVG(SALARIO)
FBD Tema 5 – Dpto. LSI - Donostia
2
2
10
10
36
Atributos de agrupación: GROUP BY (2)
•
Obtener por cada proyecto su número y nombre
junto al número de empleados que trabajan en él
C25: SELECT NÚMEROP, NOMBREP, COUNT(*)
FROM PROYECTO INNER JOIN TRABAJA_EN
ON NÚMEROP=NP
Agrupación por
varios atributos
GROUP BY NÚMEROP, NOMBREP
PROYECTO
INNER JOIN
TRABAJA_EN
ON
NÚMEROP=NP :
C25:
NOMBREP
NÚMEROP
ProductoX
ProductoX
ProductoY
ProductoY
ProductoY
ProductoZ
ProductoZ
Automatización
Automatización
Automatización
Reorganización
Reorganización
Reorganización
Nuevos beneficios
Nuevos beneficios
Nuevos beneficios
1
1
2
2
2
3
3
10
10
10
20
20
20
30
30
30
...
NP
1
1
2
2
2
3
3
10
10
10
20
20
20
30
30
30
HORAS
32.5
20.0
7.5
20.0
10.0
40.0
10.0
10.0
10.0
35.0
10.0
15.0
nulo
5.0
20.0
30.0
NÚMEROP
NOMBREPR
COUNT(*)
1
2
3
10
20
30
ProductoX
ProductoY
ProductoZ
Automatización
Reorganización
Nuevos beneficios
2
3
2
3
3
3
En C25, ¿se puede eliminar NOMBREP del GROUP BY?
FBD Tema 5 – Dpto. LSI - Donostia
37
GROUP BY con ORDER BY
•
Obtener por cada proyecto su número y nombre
junto al número de empleados que trabajan en él,
ordenado ascendentemente por el número de
empleados
C25’: SELECT NÚMEROP, NOMBREP, COUNT(*)
FROM PROYECTO INNER JOIN TRABAJA_EN
ON NÚMEROP=NP
GROUP BY NÚMEROP, NOMBREP
ORDER BY COUNT(*) ASC
•
Si se renombran los atributos del resultado con AS, el
nuevo nombre NO se puede usar en ORDER BY (en
general, no sólo con funciones agregadas):
C25’: SELECT NÚMEROP, NOMBREP, COUNT(*) AS
NUM_EMP
FROM PROYECTO INNER JOIN TRABAJA_EN
ON NÚMEROP=NP
GROUP BY NÚMEROP, NOMBREP
ORDER BY NUM_EMP ASC
NO se puede usar
el nuevo nombre
(AS) del atributo
del resultado en
ORDER BY
FBD Tema 5 – Dpto. LSI - Donostia
38
Constructor de valor de tupla
•
Una sola comparación incluye todos los valores de
dos tuplas:
WHERE (NOMBRE,EDAD,ESTADO_CIVIL) =
(“José María”, 18, ‘S’)
WHERE NOMBRE= “José María” AND EDAD=18 AND
ESTADO_CIVIL=‘S’
WHERE (C1, C2, C3) < (T1, T2, T3)
WHERE C1<T1 OR
(C1=T1 AND C2<T2) OR
(C1=T1 AND C2=T2 AND C3<T3)
FBD Tema 5 – Dpto. LSI - Donostia
39
Análisis de consultas SQL
SELECT <atributos y funciones>
FROM <tablas>
[WHERE <condición>]
[GROUP BY <atributos agrupación>]
[ORDER BY <atributos ordenación>]
•
También hay
HAVING, que
este curso no
estudiaremos
Una consulta SQL se evalúa 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
combinación de tuplas (una de cada tabla de
FROM), se evalúa la condición 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 evaluación.
FBD Tema 5 – Dpto. LSI - Donostia
40
Análisis de consultas SQL (2)
•
En SQL hay varias alternativas para especificar la
misma consulta :
– Ventaja: el programador elige la técnica que le
resulte más cómoda.
– Desde el punto de vista de optimización de
consultas, conviene que las consultas tengan el
menor anidamiento y el menor ordenamiento
implícito posible.
– Desventaja: el programador puede desconocer
cuál es la técnica más eficiente en cada caso
– Idealmente, el SGBD debería procesar la consulta
de la misma manera sin importar cómo se haya
escrito.
– En la práctica esto resulta muy difícil, y es
conveniente que el usuario sea consciente de qué
construcciones tienen un costo más elevado que
otras.
FBD Tema 5 – Dpto. LSI - Donostia
41
Características adicionales de SQL
•
•
•
•
•
•
•
Especificación de vistas (CREATE VIEW)
Especificación de restricciones de integridad
generales (CREATE ASSERTION)
Concesión y revocación de privilegios (GRANT y
REVOKE)
Sentencias SQL en lenguajes de programación:
– Metodología para insertarlas.
– Ligaduras con varios lenguajes de programación.
– El concepto de cursor para recorrer el resultado de
las consultas.
Instrucciones de control de transacciones.
Cada SGBD contará con un conjunto de instrucciones
para especificar parámetros de diseño físico:
– Se denomina LDA, o lenguaje de definición de
almacenamiento
– Las primeras versiones de SQL tenían
instrucciones para crear índices, pero se
eliminaron porque no aparecían en el nivel del
esquema conceptual.
Operadores CASE, NULLIF, COALESCE, CAST
FBD Tema 5 – Dpto. LSI - Donostia
42
Ejercicios
FBD Tema 5 – Dpto. LSI - Donostia
43
Ejercicio: consultas SQL EMPRESA
(8.13 (7.18) Elmasri/Navathe 02)
Sobre el esquema de BD de la figura 7.7 (ver pg. siguiente):
a) Empleados del departamento 5 que trabajan más 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 número total de
horas trabajadas por los empleados en él.
e) Nombres de todos los empleados que trabajan en
cada uno de los proyectos
NO:
división
f) Empleados que no trabajan en ningún proyecto
g) Nombre de cada departamento junto al salario medio
de los empleados asignados al mismo
h) Salario medio de las empleadas de la compañía
i) Nombre y dirección de los empleados que trabajan
NO:
en algún proyecto situado en Houston pero
anidados
departamento no está situado allí
j) Jefes de departamento sin dependientes
8.14
b) Número de empleados de sexo masculino de cada
departamento
FBD Tema 5 – Dpto. LSI - Donostia
44
Ejercicio: consultas SQL EMPRESA (2)
(8.13 Elmasri/Navathe 02)
EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
... SEXO
...
SALARIO NSS_SUPERV ND
DEPARTAMENTO
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
LOCALIZACIONES_DEPT
NÚMEROD LOCALIZACIÓND
PROYECTO
NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD
TRABAJA_EN
NSSE
NP
HORAS
DEPENDIENTE
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
FBD Tema 5 – Dpto. LSI - Donostia
45
Ejercicio: consultas SQL BIBLIOTECA
(8.11 (7.23) Elmasri/Navathe 02)
a) Número de copias de la tribu perdida en la sucursal
de ‘Sharpstown’.
b) Identificador de sucursal y número de copias del libro
‘La tribu Perdida’ en cada una de las sucursales.
c) Lectores sin libros en préstamo.
d) Título del libro, nombre y dirección del lector de los
préstamos de la sucursal de ‘Sharpstown’ con fecha de
devolución la de hoy.
e) Por cada sucursal: nombre y total de ejemplares de
libro en préstamo.
f) Para los lectores con más de 5 libros en préstamo,
NO:
obtener su nombre, dirección y nº de libros.
g) Por cada libro escrito (o coescrito) por ‘Stephen
King’, obtener su título y el nº de copias en la sucursal
‘Central’.
HAVING
AUTORES_LIBROS
LIBRO
IdLibro Título NombreEditorial
IdLibro NombreAutor
EDITORIAL
COPIAS_LIBRO
Nombre Dirección Teléfono
IdLibro IdSucursal NúmCopias
PRÉSTAMOS
IdLibro IdSucursal NúmTarjeta ...
... FechaSale FechaDevol
SUCURSAL_BIBLIOTECA
Figura 7.20:
Esquema de BDR
para la BD
BIBLIOTECA
IdSucursal NombreSucursal Dirección
LECTOR
NúmTarjeta Nombre Dirección Teléfono
FBD Tema 5 – Dpto. LSI - Donostia
46
Ejercicios consultas SQL BIBLIOTECA (2)
h) Tiempo medio que duran los préstamos de libros (en
conjunto).
i) Tiempo medio que duraron los préstamos de libros (en
conjunto) que se prestaron el año 2002.
j) Número total de préstamos, número de socios de la
biblioteca que han tomado libros en préstamo y
número medio de libros que han tomado en préstamo
los socios.
k) Número medio de copias por libro de la biblioteca
“central” (en conjunto)
l) Número de socio junto al número de préstamos que ha
tomado hasta el momento, ordenado por número de
préstamos
m) Identificador de libro junto al número de veces
actualmente en préstamo
n) Identificadores de cada libro y sucursal junto al
número de veces que ha sido prestado el libro en la
sucursal.
o) Para cada libro: identificador de libro y número de
autores.
p) Para cada libro: título y número de autores.
q) Para cada día del mes pasado en el que hubiera
préstamos, número de libros distintos que se prestaron
ese día.
FBD Tema 5 – Dpto. LSI - Donostia
47
Ejercicio: consultas SQL UNIVERSIDAD
(8.16 Elmasri/Navathe 02)
a) Nombres de los alumnos de 4º de la carrera ‘CC’
b) Nombre de los cursos impartidos por el profesor
‘King’ en los años 1998 y 99
c) Para cada sección impartida por el profesor ‘King’,
obtener el número de curso, semestre, año y número
de alumnos que se matricularon en esa sección.
d) Nombre y boletín de notas de los alumnos de 5º de la
carrera ‘CC’. El boletín incluye el nombre y número
del curso, las horas-crédito, el semestre, el año y las
notas de los cursos concluidos por el alumno.
e) Nombre y carrera de los estudiantes calificados con
nota ‘A’ en todos sus cursos.
f) Nombre y carrera de los estudiantes que NO tengan
nota ‘A’ en ningún curso.
ALUMNO
Nombre NúmAlumno
Grado Carrera
CURSO
NombreCurso NúmCurso HorasCrédito Departamento
REQUISITO
NúmCurso NúmRequisito
SECCION
IdentSección NúmCurso Semestre Año Profesor
INFORME_
CALIFICACIONES
NúmAlumno IdentSección Nota
FBD Tema 5 – Dpto. LSI - Donostia
48
Ejercicio: consultas SQL BANCOS
Sobre el esquema que aparece en la siguiente página:
a) Código de banco y DNI de cliente, para todos aquellos
clientes que tienen cuenta en más de una sucursal del
banco, ordenada por código de banco y DNI
b) Nombre de banco, número de sucursal, préstamo medio
y número de TAE diferentes en la sucursal, ordenado
descendentemente por préstamo medio.
c) DNI y nombre de clientes que tienen solicitado algún
préstamo igual o superior a 60.000 €, en sucursales de la
calle Urbieta de Donostia
d) Nombre del banco y media de los TAE ofrecidos en sus
sucursales a clientes de Donostia, para aquellos bancos
cuyo código comienza por ‘011’ y donde los préstamos
sean de un importe superior a 60.000 €. El resultado
deberá estar ordenado crecientemente por media de
TAE.
e) Todos los datos de clientes y código del banco donde
tienen solicitado préstamo, para aquellos clientes que
tengan algún préstamo en sucursales de Donostia pero
que no tengan cuentas en el mismo banco donde tienen
el préstamo.
FBD Tema 5 – Dpto. LSI - Donostia
49
Ejercicio: consultas SQL BANCOS (2)
BANCO
SUCURSAL
Código Nombre
Banco NúmSucursal Ciudad Dir
CUENTA
NúmCta Interés Saldo Banco NúmSucursal
CLIENTE
DNI Nombre Dir Tfno
PRÉSTAMO
NúmPrés TAE Importe Banco NúmSucursal
CUENTA_CLIENTE
NúmCta DNI
PRÉSTAMO_CLIENTE
NúmPrés DNI
BDR correspondiente al esquema ER de la figura 3.17
Salvo que se ha añadido el atributo Ciudad a SUCURSAL y se
ha cambiado el atributo Dir de BANCO a SUCURSAL
FBD Tema 5 – Dpto. LSI - Donostia
50
Ejercicio: consultas SQL BIBLIOTECA-2
EJEMPLAR
(1,1)
ESTA_EN
(0,N)
(0,N)
PRESTAMO
FechaPréstamo
(0,N)
BIBLIOTECA
Día
Mes
Año
SOCIO
BIBLIOTECA COD_BIB FACULTAD TFNO BIBLIOTECARIA
Puede haber varios
ejemplares con el
mismo título
EJEMPLAR COD_EJE TÍTULO AUTOR EDITORIAL ÁREA COD_BIB
SOCIO DNI NOM_SOCIO TFNO
CIUDAD CARRERA
PRÉSTAMO DNI COD_EJE DÍA MES AÑO DIAS_PRESTADO
Escribe las siguientes consultas SQL sobre la BD anterior:
a) Pares de títulos distintos del área de informática sacados
en préstamo por el mismo socio. Posible salida:
título
“Fundamentos de BD”
“Fundamentos de BD”
“BD:, ¡Qué gozada!”
título
“BD:, ¡Qué gozada!”
“SQL para novatos”
“Fundamentos de BD”
b) Lista de pares ordenados de bibliotecas que tengan
ejemplares de libros de la misma área. Por ejemplo, si
las bibliotecas A, B y C tienen libros de informática y
las bibliotecas A y C de filosofía, deberán aparecer:
<A,B,Informática>, <A,C,Informática>,
<A,C,Filosofía>, <B,A,Informática>,
<B,C,Informática>, ...
FBD Tema 5 – Dpto. LSI - Donostia
51
Ejercicio: definición y actualización SQL
de ITINERARIOS
Matricula
Cod-bast
Marca
Clase
Codigo
VEHICULO
(0,N)
Fecha
Cod_iti
Dieta
(1,1)
V_I
(1,N)
(1,1)
De
donde
(1,N)
PAIS
(0,N)
(1,N)
(1,1)
(0,N)
Por
donde
pasa
Moneda
P_C
A
donde
ITINERARIO
Nombre
CIUDAD
(1,N)
Cod-c
Nombre
Habit
Orden
a) Completa las instrucciones de creación de la BD para el
esquema ER anterior (ver páginas siguientes).
b) Incluir el itinerario (111, 50000, 95, 141) que sale de Sevilla
(95, "Sevilla", 500000, 34) y llega a Friburgo (141,
"Friburgo", 300000, 49), pasando por Zaragoza (93,
"Zaragoza", 450000, 34), París (16, "París", 6000000, 33) y
Karlstadt (148, "Karlstadt", 200000, 49). Los países
correspondientes son España (34, "España", "Peseta"), Francia
(33, "Francia", "Franco") y Alemania (49, "Alemania",
"Marco"). Ninguno de los datos está en la BD.
c) Todos los itinerarios que pasan por Sevilla (solo pasar, no salir
o llegar) se han desviado por Córdoba. Los datos de Córdoba
(957, “Córdoba”, 134000, 34) no están en la BD.
d) El vehículo con nº de bastidor 3 ha tenido un accidente y lo
han llevado a la chatarra. Se ha cambiado el vehículo a los
itinerarios donde figuraba por (345, "Renault", "BI-9999-XX",
"Express"), que no está aún en la BD.
FBD Tema 5 – Dpto. LSI - Donostia
52
Ejercicio: definición y actualización SQL
de ITINERARIOS (2)
CREATE TABLE VEHICULO (
Cod-bast INTEGER NOT NULL,
Marca
VARCHAR (15),
Matricula
VARCHAR (8) NOT NULL,
Clase
VARCHAR (8),
PRIMARY KEY (Cod-bast),
UNIQUE (Matrícula));
CREATE TABLE PAIS (
Codigo
Nombre
Moneda
INTEGER NOT NULL,
VARCHAR (15) NOT NULL,
VARCHAR (10),
CREATE TABLE ITINERARIO (
Cod-iti
INTEGER NOT NULL,
Dieta
INTEGER,
Cod-dedonde
INTEGER,
Cod-adonde
INTEGER,
PRIMARY KEY (Cod-iti),
FOREIGN KEY (Cod-dedonde) REFERENCES CIUDAD (Cod-c)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (Cod-adonde) REFERENCES CIUDAD (Cod-c)
ON DELETE CASCADE ON UPDATE CASCADE);
CREATE TABLE CIUDAD (
Cod-c
INTEGER NOT NULL,
Nombre
VARCHAR (15) NOT NULL,
Habit
INTEGER,
Codigo
INTEGER,
FBD Tema 5 – Dpto. LSI - Donostia
53
Ejercicio: definición y actualización SQL
de ITINERARIOS (3)
CREATE TABLE VEHI-ITINE (
Cod-bast INTEGER NOT NULL,
Cod-iti
INTEGER NOT NULL,
Fecha
DATE,
PRIMARY KEY (Cod-bast, Cod-iti),
FOREIGN KEY (Cod-bast) REFERENCES VEHICULO (Cod-bast)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (Cod-iti
) REFERENCES ITINERARIO (Cod-iti)
ON DELETE CASCADE ON UPDATE CASCADE);
CREATE TABLE POR-DONDE (
Cod-iti
INTEGER NOT NULL,
Cod-c
INTEGER NOT NULL,
Orden
INTEGER,
FOREIGN KEY (Cod-c) REFERENCES CIUDAD (Cod-c)
ON DELETE CASCADE ON UPDATE CASCADE);
FBD Tema 5 – Dpto. LSI - Donostia
54
Ejercicio: análisis de restricciones de
integridad en BANCOS
Analizar todas las R.I. violadas por cada operación cuando
se ejecuta sobre la BD de la figura de la siguiente página:
a) INSERT INTO CUENTA VALUES (7, 7, 20000, null, null)
b) INSERT INTO CLIENTE VALUES (123, Pepi, null, null)
c) INSERT INTO CUENTA-CLIENTE VALUES (4, null)
d) INSERT INTO CUENTA VALUES (10, 4, 100000, 2, 3)
e) DELETE FROM CLIENTE WHERE DNI=999
f)
DELETE FROM CUENTA-CLIENTE WHERE NCta=0 and
DNI>000
g) UPDATE CUENTA-CLIENTE SET NCta=5, DNI=111
WHERE NCta=0 and DNI=111
h) UPDATE CUENTA-CLIENTE SET NCta=3, DNI=222
WHERE NCta=0
i)
UPDATE CLIENTE SET Nombre=‘Ataulfo A.’ WHERE
DNI>888
j)
UPDATE CUENTA SET Banco=2, NSuc=2 WHERE NCta=0
k) UPDATE CUENTA SET Banco=2 WHERE Banco=1
l)
UPDATE CUENTA SET Banco=null, NSuc=null WHERE
Banco=1
m) UPDATE CUENTA SET Banco=null WHERE NCta=3
FBD Tema 5 – Dpto. LSI - Donostia
55
Ejercicio: análisis de restricciones de
integridad en BANCOS (2)
BANCO
Código Nombre
1
BBVA
2
Santander
2101
Kutxa
2102
BBK
Dir
Gran Vía, 17
Espolón, 1
Garibai, 6
Salaberría, 3
CLIENTE
DNI Nombre
Dir
111
Juan
Legazpi, 1
222
Pedro
Guridi, 5
333
Gaizka
Lardizabal, 1
444
Luisa
Nagusia, 2
555 Ceferina
Elkano, 3
666 Yolanda Av. Madrid, 9
777 Segismundo H. Cortés, 9
888
Ataulfo
Cervantes, 1
999 Teodorico Velázquez, 7
000
Atenea
Sorolla, 13
SUCURSAL
Banco NSuc Ciudad
1
1
Bilbao
1
2 S. Sebastián
1
3
Vitoria
2
1
Santander
2
2 S. Sebastián
2101
1 S. Sebastián
2101
2
Pasajes PRÉSTAMO2102
1
Bilbao
CLIENTE
NPres DNI
2102
2
Sestao
0 111
2102
3 Portugalete
CE
0 000
1 111
CUENTACLIENTE
2 111
NCta DNI
2 222
0 111
3 111
0 222
6 111
3 333
0 555
6 222
4 111
0 000
6 333
4 444
1 111
6 666
5 111
2 111
7 111
5 555
2 222
7 777
6 111
3 111
8 111
6 666
3 333
8 222
7 111
4 111
8 444
7 777
4 222
8 888
8 111
4 444
9 111
8 888
5 111
9 333
9 111
5 555
9 999
9 999
...
...
CE
CE
CE
CE
CUENTA
NCta Interés
1
1
2
1
3
1
4
2
5
2
6
3
7
3
8
3
9
4
0
4
PRÉSTAMO
NPres TAE
1
10
2
10
3
10
4
20
5
20
6
30
7
30
8
30
9
40
0
40
FBD Tema 5 – Dpto. LSI - Donostia
Saldo
20000
30000
40000
30000
40000
50000
60000
60000
70000
80000
Tfno
111111
222222
333333
444444
555555
666666
777777
888888
999999
101010
Banco NSuc
1
1
1
2
1
3
2
1
2
2
2101
1
2101
2
2102
1
2102
2
2102
3
CE
Importe
200000
300000
400000
300000
400000
500000
600000
600000
700000
800000
CE
Banco NSuc
1
1
1
2
1
3
2
1
2
2
2101
1
2101
2
2102
1
2102
2
2102
3
CE
CE
56
Junio 00
Especie
Mariposa
Persona
Nombre
Características
NombreCientífico
DNI
Nombre
Origen Hábitat
Dirección
Colección
Código
Ubicación
Ejemplar
NombreCientífico
EspecieColección
Nombre
Código
ColoresMariposa
NombreCientífico
Tfno
EsperanzaVida
CódColección
NomEspecie
EsPrincipal
PrecioEstimado
Número Procedencia Tamaño CódColección
MejorEjemplar
Color
a) Obtener el nombre científico, hábitat y esperanza
de vida de las mariposas de la colección de José
Mari Poza ordenadas por esperanza de vida. Hay
que asegurarse de que sólo se obtiene una tupla por
mariposa (y no por cada ejemplar de la misma).
b) Obtener el nombre científico y esperanza de vida
de todas las mariposas que tienen algún ejemplar
de mayor tamaño que el ejemplar número 5 de la
mariposa con nombre científico Papilio macaon
perteneciente a la colección de José Mari Poza.
FBD Tema 5 – Dpto. LSI - Donostia
57
Septiembre 00
ZonaUrbana NombreZona Categoría
BloqueCasas Calle Número
Npisos
CasaParticular NombreZona Número
Piso Calle Número
Planta
NombreZona
M2
Puerta
Persona
DNI
PoseeC
DNI NombreZona NúmCasa
PoseeP
DNI
M2
Nombre Edad NombreZona NúmCasa Calle NúmBloque Planta Puerta
Calle NúmBloque Planta Puerta
a) Obtener el DNI, nombre y edad de dueños de casas
particulares, con la peculiaridad de que todas sus casas
(las que posee) están situadas en una Zona Urbana cuya
categoría es de “lujo”.
b) Obtener DNI, nombre y edad de las personas que viven
en un piso de menos m2 que algún piso que cumpla al
mismo tiempo las dos condiciones siguientes:
a) Esté situado en otro bloque distinto.
b) Ese otro bloque pertenezca a una Zona Urbana de
categoría “Residencial”.
c) Obtener datos de los pisos habitados por personas de
más de 60 años y situados en un Bloque de Casas que no
supere los 10 pisos. Por cada piso queremos obtener la
calle y número donde se encuentra, además de la
siguiente información:
– “Piso pequeño” si tiene menos de 50 m2
– “Piso mediano” si tiene entre 50 y 75 m2
– “Piso grande” si tiene más de 75 m2
FBD Tema 5 – Dpto. LSI - Donostia
58
Junio 01
Artículo NomArt Tipo Precio Tamaño
Ingrediente NomIngr Precio Suministrador
Art_Ingr NomArt NomIngr
Prd_Ingr NomArt NomPrd NomIngr
Pedido NúmeroFechaHoraPedidoHoraServidoTfno Ped_Art Número NomArt Cantidad
Domicilio Tfno Dirección
Ped_Prd NúmeroNomArt NomPrd Cantidad
ProductoEspecial NomArt NomPrd
a) Media de tiempo que se tarda en servir cada uno de
los productos especiales a ser consumidos en el
local (y no en el domicilio).
b) Considera los artículos de tipo “pizza” que llevan
“pimiento”. Se desea conocer todos los datos de
productos especiales que se basan en tales artículos
y llevan “champiñón” entre los ingredientes para el
producto especial.
c) Dirección de aquellos domicilios que hayan
solicitado pedidos de artículos con precios
superiores al artículo de nombre “Pizza 3 quesos”
FBD Tema 5 – Dpto. LSI - Donostia
59
Septiembre 01
Película CódigoTítuloGénero
Cine Nom Dirección Tfno
Persona Nombre Sexo Nacionalidad
Producida Código Nombre
Actor Código Nombre
Dirigida Código Nombre
Premio Categoría Año Euros Código Proyectada Código Nom Número FechaInicioFechaFin
Sala Nom Número Aforo
PremPers Categoría Año Nombre
a) Para cada película de género policiaco obtener su
título y el número total de premios que se le han
concedido.
b) Nombres de los cines, con alguna sala de aforo
igual o superior a 100 butacas, que no han
proyectado la película premiada con la categoría
“mejor actriz” del año 2001.
c) Obtener los nombres de los distintos actores que
han participado en películas dirigidas por una
persona que haya conseguido el premio al “mejor
director” del festival en alguna ocasión. Queremos
los actores participantes en cualquier película
dirigida por esa persona, no sólo en las premiadas
al mejor director.
FBD Tema 5 – Dpto. LSI - Donostia
60
Junio 02
HOTEL Código_H Nombre Dirección Teléfono Código_E NºHabitaciones
EQUIPO Código_E País Camiseta Total_Goles
JUGADOR DNI Nombre FechaN Goles Código_E
PARTIDO Código_E1 Código_E2 Fecha Resultado
ÁRBITROCódigo_E1Código_E2 Fecha Árbitro
CLUBES_AÑO DNI Club
CONTROL_ANTIDOPAJE DNI Fecha Lugar
a) Buscando casualidades que se hayan producido en el mundial,
deseamos obtener los nombres de aquellos jugadores
(JUGADOR.Nombre contiene el nombre seguido del apellido)
cuyo nombre de pila comience por “Carlos” y se hayan
hospedado en el hotel del mismo nombre (“Carlos”), además de
los nombres de aquellos jugadores que cumplían años el día de
la inauguración (el 31/05/2002).
b) Mostrar, junto al nombre de cada país participante en el
mundial, el número total de sus jugadores que hayan pasado al
menos un control antidopaje. Téngase en cuenta que un mismo
jugador ha podido pasar varios controles y deseamos contar el
número de jugadores (NO el número de controles realizados a
los jugadores de un país). Se desea que el resultado quede
ordenado alfabéticamente por nombre de país de forma
descendente.
c) Para aquellos equipos tales que entre dos de sus jugadores hayan
marcado más de la mitad de los goles totales del equipo, se
desea obtener el código del equipo, los nombres de ambos
jugadores, el total de goles del equipo y los goles que ha
marcado cada uno de los dos jugadores. No queremos que una
misma pareja de jugadores aparezca repetida en el resultado (el
primer jugador deberá ser menor alfabéticamente que el
segundo). Por ejemplo:
a) ESP, Gaizka Mendieta, Raul González, 25, 10, 5
b) FRA, Francois Republique, Zinedine Zidane, 24, 9, 9
FBD Tema 5 – Dpto. LSI - Donostia
61
Septiembre 02
PUEBLO Cód_Pueblo Nombre
CENTRO Cód_Centro Nombre Dirección
AUTOBÚS Matrícula
ALUMNO DNI
CURSO DNI
N_Asientos Compañía Cód_Centro
Nombre Cód_Centro
Id_Curso
Cód_Pueblo
Provincia
PARADA Cód_Pueblo Calle
PARA_EN Matrícula
VIAJA_EN DNI
Cód_Pueblo Calle
Matrícula
Fecha_Inscripción
a) Obtener el nombre de los alumnos que viajan en autobuses
contratados por centros universitarios distintos a donde estudian,
junto al nombre de su pueblo, la compañía del autobús y la fecha de
inscripción del alumno en el autobús.
Si el autobús no pertenece a ninguna compañía tendrá que figurar en
vez de la compañía el código del centro. Si todavía no figurase en la
BD el centro que contrata al autobús deberá aparecer en su lugar la
matrícula.
Las filas del resultado deberán aparecer ordenadas por nombre de
pueblo y las que tengan el mismo nombre de pueblo ordenadas por
fecha de inscripción.
Téngase en cuenta que un alumno puede viajar en varios autobuses
de estas características y que el resultado deberá recoger cada
alumno junto a cada autobús en el que viaja que cumpla las
condiciones anteriores.
b) Obtener el listado de las paradas (Cód_Pueblo, Calle) por las que
pasan los autobuses que tienen alguna parada en “Beasain” y los ha
contratado el centro de código “IFSS”.
c) Obtener para cada centro su nombre y el número de alumnos
matriculados en él que viajan en algún autobús que:
– Figura en la BD como ya contratado por algún centro (suponer
que pueden figurar en la BD autobuses que no están todavía
contratados).
– Realiza alguna parada en la calle “Gorosabel” del pueblo de
código “TLS”.
– Cuenta con más de 40 plazas.
FBD Tema 5 – Dpto. LSI - Donostia
62
Junio 03
COPISTERÍA NIF Dirección Precio
ALUMNO DNI Clave Dirección
CURSA
DNI
IdAsignatura
ASIGNATURA IdAsignatura Curso Carrera NIF
APUNTES IdAsignatura Tema NúmeroHojas
FICHA DNI IdAsignatura Tema FechaPetición NúmeroCopias FechaRecogida
a) DNI y Dirección, sin tuplas repetidas en el resultado,
de aquellos alumnos que hayan rellenado fichas de
petición de apuntes de al menos dos asignaturas
distintas.
b) Indica por cada copistería (NIF) y asignatura
(IdAsignatura) cuál es la facturación pendiente de
pago por los alumnos de la asignatura.
FBD Tema 5 – Dpto. LSI - Donostia
63
Septiembre 03
APAREJADOR N_Identificación Nombre Tfno NombreMunicipio
MUNICIPIO Nombre Dirección Tfno
INMUEBLE N_Propiedad Tipo Dirección DNI NombreMunicipio M2
PERMISO N_Propiedad DNI FechaPetición Descripción N_Identificación
...
...
FechaAsignación Presupuesto FechaResolución EstáConcedido
PERSONA DNI Nombre Dirección
Dominio
booleano
TRABAJA NombreMunicipio N_Identificación
PETICIÓN N_Propiedad DNI
a) DNI, nombre y dirección de las personas solicitantes
de algún permiso de obra asignado a un aparejador de
la plantilla de “Aduna” (donde “Aduna” es el nombre
de un municipio).
b) Obtener el nombre del aparejador y a cuántos
inmuebles distintos ha denegado algún permiso de
obra. Sólo queremos tener en cuenta aquellos permisos
de obra donde el inmueble haya obtenido otro permiso
de obra, solicitado con posterioridad y con el mismo
presupuesto (el aparejador que acepta el permiso NO
tiene por qué ser el mismo que el que lo denegó
previamente).
FBD Tema 5 – Dpto. LSI - Donostia
64
Septiembre 03
APAREJADOR N_Identificación Nombre Tfno NombreMunicipio
MUNICIPIO Nombre Dirección Tfno
INMUEBLE N_Propiedad Tipo Dirección DNI NombreMunicipio M2
PERMISO N_Propiedad DNI FechaPetición Descripción N_Identificación
...
...
FechaAsignación Presupuesto FechaResolución EstáConcedido
PERSONA DNI Nombre Dirección
Dominio
booleano
TRABAJA NombreMunicipio N_Identificación
PETICIÓN N_Propiedad DNI
c) Obtener la descripción, nº de propiedad y el
presupuesto máximo para aquellos permisos de obra
que cumplen:
– El permiso está concedido, su campo descripción
tiene como valor “cerramiento” y corresponde a
un inmueble de “Lasarte” de menos de 60 m2.
Junto a tuplas con los mismos campos, para aquellos
permisos de obra que cumplen:
– El permiso está concedido, el campo descripción
tiene como valor “fachada” y está asignado a un
aparejador de la plantilla de “Lasarte”
FBD Tema 5 – Dpto. LSI - Donostia
65
Junio 04
EQUIPO Nombre Director
CICLISTA Dorsal Nombre FechaNcto EnCarrera Equipo
MAILLOT Color Premio Metálico
PARTICIPACIÓN Dorsal Etapa Tiempo
ETAPA Número Km Salida Llegada Ganador
LLEVA_MAILLOT Color Etapa Dorsal
Suponiendoque
haya undominio
que incluya
horas-min-seg.
PUERTO NúmEtapa NúmOrdenAltitud Categoría Primero
a) Obtener la clasificación general de la vuelta, es decir,
el dorsal, nombre del ciclista y nombre del equipo
junto al tiempo total invertido en las etapas disputadas,
para aquellos ciclistas que continúan en carrera,
ordenados de menor a mayor tiempo consumido.
b) Obtener el dorsal y el nombre de los ciclistas que
pertenecen al equipo del ciclista ganador de la décima
etapa (incluido este) y que participaron en dicha etapa
FBD Tema 5 – Dpto. LSI - Donostia
66
Septiembre 04
DEPORTISTA NúmeroId Nombre Apellido Dirección Teléfono NúmeroIdVolunt FechaCom FechaFin CódigoDeporte País
EVENTO Ciudad Nombre
Fecha
VOLUNTARIO NúmeroId Nombre Procedencia Profesión
DEPORTE Código Nombre Historia Equipamiento
RECORD CódigoDeporte NúmeroIdDeportista Fecha Hora Ciudad
TIPO RECORD CódigoDeporte NúmeroIdDeportista Fecha Hora Tipo
TIENE
CódigoDeporte Ciudad Nombre
EQUIPO CódigoDeporte País Entrenador
PARTICIPA CódigoDeporte NúmeroIdDeportista
DESTACA CódigoDeporte NúmeroIdDeportista
IDIOMA
NúmeroIdVolunt Idioma
a) Nombre y procedencia de los voluntarios que hablan
francés y acompañan a deportistas que participan en
deportes cuyos eventos de clasificación se celebraron
en París.
b) Nombre, apellido e identificación de aquellos
deportistas del equipo de Jorge Sánchez que cumplan
la siguiente condición: han logrado algún record y
todos los records que han conseguido son de tipo
mundial. En el resultado debe excluirse a Jorge
Sánchez.
FBD Tema 5 – Dpto. LSI - Donostia
67
Junio 05
VIAJE DestinoVFechaSalida Días PrecioDía CiudadSalida DNI HOTEL
LId
Id_Hotel Nombre Localidad Capacidad
HOTEL_
ÍAD
DNI Nombre N_Tfno
VIAJE DestinoVFechaSalida Id_Hotel CLIENTEDNI Nombre Dirección N_Tfno GUÍA
EXCURSIÓN_
AD
DNI Idioma
OPCIONAL DestinoVFechaSalida Número DestinoExcursión HoraSalida LugarSalida Precio IDIOMA
HOTEL_VIAJE
_CLIENTE DestinoVFechaSalida IdHotel DNI NúmeroNoches
EXCUR_OPC
_CLIENTE DestinoVFechaSalida Número DNI
a) Nombre y dirección de aquellos clientes (sin
repeticiones) que hayan participado en algún viaje en
el que se hayan hospedado más noches en un mismo
hotel que las noches que se hospedó en el hotel
“Gabriella” el cliente con DNI “15238432”, en el viaje
que realizó a Roma el “3/05/2005”.
b) Obtener, para cada destino de viaje DV, el número de
guías que hablen “italiano” que han llevado o llevarán
algún viaje a ese destino DV, con posibilidad de
alojarse (en el destino de viaje DV) en algún hotel de
“Roma”.
FBD Tema 5 – Dpto. LSI - Donostia
68
Septiembre 05
Noserepite
especieenlas
claves
GANADERODNINombreE-mail extranjerasde
padreymadre
porserla
TRATAMIENTON
NombreDuración
misma
RESEspecieCrotalRazaFechaNctoMataderoCrotalPadreCrotalMadreDNIGranjaNomGranja
GRANJADNINombreDireccionTfnoAdministrador
ENFERMEDADNombre
APLICAR EnfermedadTratamientoEspecieCrotalF_Inicio ENFER_TRATAMEnfermedadTratamiento
SÍNTOMAEnfermedadSintoma
MEDICAMENTOTratamientoMedicamento
a) Especie, crotal y fecha de nacimiento de las reses de la
raza “Angus” con padre y madre conocidos (están en
la BD) y cuyo propietario es “Domecq”. Sólo se
obtendrán reses que NUNCA hayan padecido la
enfermedad “Brucelosis”.
b) Obtener la especie y crotal de las reses que, habiendo
padecido la enfermedad “Encefalopatía”, se les aplicó
para dicha enfermedad alguno de los tratamientos
usados para esa misma enfermedad en la res de la
especie “bovina” con crotal número 1. Esta última res
no debe aparecer en el resultado.
FBD Tema 5 – Dpto. LSI - Donostia
69
ER-Relacional
Junio y Septiembre 00
NombreZona
Calle
Categoría
1
ZONA_URBANA
Dir
Número
N
NPisos
BLOQUE_CASAS
1
1
N
Número
N
CASA_PARTICULAR
M
2
1
VIVEC
M
N
1
M
N
PERSONA
DNI
Nombre
M2
VIVEP
Edad
Nombre
Nombre
Tfno
PERSONA
ESPECIE
1
Dirección
DNI
Características
Planta
Puerta
PISO
POSEEP
POSEEC
P_P
N
N
M
NombreCientífico
N
MejorEjemplar
N
Origen
EsPrincipal
MARIPOSA
Hábitat
EsperanzaVida
1
N
Colores
1
N
EJEMPLAR
Número
N
Tamaño
Procedencia
1
COLECCIÓN
PrecioEstimado
Código
Ubicación
FBD Tema 5 – Dpto. LSI - Donostia
70
ER-Relacional
Junio y Septiembre 01
Precio
(0,N)
LLEVA
NomArt
Tipo
Precio
Tamaño
NomIngr
(1,N)
ARTÍCULO
(0,N)
INGREDIENTE
LLEVA
(1,N)
(0,N)
BASE DE
(1,1) PRODUCTO
INCLUIDO
(0,N)
(0,N)
PEDIDO
Número
Fecha
Dirección
DOMICILIO
(0,N)
(0,1)
(0,N)
INCLUIDO
Cantidad
Hora
pedido
Hora
servido
LLEVAR_A
Categoría
Euros
(0,1)
CONCEDIDO
(0,N)
NomPrd
ESPECIAL
(0,N)
Cantidad
Tfno
Suministrador
(1,N)
Año
Cód
(0,N)
PREMIO
PRODUCIDA
CONCEDIDO
(0,N)
(0,N)
Código
Título
PELÍCULA (1,N) ACTOR (0,N)
PERSONA
Género
(1,N)
(1,N) DIRIGIDA (0,N)
Fecha
Sexo
Inicio
Nombre Nacionalidad
PROYECTADA
FechaFin
(1,N)
Número
Aforo
SALA
(1,1)
DE
(1,N)
CINE
Nom Tfno Dirección
FBD Tema 5 – Dpto. LSI - Donostia
71
ER-Relacional
Junio y Septiembre 02
Cód
Direcc
Tfno.
Cód
(1,1)
HOTEL
RESIDE
NºHabit
Nombre
País
(1,N)
EQUIPO
Camiseta
Fecha
(1,N)
Equip1
(1,N)
Equip2
JUEGA
(1,1)
PARTIDO
Total_Goles
(1,N)
Resultado
Árbitros
COMPUESTO POR
Fecha
Lugar
(1,1)
CONTROL
ANTIDOPAJE
(1,1)
PASADO
A
DNI
(0,N)
JUGADOR
Nombre
FechaN
Clubes_Año
DNI
Nombre
Goles
Cód_Pueblo
Cursos
ALUMNO
(1,1)
(1,1)
VIVE_EN
(0,N)
(1,N)
VIAJA_EN
(0,N)
CENTRO
Cód_Centro
Dirección
Nombre
(1,1)
CONTRATA_A
(1,1)
(1,N)
AUTOBÚS
Matrícula
PUEBLO
POSEE
(0,N)
(1,N)
Provincia
(1,N)
Fecha_Inscripción
ESTUDIA_EN
Nombre
(1,N)
PARA_EN
Compañía
PARADA
Calle
N_Asientos
FBD Tema 5 – Dpto. LSI - Donostia
72
ER-Relacional
Junio 2003
DNI
NúmeroCopias
FechaPetición
(1,1)
Cursa
Apuntes
(1,1)
Precio
Asignada_a
(0,N)
(0,N)
Dirección
(1,N)
(1,N)
(0,N)
Pide
Tema
NIF
Copistería
Alumno
Ficha
FechaRecogida
Clave Dirección
Pertenecen_a
(1,1)
(0,N)
IdAsignatura
Carrera
Asignatura
NúmeroHojas
Curso
Septiembre 2003
Nombre
Dirección
Tfno
(0,N)
MUNICIPIO
(1,N)
(0,N)
PLANTILLA
TRABAJA
NºPropiedad
UBICADO
(1,1)
Tipo
Dirección
INMUEBLE
(0,N)
NºPeticiones
(1,1)
(0,N)
APAREJADOR
NºIdentificación
Tfno
Nombre
(0,N)
SOLICITA
FechaAsignación
ASIGNADO
(1,1)
(1,1)
PERTENECE
(0,N)
DNI
(0,N)
PERSONA
Dirección
Nombre
(0,1) PERMISO
FechaResolución
FechaPetición
Descripción
M2
Presupuesto
FBD Tema 5 – Dpto. LSI - Donostia
EstáConcedido
73
ER-Relacional
Junio 2004
Nombre Director
Categoría
Altitud
(1,1)
PUERTO
(1,1)
NºOrden
Tiempo
Número
EQUIPO
(0,N)
Horas
Corresponde
Km
Primero
(1,N)
Min.
Consta
(0,N)
ETAPA
Participa
(1,N)
Salida
Llegada
Dorsal
(1,1)
Seg.
Nombre
CICLISTA
(1,N)
Fecha_Ncto
Gana (0,N)
(1,1)
Lleva
(1,N) M
Edad
En_Carrera
1 (0,N)
N (0,N)
MAILLOT
Color
Premio
Metálico
Septiembre 2004
Fecha
Ciudad
FechaCom
Tipo
Hora
RECORD
(1,1)
NúmeroId
CONSIGUE
(0,N)
(0,N)
Nombre
Código
Nombre
Historia
DEPORTE
Fecha
(1,1)
(0,N)
Apellido
Dirección
DESTA CA
(0,1)
Teléfono
ACOMPA ÑA
FechaCom
CONSTA
SELECCIÓN
Código
DEPORTISTA
(0,N)
(0,N)
TIENE
Ciudad
(1,N)
PARTICIPA
(0,N)
Equipamiento
Nombre
(1,N)
(1,1)
EVENTO
EQUIPO
FechaFin
(1,N)
(1,N)
(1,N)
VOLUNTARIO
NúmeroId
País
Entrenador
Idioma
Profesión
FBD Tema 5 – Dpto. LSI - Donostia
Nombre
Procedencia74
ER-Relacional
Junio 2005
DNI
Nombre
Destino
Ident
Fecha
Salida
(0,N)
LLEVA
N_Tfno
GUÍA
Precio día
(1,N)
VIAJE
Precio total
(0,N)
Ciudad salida
(1,1)
Destino
ALOJADO
Nombre
HOTEL
(0,N)
ASISTE
Localidad
Capacidad
(0,N) N
Nº Noches
DNI
P (1,N)
EXCURSIÓN
OPCIONAL
Hora salida
(0,N)
ASIGNADO
M (1,N)
ASIGNADA
Número
IdHotel
Idiomas
(1,1)
Días
(0,N)
Nombre
CLIENTE
Dirección
Lugar salida
N_Tfno
Precio
Septiembre 2005
Especie
Crotal
Id
Raza
FechaNcto Matadero
hija (0,1)
(0,1) hija
RES
PADRE
padre (0,N)
Nombre
GRANJA
Tfno
(1,1)
(1,N)
(0,N)
(1,1)
PERTENECE
APLICADO
(1,1)
ADMINISTRADA
(0,N)
(0,N)
PERTENECE
ENFERMEDAD
(1,N)
Nombre
Síntomas
SE_APLICA
(0,N)
(0,N)
Nombre
(0,N) madre
(1,1)
Dirección
DNI
MADRE
APLICAR
GANADERO
(1,N)
TRATAMIENTO
InicioTratamiento
FinTratamiento
Nombre
Duración
Medicamentos
E-mail
FBD Tema 5 – Dpto. LSI - Donostia
75
Descargar