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