Date post: | 18-Nov-2014 |
Category: |
Education |
Upload: | edgar-sandoval |
View: | 14,606 times |
Download: | 2 times |
1FBD Tema 5 – Dpto. LSI - Donostia
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.
2FBD Tema 5 – Dpto. LSI - Donostia
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
Mod. RelacionalSQLRelaciónTabla
TuplaFilaAtributoColumna
3FBD Tema 5 – Dpto. LSI - Donostia
Esquema y catálogo en SQL2
• Esquema de BD: el término se incorporó en SQL2
• Catálogo del SGBD: colección de esquemas en un entorno SQL
Esquema 1
TablasRestricciones
VistasDominios
Autorizaciones
Esquema 2
...
Catálogo del SGBD
CREATE SCHEMA Nombre [AUTHORIZATION Usuario];
Cuenta propietaria del esquema
Elementosde un
esquema
– RI: sólo entre relaciones del mismo catálogo del SGBD
– Esquemas del catálogo del SGBD: pueden compartir elementos (por ejemplo dominios)
INFORMATION_SCHEMA
Esquema especial que da a los usuarios autorizados información de todos los
esquemas del catálogo del SGBD
4FBD Tema 5 – Dpto. LSI - Donostia
Instrucción CREATE TABLE
CREATE TABLE DEPARTAMENTO( NOMBRED VARCHAR(15) NOT NULL,NUMEROD INT NOT NULL,NSS_JEFE CHAR(9) NOT NULL,FECHA_INIC_JEFE DATE,PRIMARY KEY(NUMEROD),UNIQUE(NOMBRED),FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
);
CREATE TABLE DEPARTAMENTO( NOMBRED VARCHAR(15) NOT NULL,NUMEROD INT NOT NULL DEFAULT ‘888665555’,NSS_JEFE CHAR(9) NOT NULL,FECHA_INIC_JEFE DATE,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 DEFAULTON UPDATE CASCADE
);
Clave candidataClave candidata
Clave primariaClave primariaIntegridad de entidadesIntegridad de entidades
Clave extranjera (o externa)Clave extranjera (o externa)
No pueden tomarvalor nulo
No pueden tomarvalor nulo
Atri
buto
sA
tribu
tos
Res
tricc
ione
sR
estri
ccio
nes
Valor pordefecto
Valor pordefecto
Constraint:se pone
nombre a la RI, para poder
cambiarla o eliminarla con
ALTER y DROP
Constraint:se pone
nombre a la RI, para poder
cambiarla o eliminarla con
ALTER y DROP
Res
tricc
ione
s(c
on n
ombr
e)R
estri
ccio
nes
(con
nom
bre)
Acciones: a realizar en caso de borrado (ON DELETE) o modificación (ON UPDATE) del valor referenciado
Acciones: a realizar en caso de borrado (ON DELETE) o modificación (ON UPDATE) del valor referenciado
Opciones:• CASCADE• SET DEFAULT• SET NULL• RESTRICT (no poner ON UPDATE – ON DELETE)
Opciones:• CASCADE• SET DEFAULT• SET NULL• RESTRICT (no poner ON UPDATE – ON DELETE)
Atri
buto
sA
tribu
tos
Fig 8.1(a)
Fig 8.1(b)
5FBD Tema 5 – Dpto. LSI - Donostia
Tipos de datos en SQL2Enteros 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=0Cadena de caracteres de longitud
fija:– CHAR(n)– CHARACTER(n)
Cadena de caracteres de longitud variable:
– CHARACTERVARYING(n)
– VARCHAR(n)– CHAR VARYING(n)– n=máximo definido. Por
defecto n=1Cadena 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-MM-
DD– Componentes: YEAR,
MONTH, DAYHora:
– 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ónMarca 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)
6FBD Tema 5 – Dpto. LSI - Donostia
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
7FBD Tema 5 – Dpto. LSI - Donostia
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
– 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
• 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);
8FBD Tema 5 – Dpto. LSI - Donostia
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 laque 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);
9FBD Tema 5 – Dpto. LSI - Donostia
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
10FBD Tema 5 – Dpto. LSI - Donostia
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;
– CASCADE borra también las restricciones (constraints) y vistas que hagan referencia a la columna (DIRECCIÓN)
– RESTRICT sólo borra la columna (DIRECCIÓN) si no hay restricciones ni vistas que le hagan referencia
• 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
11FBD Tema 5 – Dpto. LSI - Donostia
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) REFERENCESEMPLEADO(NSS)
ON DELETE SET NULL
ON UPDATE CASCADE;
12FBD Tema 5 – Dpto. LSI - Donostia
OPERACIONES DE ACTUALIZACIÓNINSERT
A1: INSERT INTO EMPLEADOVALUES (‘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)
13FBD Tema 5 – Dpto. LSI - Donostia
OPERACIONES DE ACTUALIZACIÓNINSERT (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=NDGROUP 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
14FBD Tema 5 – Dpto. LSI - Donostia
OPERACIONES DE ACTUALIZACIÓN DELETE
A4A: DELETE FROM EMPLEADOWHERE APELLIDO=‘Brown’
– Una sola tabla– WHERE: selección de tuplas a eliminar– El borrado se puede propagar (RI referencial)
A4B: DELETE FROM EMPLEADOWHERE NSS=‘123456789’
A4C: DELETE FROM EMPLEADOWHERE ND IN
(SELECT NÚMERODFROM DEPARTAMENTOWHERE 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
15FBD Tema 5 – Dpto. LSI - Donostia
OPERACIONES DE ACTUALIZACIÓN UPDATE
A5: UPDATE PROYECTOSET LOCALIZACIÓNP=‘Bellaire’, NÚMD=5WHERE 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 EMPLEADOSET SALARIO=SALARIO*1.1WHERE ND IN (SELECT NÚMEROD
FROM DEPARTAMENTOWHERE NOMBRED= ‘Investigación’)
– A la izda se refiere al nuevo valor de SALARIO
– A la dcha al valor antiguo
16FBD Tema 5 – Dpto. LSI - Donostia
Consultas básicas
• Fecha de nacimiento y dirección de John Smith
C0: SELECT FECHA_NCTO, DIRECCIÓNFROM EMPLEADOWHERE NOMBRE=‘John’ AND
APELLIDO=‘Smith’
– Secuencia σ- π– Condiciones en WHERE:
{=, <>, <, >, <=, >=}, AND, OR, NOT
El resultado de una consulta SQL
puede contener ...
El temario de FBD NO cubretodos los aspectos de SELECT. En particular NO estudiaremos
SELECT anidados
El temario de FBD NO cubretodos los aspectos de SELECT. En particular NO estudiaremos
SELECT anidados
SELECT columnasFROM tablas[WHERE condición]
tuplas repetidas
πFECHA_NCTO, DIRECCIÓN (1)
(1) = σNOMBRE=‘John’ Y
APELLIDO=‘Smith’(EMPLEADO)
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
SEXO SALARIO NSS_SUPERV ND
EMPLEADO...
...
17FBD Tema 5 – Dpto. LSI - Donostia
Consultas básicas (2)
• Nombre y dirección de los empleados del departamento de Investigación
C1: SELECT NOMBRE, APELLIDO, DIRECCIÓNFROM EMPLEADO, DEPARTAMENTOWHERE NOMBRED=‘Investigación’ AND NÚMEROD=ND
– Secuencia: |×| - σ - π
– WHERE:condiciones de σ y |×|
πNOMBRE, APELLIDO, DIRECCIÓN (2)
(1) = DEPARTAMENTO |×|NÚME-ROD=ND EMPLEADO
(2) = σNOMBRED=‘Investigación’ (1)
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
SEXO SALARIO NSS_SUPERV ND
EMPLEADO...
...
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
DEPARTAMENTO
18FBD Tema 5 – Dpto. LSI - Donostia
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’
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’
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
DEPARTAMENTO
PROYECTO
NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
EMPLEADO...
PR_STF ←σLOCALIZACIÓNP=‘Stafford’(PROYECTO)
DP_CN←PR_STF |×|NÚMD=NÚME-
ROD DEPARTAMENTOJEFE_DP_PR←
DP_CN |×| NSS_JEFE= NSS EMPLEADO
πNÚMEROP, NÚMD, APELLIDO, DIRECCIÓN, FECHA_NCTO (JEFE_DP_PR)
1
23
4
19FBD Tema 5 – Dpto. LSI - Donostia
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
– Con EMPLEADO.NOMBRE se distingue el atributo NOMBRE de la tabla EMPLEADO del atributo NOMBRE de la tabla DEPARTAMENTO
NOMBRE NÚMEROD NSS_JEFE FECHA_INIC_JEFE
DEPARTAMENTO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
SEXO SALARIO NSS_SUPERV NÚMEROD
EMPLEADO...
...
20FBD Tema 5 – Dpto. LSI - Donostia
Alias
• Nombre y apellido de cada empleado junto al nombre y apellido de su supervisor
C8: SELECT E.NOMBRE, E.APELLIDO, S.NOMBRE, S.APELLIDO FROM EMPLEADO E, EMPLEADO SWHERE E.NSS_SUPERV=S.NSS
– 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 EMPLEADOen 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ÓNFROM EMPLEADO E, DEPARTAMENTO DWHERE D.NOMBRE = ‘Investigación’ AND
D.NÚMEROD=E.NÚMEROD
NOMBRE INIC APELLIDO NSS FECHA_NCTO NSS_SUPERV ND
EMPLEADO S...
NOMBRE INIC APELLIDO NSS FECHA_NCTO NSS_SUPERV ND
EMPLEADO E...
Uso de alias
Declaración de alias
Uso de alias
21FBD Tema 5 – Dpto. LSI - Donostia
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 NSSFROM EMPLEADO
• Combinaciones posibles de NSS de empleados con nombres de departamento:
C10: SELECT NSS, NOMBREDFROM 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
22FBD Tema 5 – Dpto. LSI - Donostia
SELECT *
• Selecciona todos los atributos de las tablas de FROM
C1C:SELECT *FROM EMPLEADO
WHERE ND=5
C1D:SELECT *FROM EMPLEADO, DEPARTAMENTOWHERE 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.*
23FBD Tema 5 – Dpto. LSI - Donostia
DISTINCT y ALL
C11:SELECT ALL SALARIOFROM EMPLEADO
• 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 SALARIOFROM EMPLEADO
• Si sólo nos interesan los salarios distintos
SELECT DISTINCT SALARIO, APELLIDOFROM EMPLEADO
• En el resultado:– Puede haber dos filas con el mismo salario.– No puede haber dos filas con igual salario y
apellido
Poner SELECT ALL es lo mismo que poner sólo SELECT
(sin DISTINCT)
24FBD Tema 5 – Dpto. LSI - Donostia
UNION y UNION ALLINTERSECT 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 NUMEROPFROM PROYECTO, DEPARTAMENTO, EMPLEADOWHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND
APELLIDO=‘Smith’UNIONSELECT NPFROM TRABAJA_EN, EMPLEADOWHERE NSSE=NSS AND APELLIDO=‘Smith’
25FBD Tema 5 – Dpto. LSI - Donostia
Comparar subcadenas(LIKE en WHERE)
• Empleados que viven en Houston, Texas:
C12: SELECT NOMBRE, APELLIDOFROM EMPLEADOWHERE 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, APELLIDOFROM EMPLEADOWHERE FECHA_NCTO LIKE ’195_ _ _ _ _ _ _’
26FBD Tema 5 – Dpto. LSI - Donostia
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*SALARIOFROM 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?
27FBD Tema 5 – Dpto. LSI - Donostia
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, NOMBREPFROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN,
PROYECTOWHERE NÚMEROD=ND AND NSS=NSSE AND NP=NÚMEROPORDER 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
28FBD Tema 5 – Dpto. LSI - Donostia
Operador BETWEEN yconjuntos explícitos de valores
Operador BETWEEN:• Información de los empleados del departamento 5
cuyo salario está entre 30.000 y 40.000C14: SELECT *
FROM EMPLEADOWHERE (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 3C17: SELECT DISTINCT NSSE
FROM TRABAJA_ENWHERE 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_ENWHERE NÚMP BETWEEN 1 AND 3
29FBD Tema 5 – Dpto. LSI - Donostia
IS NULL e IS NOT NULL
• Nombre y apellido de empleados sin supervisores
C18: SELECT NOMBRE, APELLIDOFROM EMPLEADOWHERE 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)
• Cualquier cosa operada con NULL devuelve NULL (UNKNOWN)
Una condición puede NO verificarse por FALSE o por NULL
30FBD Tema 5 – Dpto. LSI - Donostia
Renombrar atributos del resultado con AS
C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO, S.APELLIDO AS NOMBRE_SUPERVISOR
FROM EMPLEADO AS E, EMPLEADO AS SWHERE 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, ...
FROM EMPLEADO AS E, ...
FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR, SEX, SAL, NSSS, ND), ...
SQL1
SQL2
SQL2
31FBD Tema 5 – Dpto. LSI - Donostia
Tablas combinadas(INNER y NATURAL JOIN en FROM)
• Nombre y dirección de los empleados del departa-mento de Investigación
C1: SELECT NOMBRE, APELLIDO, DIRECCIÓNFROM EMPLEADO, DEPARTAMENTOWHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD
C1A: SELECT NOMBRE, APELLIDO, DIRECCIÓNFROM (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 ...
32FBD Tema 5 – Dpto. LSI - Donostia
Tablas combinadas (2) (INNER y NATURAL JOIN en FROM)
Uso de NATURAL JOIN:
C1B: SELECT NOMBRE, APELLIDO, DIRECCIÓNFROM (EMPLEADO NATURAL JOIN (DEPARTAMEN-
TO 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, EMPLEADOWHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND
LOCALIZACIÓNP=‘Stafford’
C2A:SELECT NÚMEROP, NÚMD, APELLIDO, DIRECCIÓNFECHA_NCTO
FROM (PROYECTO INNER JOIN DEPARTAMENTO ON NÚMD=NÚMEROD)
INNER JOIN EMPLEADO ON NSS_JEFE=NSSWHERE LOCALIZACIÓNP=‘Stafford’
33FBD Tema 5 – Dpto. LSI - Donostia
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 NOnumé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
NOMBREP
EMPLEADO
FranklinJohn
AliciaJennifer
RameshJoyce
AhmadJames
SALARIO ND
15.000NULL
10.00020.000
10.00010.000
20.00020.000
55
44
55
41
... ......
NOMBRED NÚMEROD
DEPARTAMENTO
InvestigaciónAdministración
Dirección
541
SUM(SA-LARIO)
MAX(SA-LARIO)
105.000 20.000
MIN(SA-LARIO)
10.000
AVG(SAL-ARIO)
15.000
C19:
34FBD Tema 5 – Dpto. LSI - Donostia
Funciones agregadas y de agrupación (2)
• Suma de los salarios de los empleados del departamen-to 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’:
C21: SELECT COUNT(*)FROM EMPLEADO
C22: SELECT COUNT(*)FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NÚMERODWHERE NOMBRED=‘Investigación’
SUM(SA-LARIO)
MAX(SA-LARIO)
35.000 15.000
MIN(SA-LARIO)
10.000
AVG(SAL-ARIO)
11.666C20:
35.000 / 335.000 / 3
NOMBREP
EMPLEADO
FranklinJohn
AliciaJennifer
RameshJoyce
AhmadJames
SALARIO ND
15.000NULL
10.00020.000
10.00010.000
20.00020.000
55
44
55
41
... ......
NOMBRED NÚMEROD
DEPARTAMENTO
InvestigaciónAdministración
Dirección
541
* se refiere a tuplas* se refiere a tuplas
COUNT(*)
8C21: COUNT(*)
4C22:
35FBD Tema 5 – Dpto. LSI - Donostia
Funciones agregadas y de agrupación (3)
• Cuántos valores de salario diferentes hay:
C23: SELECT COUNT(DISTINCT SALARIO)FROM EMPLEADO
• Cuántos valores de salario hay (con repeticiones):
C23’: SELECT COUNT(SALARIO)FROM EMPLEADO
• Cuántos empleados hay:
C23’’: SELECT COUNT(*)FROM EMPLEADO
Cuenta las filas con salario NO nulo
COUNT(DISTINCT SALARIO)
3
C23:
COUNT( SALARIO)
7
C23’:
COUNT( *)
8
C23’’:
Cuenta todas lasfilas de la tabla
NO cuentalos valores nulos
¿Qué ocurre cuando todos los salarios valen NULL?¿Qué ocurre cuando la tabla está vacía?
NOMBREP
EMPLEADO
FranklinJohn
AliciaJennifer
RameshJoyce
AhmadJames
SALARIO ND
15.000NULL
10.00020.000
10.00010.000
20.00020.000
NULL5
44
55
41
... ...
36FBD Tema 5 – Dpto. LSI - Donostia
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
Fig. 8.4 (a)
NOMBREP
EMPLEADO
JuanJon
RosaAna
SALARIO ND
10NULL
1010
NULLNULL
55
... ...
NULL5
ND
22
1010
COUNT(*) AVG(SALARIO)
NOMBREP
EMPLEADO
FranklinJohn
AliciaJennifer
RameshJoyce
AhmadJames
SALARIO ND
15.00030.000
10.00020.000
10.00010.000
20.00020.000
55
44
55
41
... ...
541
ND
431
16.25016.66620.000
COUNT(*) AVG(SALARIO)
C24:
C24:
Los valores nulos forman su
propio grupo
37FBD Tema 5 – Dpto. LSI - Donostia
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=NPGROUP BY NÚMEROP, NOMBREP
PROYECTOINNER JOINTRABAJA_EN
ON NÚMEROP=NP :
NP HORAS
2
1
3
1
22
310
30
20
1010
3030
2020
7.5
32.5
40.0
20.0
20.010.0
10.010.0
30.0
10.0
10.035.0
5.020.0
15.0nulo
...
NÚMEROP
2
1
3
1
22
310
30
20
1010
3030
2020
NOMBREP
ProductoY
ProductoX
ProductoZ
ProductoX
ProductoYProductoY
ProductoZAutomatización
Nuevos beneficios
Reorganización
AutomatizaciónAutomatización
Nuevos beneficiosNuevos beneficios
ReorganizaciónReorganización
NÚMEROP1
NOMBREPRProductoX
COUNT(*)2
2 ProductoY 33 ProductoZ 210 Automatización 320 Reorganización 330 Nuevos beneficios 3
C25:
En C25, ¿se puede eliminar NOMBREP del GROUP BY?
Agrupación por varios atributos
38FBD Tema 5 – Dpto. LSI - Donostia
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=NPGROUP BY NÚMEROP, NOMBREPORDER 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(*) ASNUM_EMP
FROM PROYECTO INNER JOIN TRABAJA_EN ON NÚMEROP=NP
GROUP BY NÚMEROP, NOMBREPORDER BY NUM_EMP ASC
NO se puede usar el nuevo nombre (AS) del atributo del resultado en
ORDER BY
39FBD Tema 5 – Dpto. LSI - Donostia
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 ANDESTADO_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)
40FBD Tema 5 – Dpto. LSI - Donostia
Análisis de consultas SQL
SELECT <atributos y funciones>FROM <tablas>[WHERE <condición>][GROUP BY <atributos agrupación>][ORDER BY <atributos ordenación>]
• 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.
También hay HAVING, que este curso no estudiaremos
41FBD Tema 5 – Dpto. LSI - Donostia
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.
42FBD Tema 5 – Dpto. LSI - Donostia
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
43FBD Tema 5 – Dpto. LSI - Donostia
Ejercicios
44FBD Tema 5 – Dpto. LSI - Donostia
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 Wongd) 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 proyectosf) Empleados que no trabajan en ningún proyectog) Nombre de cada departamento junto al salario medio
de los empleados asignados al mismoh) Salario medio de las empleadas de la compañíai) Nombre y dirección de los empleados que trabajan
en algún proyecto situado en Houston pero departamento no está situado allí
j) Jefes de departamento sin dependientes
8.14b) Número de empleados de sexo masculino de cada
departamento
NO: división
NO: anidados
45FBD Tema 5 – Dpto. LSI - Donostia
Ejercicio: consultas SQL EMPRESA (2)(8.13 Elmasri/Navathe 02)
Figura 7.7 restricciones de integridad referencial representadas en el esquema de la base de datos relacional EMPRESA
NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE
DEPARTAMENTO
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
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
SEXO SALARIO NSS_SUPERV ND
EMPLEADO
......
46FBD Tema 5 – Dpto. LSI - Donostia
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, obtener su nombre, dirección y nº de libros.
g) Por cada libro escrito (o coescrito) por ‘StephenKing’, obtener su título y el nº de copias en la sucursal ‘Central’.
IdLibro Título NombreEditorialLIBRO
Nombre Dirección TeléfonoEDITORIAL
IdLibro IdSucursal NúmCopiasCOPIAS_LIBRO
IdLibro NombreAutorAUTORES_LIBROS
IdSucursal NombreSucursal DirecciónSUCURSAL_BIBLIOTECA
NúmTarjeta Nombre DirecciónLECTOR
Teléfono
Figura 7.20: Esquema de BDR
para la BD BIBLIOTECA
IdLibro IdSucursal NúmTarjetaPRÉSTAMOS
FechaSale FechaDevol...
...
NO: HAVING
47FBD Tema 5 – Dpto. LSI - Donostia
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.
48FBD Tema 5 – Dpto. LSI - Donostia
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 99c) 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.
Nombre NúmAlumno Grado
NombreCurso
ALUMNO
NúmCurso HorasCréditoCURSO
IdentSección NúmCurso SemestreSECCION
NúmCurso NúmRequisitoREQUISITO
NúmAlumno IdentSección Nota
INFORME_CALIFICACIONES
Carrera
Departamento
Año Profesor
49FBD Tema 5 – Dpto. LSI - Donostia
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.
50FBD Tema 5 – Dpto. LSI - Donostia
Ejercicio: consultas SQL BANCOS (2)
Código Nombre
NúmCta
BANCO
Interés SaldoCUENTA
NúmPrés TAE ImportePRÉSTAMO
DNI NombreCLIENTE
NúmCta DNICUENTA_CLIENTE
Banco
Banco NúmSucursal
NúmSucursal
Dir Tfno
Banco NúmSucursal CiudadSUCURSAL
NúmPrés DNIPRÉSTAMO_CLIENTE
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
Dir
51FBD Tema 5 – Dpto. LSI - Donostia
Ejercicio: consultas SQL BIBLIOTECA-2
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:
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>, ...
EJEMPLAR
SOCIO
BIBLIOTECAESTA_EN
PRESTAMO FechaPréstamoDíaMesAño
(0,N)(1,1)
(0,N)
(0,N)
COD_BIB FACULTAD TFNO BIBLIOTECARIABIBLIOTECA
COD_EJE TÍTULO AUTOREDITORIALEJEMPLAR ÁREA COD_BIB
DNI NOM_SOCIO TFNO CIUDADSOCIO CARRERA
DNI COD_EJE DÍA MESPRÉSTAMO AÑO DIAS_PRESTADO
Puede haber variosejemplares con el
mismo título
título título“Fundamentos de BD” “BD:, ¡Qué gozada!”“Fundamentos de BD” “SQL para novatos”“BD:, ¡Qué gozada!” “Fundamentos de BD”
52FBD Tema 5 – Dpto. LSI - Donostia
Ejercicio: definición y actualización SQL de ITINERARIOS
(1,1)
(0,N)
(1,N)
(1,1)
VEHICULO PAIS
ITINERARIO CIUDAD
Por donde pasa
V_I P_CDe donde
A donde
Cod-bast
ClaseMarca
Matricula
Fecha
Orden
Moneda
Nombre
Codigo
Dieta
Cod_itiNombre
Cod-c
Habit
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.
(1,N)
(1,1)
(1,N)(0,N)
(0,N)
(1,N)
53FBD Tema 5 – Dpto. LSI - Donostia
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 INTEGER NOT NULL,Nombre VARCHAR (15) NOT NULL,Moneda 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,
54FBD Tema 5 – Dpto. LSI - Donostia
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);
55FBD Tema 5 – Dpto. LSI - Donostia
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 andDNI>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.’ WHEREDNI>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 WHEREBanco=1
m) UPDATE CUENTA SET Banco=null WHERE NCta=3
56FBD Tema 5 – Dpto. LSI - Donostia
Ejercicio: análisis de restricciones de integridad en BANCOS (2)
Código Nombre1 BBVA2 Santander
2101 Kutxa2102 BBK
DirGran Vía, 17Espolón, 1Garibai, 6
Salaberría, 3
BANCO
Banco NSuc1 11 21 32 1
CiudadBilbao
S. SebastiánVitoria
Santander
SUCURSAL
2 2 S. Sebastián2101 1 S. Sebastián2101 2 Pasajes2102 1 Bilbao2102 2 Sestao2102 3 Portugalete
DNI Nombre111 Juan222 Pedro333 Gaizka444 Luisa
DirLegazpi, 1Guridi, 5
Lardizabal, 1Nagusia, 2
CLIENTE
555 Ceferina Elkano, 3666 Yolanda Av. Madrid, 9777 Segismundo H. Cortés, 9888 Ataulfo Cervantes, 1999 Teodorico Velázquez, 7000 Atenea Sorolla, 13
Tfno111111222222333333444444555555666666777777888888999999101010
NCta Interés1 12 13 14 2
Saldo20000300004000030000
CUENTA
5 2 400006 3 500007 3 600008 3 600009 4 700000 4 80000
Banco11122
21012101210221022102
NSuc1231212123
PRÉSTAMO-CLIENTENPres DNI
0 1110 0001 1112 1112 2223 1113 3334 1114 4445 1115 5556 1116 6667 1117 7778 1118 8889 1119 999
PRÉSTAMONPres TAE
1 102 103 104 20
Importe200000300000400000300000
5 20 4000006 30 5000007 30 6000008 30 6000009 40 7000000 40 800000
Banco11122
21012101210221022102
NSuc1231212123
CE
CE
CECECE
NCta DNI0 1110 2220 5550 000
CUENTA-CLIENTE
1 1112 1112 2223 1113 3334 1114 2224 4445 1115 555
6 1116 2226 3336 6667 1117 7778 1118 2228 4448 8889 1119 3339 999
...
... CECE
CE
CE
57FBD Tema 5 – Dpto. LSI - Donostia
Junio 00
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 macaonperteneciente a la colección de José Mari Poza.
Nombre Características
NombreCientífico Origen Hábitat EsperanzaVida
DNI Nombre Dirección Tfno
Código Ubicación PrecioEstimado
Número Procedencia TamañoNombreCientífico
NomEspecie
CódColección EsPrincipal
Nombre Código MejorEjemplar
NombreCientífico Color
Especie
Mariposa
Persona
Colección
Ejemplar
EspecieColección
ColoresMariposa
CódColección
58FBD Tema 5 – Dpto. LSI - Donostia
Septiembre 00
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 vivenen 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
ZonaUrbana
BloqueCasas
CasaParticular
Piso
Persona
PoseeC
PoseeP
NombreZona Categoría
Calle Número Npisos NombreZona
Número M2NombreZona
Calle Número Planta Puerta M2
DNI Nombre Edad NúmCasaNombreZona Calle NúmBloque Planta
DNI NúmCasaNombreZona
DNI Calle NúmBloque Planta
Puerta
Puerta
59FBD Tema 5 – Dpto. LSI - Donostia
Junio 01
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”
Artículo NomArt Tipo Precio Tamaño
Ingrediente NomIngr Precio
Pedido NúmeroFechaHoraPedidoHoraServido
Domicilio Tfno Dirección
ProductoEspecial NomArt NomPrd
Art_Ingr NomArt NomIngr
Prd_Ingr NomArt NomPrd NomIngr
Ped_Art Número NomArt Cantidad
Ped_Prd NúmeroNomArt CantidadNomPrd
Tfno
Suministrador
60FBD Tema 5 – Dpto. LSI - Donostia
Septiembre 01
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.
Película
Cine
Persona
CódigoTítuloGénero
Nom Dirección Tfno
Nombre Sexo
Premio
Sala
Producida Código Nombre
Actor Código Nombre
Dirigida Código Nombre
Proyectada Código Nom Número
PremPers Categoría Nombre
FechaInicioFechaFinCategoría Euros CódigoAño
Año
Nacionalidad
Nom Número Aforo
61FBD Tema 5 – Dpto. LSI - Donostia
Junio 02
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 hayanmarcado 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, 5b) FRA, Francois Republique, Zinedine Zidane, 24, 9, 9
ResultadoCódigo_E1 Código_E2 FechaPARTIDO
Código_H Dirección TeléfonoHOTEL
DNI ClubCLUBES_AÑO
DNI Fecha LugarCONTROL_ANTIDOPAJE
Total_GolesCódigo_E País CamisetaEQUIPO
FechaNDNI NombreJUGADOR Goles
ÁrbitroCódigo_E1Código_E2FechaÁRBITRO
Código_E
Código_E
NºHabitacionesNombre
ResultadoCódigo_E1 Código_E2 FechaPARTIDO
Código_H Dirección TeléfonoHOTEL
DNI ClubCLUBES_AÑO
DNI Fecha LugarCONTROL_ANTIDOPAJE
Total_GolesCódigo_E País CamisetaEQUIPO
FechaNDNI NombreJUGADOR Goles
ÁrbitroCódigo_E1Código_E2FechaÁRBITRO
Código_E
Código_E
NºHabitacionesNombre
62FBD Tema 5 – Dpto. LSI - Donostia
Septiembre 02
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.
CENTRO Cód_Centro Nombre Dirección
AUTOBÚS Matrícula N_Asientos Compañía Cód_Centro
ALUMNO DNI Nombre Cód_PuebloCód_Centro
CURSO DNI Id_Curso
PUEBLO NombreCód_Pueblo Provincia
PARADA CalleCód_Pueblo
PARA_EN CalleCód_PuebloMatrícula
VIAJA_EN DNI Matrícula Fecha_Inscripción
CENTRO Cód_Centro Nombre Dirección
AUTOBÚS Matrícula N_Asientos Compañía Cód_Centro
ALUMNO DNI Nombre Cód_PuebloCód_Centro
CURSO DNI Id_Curso
CENTRO Cód_Centro Nombre DirecciónCENTRO Cód_Centro Nombre DirecciónCód_Centro Nombre Dirección
AUTOBÚS Matrícula N_Asientos Compañía Cód_CentroAUTOBÚS Matrícula N_Asientos Compañía Cód_CentroMatrícula N_Asientos Compañía Cód_Centro
ALUMNO DNI Nombre Cód_PuebloCód_CentroALUMNO DNI Nombre Cód_PuebloCód_CentroDNI Nombre Cód_PuebloCód_Centro
CURSO DNI Id_CursoCURSO DNI Id_CursoDNI Id_Curso
PUEBLO NombreCód_Pueblo Provincia
PARADA CalleCód_Pueblo
PARA_EN CalleCód_PuebloMatrícula
VIAJA_EN DNI Matrícula Fecha_Inscripción
PUEBLO NombreCód_Pueblo ProvinciaPUEBLO NombreCód_Pueblo ProvinciaNombreCód_Pueblo Provincia
PARADA CalleCód_PuebloPARADA CalleCód_Pueblo CalleCód_Pueblo
PARA_EN CalleCód_PuebloMatrículaPARA_EN CalleCód_PuebloMatrícula CalleCód_PuebloMatrícula
VIAJA_EN DNI Matrícula Fecha_InscripciónVIAJA_EN DNI Matrícula Fecha_Inscripción
63FBD Tema 5 – Dpto. LSI - Donostia
Junio 03
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.
COPISTERÍA
ALUMNO IdAsignatura Tema NúmeroHojasIdAsignatura Tema NúmeroHojasAPUNTES
ASIGNATURA
CURSA FICHAIdAsignaturaDNI IdAsignaturaDNI
DirecciónClaveDNI DirecciónClaveDNI
DirecciónNIF PrecioDirecciónNIF Precio CarreraIdAsignatura Curso NIFCarreraIdAsignatura Curso NIF
DNI IdAsignatura Tema NúmeroCopias FechaRecogidaFechaPeticiónDNI IdAsignatura Tema NúmeroCopias FechaRecogidaFechaPetición
64FBD Tema 5 – Dpto. LSI - Donostia
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).
Septiembre 03APAREJADOR
MUNICIPIO
INMUEBLE
PERMISO
PERSONA
TRABAJA
N_Identificación Nombre Tfno NombreMunicipio
Nombre TfnoDirección
N_Propiedad Tipo Dirección NombreMunicipioDNI
N_Propiedad DescripciónFechaPeticiónDNI N_Identificación
FechaAsignación Presupuesto FechaResolución EstáConcedido
DNI Nombre Dirección
NombreMunicipio N_Identificación
......
M2
PETICIÓN N_Propiedad DNI
Dominio booleano
65FBD Tema 5 – Dpto. LSI - Donostia
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”
Septiembre 03APAREJADOR
MUNICIPIO
INMUEBLE
PERMISO
PERSONA
TRABAJA
N_Identificación Nombre Tfno NombreMunicipio
Nombre TfnoDirección
N_Propiedad Tipo Dirección NombreMunicipioDNI
N_Propiedad DescripciónFechaPeticiónDNI N_Identificación
FechaAsignación Presupuesto FechaResolución EstáConcedido
DNI Nombre Dirección
NombreMunicipio N_Identificación
......
M2
PETICIÓN N_Propiedad DNI
Dominio booleano
66FBD Tema 5 – Dpto. LSI - Donostia
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
Junio 04
PUERTO CategoríaNúmOrdenAltitudNúmEtapa Primero
EQUIPO DirectorNombre CICLISTA EnCarreraNombreFechaNctoDorsal Equipo
MAILLOT PremioColor Metálico PARTICIPACIÓN Etapa TiempoDorsal
ETAPA SalidaKmNúmero LlegadaGanador LLEVA_MAILLOT Etapa DorsalColor
Suponiendo que haya un dominio
que incluya horas-min-seg.
67FBD Tema 5 – Dpto. LSI - Donostia
a) Nombre y procedencia de los voluntarios que hablanfrancés y acompañan a deportistas que participan endeportes cuyos eventos de clasificación se celebraronen París.
b) Nombre, apellido e identificación de aquellosdeportistas del equipo de Jorge Sánchez que cumplanla 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.
Septiembre 04
EVENTO FechaNombre
DEPORTE HistoriaCódigo Equipamiento
RECORD CódigoDeporte Ciudad
Ciudad
Nombre
NúmeroIdDeportista Fecha Hora
TIPO RECORD CódigoDeporte TipoNúmeroIdDeportista Fecha Hora
IDIOMA NúmeroIdVolunt IdiomaTIENE CódigoDeporte Ciudad Nombre
DEPORTISTA ApellidoNombreNúmeroId Dirección Teléfono NúmeroIdVolunt FechaCom FechaFin CódigoDeporte País
VOLUNTARIO ProfesiónNombreNúmeroId Procedencia
EQUIPO CódigoDeporte País Entrenador
PARTICIPA CódigoDeporte NúmeroIdDeportista
DESTACA CódigoDeporte NúmeroIdDeportista
EVENTO FechaNombre
DEPORTE HistoriaCódigo Equipamiento
RECORD CódigoDeporte Ciudad
Ciudad
Nombre
NúmeroIdDeportista Fecha Hora
TIPO RECORD CódigoDeporte TipoNúmeroIdDeportista Fecha Hora
IDIOMA NúmeroIdVolunt IdiomaTIENE CódigoDeporte Ciudad Nombre
DEPORTISTA ApellidoNombreNúmeroId Dirección Teléfono NúmeroIdVolunt FechaCom FechaFin CódigoDeporte País
VOLUNTARIO ProfesiónNombreNúmeroId Procedencia
EQUIPO CódigoDeporte País Entrenador
PARTICIPA CódigoDeporte NúmeroIdDeportista
DESTACA CódigoDeporte NúmeroIdDeportista
68FBD Tema 5 – Dpto. LSI - Donostia
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”.
Junio 05
DestinoVFechaSalida Días PrecioDía CiudadSalida DNIVIAJE DestinoVFechaSalida Días PrecioDía CiudadSalida DNIVIAJE
DNI Nombre N_TfnoGUÍADNI Nombre N_TfnoGUÍA
DNI IdiomaIDIOMADNI IdiomaIDIOMA
Id_Hotel Nombre LocalidadCapacidadHOTELId_Hotel Nombre LocalidadCapacidadHOTEL
DNI Nombre N_TfnoCLIENTE DirecciónDNI Nombre N_TfnoCLIENTE Dirección
DestinoVFechaSalida NúmeroDestinoExcursiónHoraSalida LugarSalidaEXCURSIÓN_OPCIONAL PrecioDestinoVFechaSalida NúmeroDestinoExcursiónHoraSalida LugarSalidaEXCURSIÓN_OPCIONAL Precio
DestinoVFechaSalida IdHotel DNI NúmeroNochesHOTEL_VIAJE_CLIENTE DestinoVFechaSalida IdHotel DNI NúmeroNochesHOTEL_VIAJE_CLIENTE DestinoVFechaSalida NúmeroDNIEXCUR_OPC
_CLIENTE
Id_HotelDestinoVFechaSalidaHOTEL_VIAJE Id_HotelDestinoVFechaSalidaHOTEL_VIAJE
69FBD Tema 5 – Dpto. LSI - Donostia
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.
Septiembre 05
No se repite especieen las
claves extranjeras de padre y madre
por ser la misma
RESEspecieCrotalRazaFechaNctoMataderoCrotalPadreCrotalMadreDNIGranjaNomGranjaEspecieCrotalRazaFechaNctoMataderoCrotalPadreCrotalMadreDNIGranjaNomGranja
GRANJA DNINombreE-mailDNINombreE-mailGANADERODNINombreDireccionTfnoAdministradorDNINombreDireccionTfnoAdministrador
NombreENFERMEDAD TRATAMIENTONombreDuraciónNombreDuración
MEDICAMENTOTratamientoMedicamentoTratamientoMedicamentoSÍNTOMAEnfermedadSintomaEnfermedadSintoma
ENFER_TRATAMEnfermedadTratamientoEnfermedadTratamientoAPLICAREnfermedadTratamientoEspecieCrotalF_InicioEnfermedadTratamientoEspecieCrotalF_Inicio
70FBD Tema 5 – Dpto. LSI - Donostia
ER-Relacional Junio y Septiembre 00
MARIPOSA
ESPECIE PERSONA
COLECCIÓNEJEMPLAR
ProcedenciaNúmero Tamaño
Nombre Características
Origen
Colores
NombreCientífico
Hábitat
DNI
Nombre
EsPrincipal
1
N
N
N
N
1
1
1N
M
Código
Ubicación
PrecioEstimado
Dirección
Tfno
EsperanzaVida
MejorEjemplar
NombreZona CategoríaNúmero
M2
ZONA_URBANA
PERSONA
BLOQUE_CASAS
DNI Nombre Edad
Puerta
CalleNPisos
POSEEC POSEEP
VIVEC VIVEP
M2
PISO
1 N
1
N
CASA_PARTICULARN
M M
N
N
1 1
N
N
1
Planta
Dir
Número P_P
71FBD Tema 5 – Dpto. LSI - Donostia
ER-RelacionalJunio y Septiembre 01
INGREDIENTE
ARTÍCULO
PEDIDO
DOMICILIO
PRODUCTOESPECIAL
LLEVA
BASE DE
INCLUIDO
LLEVAR_A
NomArt
Precio
NomIngrPrecio
Tamaño
Tipo
FechaNúmero
LLEVA
INCLUIDO
NomPrd
DirecciónTfno
Cantidad Cantidad
HorapedidoHora
servido
(1,N)
(0,N)
(0,N)
(0,N) (1,1)(1,N)
(0,N)(0,N)
(0,N)
(0,N)
(0,1)(0,N)
Suministrador
PERSONAPELÍCULA
PREMIO
CINESALA
ACTOR
PROYECTADA
Título
NombreSexo
Género
Código
DIRIGIDA
CONCEDIDO
Número
DirecciónTfno
Categoría
PRODUCIDA
DE
Nom
Euros(0,1)
(0,N)(0,N)(0,N)
(0,N)
(0,N)(1,N)
(1,N)
(1,N)
(1,1) (1,N)(1,N)
(1,N)
Aforo
FechaInicio
FechaFin
CONCEDIDO(0,N)
Año
Cód
Nacionalidad
72FBD Tema 5 – Dpto. LSI - Donostia
ER-Relacional Junio y Septiembre 02
HOTEL
Cód Direcc Tfno.
Nombre
EQUIPO
Cód País
Camiseta Total_Goles
RESIDE(1,N)(1,1)
PARTIDO
Fecha Resultado
Árbitros
JUEGA(1,1)(1,N)
(1,N)
Equip2
Equip1
JUGADOR
DNI
Nombre
FechaN
Clubes_Año Goles
COMPUESTO POR
(1,1)
(1,N)
CONTROLANTIDOPAJE
Fecha Lugar
PASADOA
(1,1) (0,N)
NºHabit
HOTEL
Cód Direcc Tfno.
Nombre
EQUIPO
Cód País
Camiseta Total_Goles
RESIDE(1,N)(1,1)
PARTIDO
Fecha Resultado
Árbitros
JUEGA(1,1)(1,N)
(1,N)
Equip2
Equip1
JUGADOR
DNI
Nombre
FechaN
Clubes_Año Goles
COMPUESTO POR
(1,1)
(1,N)
CONTROLANTIDOPAJE
Fecha Lugar
PASADOA
(1,1) (0,N)
NºHabit
ALUMNO
CENTRO AUTOBÚS PARADA
ESTUDIA_EN VIAJA_EN
VIVE_EN
PARA_ENCONTRATA_A
Matrícula
DNI
Nombre
(1,N)(1,1)
(0,N) (0,N)
(1,N)
(1,1)
(1,N)(1,1)
(0,N)
(1,N)
PUEBLO
ProvinciaNombreCód_Pueblo
POSEE
(1,N) (1,1)
NombreCursos
Dirección
N_Asientos
Cód_Centro Compañía
Fecha_Inscripción
Calle
ALUMNO
CENTRO AUTOBÚS PARADA
ESTUDIA_EN VIAJA_EN
VIVE_EN
PARA_ENCONTRATA_A
Matrícula
DNI
Nombre
(1,N)(1,1)
(0,N) (0,N)
(1,N)
(1,1)
(1,N)(1,1)
(0,N)
(1,N)
PUEBLO
ProvinciaNombreCód_Pueblo
POSEE
(1,N) (1,1)
NombreCursos
Dirección
N_Asientos
Cód_Centro Compañía
Fecha_Inscripción
CalleCalle
73FBD Tema 5 – Dpto. LSI - Donostia
ER-Relacional Junio 2003
Septiembre 2003
Alumno
Apuntes Asignatura
Copistería
Cursa Asignada_a
Pertenecen_a
IdAsignatura
DNI
(0,N)
(0,N) (0,N)
(1,N) (1,N)
(1,1)
(0,N)
Clave Dirección
NúmeroHojas
Dirección
Curso
Carrera
Precio
NIF
(1,1)
FechaRecogida
NúmeroCopias
Pide
Ficha
(1,1)FechaPeticiónFechaPetición
TemaTema
MUNICIPIO INMUEBLE
PERMISOAPAREJADOR
Nombre Dirección Tfno NºPropiedad Tipo Dirección M2
UBICADO PERTENECE
SOLICITATRABAJAPLANTILLA PERSONA
NºIdentificaciónNombre
Tfno
ASIGNADO
FechaAsignaciónDNI DirecciónNombre
NºPeticiones
Descripción Presupuesto
FechaPeticiónFechaPetición FechaResolución
EstáConcedido
(0,N) (1,1) (1,1)
(0,N)
(1,1)
(0,N)(0,N)
(0,1)(0,N)
(0,N)
(0,N)(1,1)
(1,N)
74FBD Tema 5 – Dpto. LSI - Donostia
ER-Relacional Junio 2004
Septiembre 2004
CICLISTANombre
Fecha_Ncto
Dorsal
Edad
En_Carrera
EQUIPO
Nombre Director
Consta(1,1)
(1,N)
ETAPAKmSalida
Número
Llegada
Altitud
Categoría
PUERTO
NºOrden
Corresponde
(0,N)
(1,1)
MAILLOT
Color Premio Metálico
Lleva
(0,N)
1 (0,N)(1,N)
N
M
Gana(1,1) (0,N)
Participa(1,N) (1,N)
Tiempo
Horas
Min.
Seg.
Primero(1,1)
(0,N)
CICLISTANombre
Fecha_Ncto
Dorsal
Edad
En_Carrera
EQUIPO
Nombre Director
Consta(1,1)
(1,N)
ETAPAKmSalida
Número
Llegada
Altitud
Categoría
PUERTO
NºOrdenNºOrden
Corresponde
(0,N)
(1,1)
MAILLOT
Color Premio Metálico
Lleva
(0,N)
1 (0,N)(1,N)
N
M
Gana(1,1) (0,N)
Participa(1,N) (1,N)
Tiempo
Horas
Min.
Seg.
Primero(1,1)
(0,N)
DEPORTISTA
Nombre
Apellido
NúmeroId
Teléfono
EQUIPO
CONSTA
(0,1)
(1,N)
DEPORTENombre
Código
Historia
Tipo
RECORD
FechaCom
CONSIGUE(0,N)
(1,1)
EVENTO
Código
Fecha
DESTACA(0,N)
(0,N)(0,N)
PARTICIPA(1,N) (1,N)
EquipamientoTIENE
Ciudad
Nombre(1,N)
VOLUNTARIONúmeroId
(1,1)
ACOMPAÑA
(1,N)
Nombre
ProcedenciaProfesión
Idioma
(0,N)
Dirección
Fecha
Hora
Ciudad
País Entrenador
SELECCIÓN
(1,1)
(0,N)FechaCom
FechaFin
DEPORTISTA
Nombre
Apellido
NúmeroId
Teléfono
EQUIPO
CONSTA
(0,1)
(1,N)
DEPORTENombre
Código
Historia
Tipo
RECORD
FechaComFechaCom
CONSIGUE(0,N)
(1,1)
EVENTO
Código
Fecha
DESTACA(0,N)
(0,N)(0,N)
PARTICIPA(1,N) (1,N)
EquipamientoTIENE
Ciudad
Nombre(1,N)
VOLUNTARIONúmeroId
(1,1)
ACOMPAÑA
(1,N)
Nombre
ProcedenciaProfesión
Idioma
(0,N)
Dirección
Fecha
Hora
Ciudad
PaísPaís Entrenador
SELECCIÓN
(1,1)
(0,N)FechaCom
FechaFin
75FBD Tema 5 – Dpto. LSI - Donostia
ER-Relacional Junio 2005
Septiembre 2005
VIAJE HOTEL
CLIENTE
GUÍA
EXCURSIÓNOPCIONAL
ASIGNADO
ASIGNADA ALOJADO
LLEVA
ASISTE
(1,1)
(0,N)
(0,N)(1,N)
(0,N) NM (1,N)
P (1,N)
(0,N)(0,N)
(0,N)
(1,1)
IdentDestino
FechaSalida Días
Precio día
Precio total
Ciudad salida
DNI
Nombre
N_Tfno
IdiomasIdHotel
Nombre
Localidad
Capacidad
DNI
Nombre
Dirección
N_Tfno
Hora salida
Lugar salida
Precio
NúmeroNúmeroNº Noches
DestinoDestino
TRATAMIENTOGANADERO
ENFERMEDADGRANJA PERTENECE APLICADO
SE_APLICAADMINISTRADA PERTENECE
Medicamentos
IdEspecie
CrotalRaza
PADRE MADRE
FechaNcto
RES
Síntomas
Nombre
Nombre
DuraciónDNI
Nombre
Dirección
Tfno
Nombre
(0,1) hija
(0,N) madre
hija (0,1)
padre (0,N)
(0,N)(0,N)
(0,N) (1,N)
(1,N)
(1,1)(1,N)
(1,1)(1,1)
(0,N)(0,N)
Matadero
FinTratamiento
APLICAR
InicioTratamientoInicioTratamiento
(1,1)