MANUAL COMPLETO DE SQL

34,538 views
34,351 views

Published on

ING. EDGAR SANDOVAL

Published in: Education, Technology
1 Comment
14 Likes
Statistics
Notes
  • Muy interesante le aporte
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
34,538
On SlideShare
0
From Embeds
0
Number of Embeds
44
Actions
Shares
0
Downloads
2,827
Comments
1
Likes
14
Embeds 0
No embeds

No notes for slide

MANUAL COMPLETO DE SQL

  1. 1. 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
  2. 2. 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 Mod. Relacional Tabla Relación Fila Tupla Columna Atributo FBD Tema 5 – Dpto. LSI - Donostia 2
  3. 3. 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 ... Restricciones Elementos Vistas de un esquema 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
  4. 4. Instrucción CREATE TABLE Fig 8.1(a) No pueden tomar valor nulo CREATE TABLE DEPARTAMENTO Atributos Atributos ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, Clave primaria Restricciones Restricciones Integridad de entidades PRIMARY KEY(NUMEROD), Clave candidata UNIQUE(NOMBRED), FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ); Clave extranjera (o externa) Fig 8.1(b) Atributos Valor por Atributos CREATE TABLE DEPARTAMENTO defecto ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL DEFAULT ‘888665555’, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, (con nombre) Restricciones (connombre) Restricciones 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 Opciones: RI, para poder • CASCADE cambiarla o • SET DEFAULT eliminarla con • SET NULL ALTER y • RESTRICT (no poner ON UPDATE – ON DELETE) DROP FBD Tema 5 – Dpto. LSI - Donostia 4
  5. 5. Tipos de datos en SQL2 Fecha: Enteros de diversos tamaños: – DATE – INTEGER / INT – Sólo admite fechas válidas – SMALLINT – Generalmente YYYY-MM- Reales: DD – FLOAT – Componentes: YEAR, – REAL MONTH, DAY – DOUBLE PRECISION Hora: Números con formato: – TIME(i) – NUMERIC(i,j) – Sólo admite horas válidas – DECIMAL(i,j) / DEC(i,j) – Normalmente HH-MM-SS – i dígitos enteros y j dígitos – Componentes: HOUR, decimales MINUTE, SECOND – Por defecto: i según la – i = posiciones de fracciones implementación, j=0 de sg. Cadena de caracteres de longitud Hora con desplazamiento de huso fija: horario: – CHAR(n) – TIME WITH TIME ZONE – CHARACTER(n) – +13:00 a -12:59 Cadena de caracteres de longitud – Sin ‘WITH TIME ZONE’: variable: huso local de la sesión – CHARACTER Marca de tiempo: VARYING(n) – TIMESTAMP [WITH – VARCHAR(n) TIME ZONE] – CHAR VARYING(n) – Componentes: DATE, TIME – n=máximo definido. Por y mínimo 6 posiciones de defecto n=1 fracciones de sg. Cadena de bits de longitud fija: Intervalo de tiempo: – BIT(n) – INTERVAL – n = número de bits – valor relativo (de tiempo) – Por defecto n=1 para incrementar o decrementar a un valor de Cadena de bits de longitud fecha, hora o marca de variable: tiempo – BIT VARYING(n) – Se pueden calificar con – n=máximo definido. Por YEAR/MONTH o defecto n=1 DAY/TIME (unidad mayor/unidad menor) FBD Tema 5 – Dpto. LSI - Donostia 5
  6. 6. 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
  7. 7. CREATE TABLE: especificación de restricciones y valores por omisión • Definición de atributos: no se permite que el atributo tome valor nulo – NOT NULL: un-valor: se indica qué valor tomará el atributo – DEFAULT 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 ); FBD Tema 5 – Dpto. LSI - Donostia 7
  8. 8. 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
  9. 9. 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
  10. 10. 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 – CASCADE (constraints) y vistas que hagan referencia a la columna (DIRECCIÓN) sólo borra la columna (DIRECCIÓN) si no – RESTRICT 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 FBD Tema 5 – Dpto. LSI - Donostia 10
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. OPERACIONES DE ACTUALIZACIÓN DELETE A4A: DELETE FROM EMPLEADO APELLIDO=‘Brown’ WHERE – Una sola tabla – WHERE: selección de tuplas a eliminar – El borrado se puede propagar (RI referencial) A4B: DELETE FROM EMPLEADO NSS=‘123456789’ WHERE A4C: DELETE FROM EMPLEADO ND IN WHERE (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
  15. 15. OPERACIONES DE ACTUALIZACIÓN UPDATE A5: UPDATE PROYECTO LOCALIZACIÓNP=‘Bellaire’, NÚMD=5 SET 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 SALARIO=SALARIO*1.1 SET 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
  16. 16. Consultas básicas El temario de FBD NO cubre SELECT columnas El temario de FBD NO cubre todos los aspectos de SELECT. todos los aspectos de SELECT. FROM tablas En particular NO estudiaremos En particular NO estudiaremos [WHERE condición] SELECT anidados SELECT 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 tuplas repetidas consulta SQL puede contener ... FBD Tema 5 – Dpto. LSI - Donostia 16
  17. 17. 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: |×| - σ - π de σ y |×| – WHERE:condiciones FBD Tema 5 – Dpto. LSI - Donostia 17
  18. 18. 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← 3 PR_STF |×|NÚMD=NÚME- JEFE_DP_PR← DP_CN |×| NSS_JEFE ROD DEPARTAMENTO = NSS EMPLEADO FBD Tema 5 – Dpto. LSI - Donostia 18
  19. 19. Calificar atributos • Nombre, apellido y dirección de los empleados del departamento de investigación C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIÓN EMPLEADO, DEPARTAMENTO FROM 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 de la tabla EMPLEADO del atributo NOMBRE de la tabla DEPARTAMENTO NOMBRE FBD Tema 5 – Dpto. LSI - Donostia 19
  20. 20. Alias • Nombre y apellido de cada empleado junto al nombre y apellido de su supervisor EMPLEADO S ... NSS_SUPERV ND NOMBRE INIC APELLIDO NSS FECHA_NCTO EMPLEADO E ... NSS_SUPERV ND 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
  21. 21. 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
  22. 22. 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
  23. 23. DISTINCT y ALL Poner SELECT ALL es lo C11:SELECT ALL SALARIO mismo que poner sólo SELECT (sin DISTINCT) FROM 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 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
  24. 24. 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 PROYECTO, DEPARTAMENTO, EMPLEADO FROM WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND APELLIDO=‘Smith’ UNION SELECT NP TRABAJA_EN, EMPLEADO FROM WHERE NSSE=NSS AND APELLIDO=‘Smith’ FBD Tema 5 – Dpto. LSI - Donostia 24
  25. 25. 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
  26. 26. 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
  27. 27. 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 NOMBRED DESC, APELLIDO ASC, ORDER BY NOMBRE ASC FBD Tema 5 – Dpto. LSI - Donostia 27
  28. 28. 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
  29. 29. 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
  30. 30. 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: SQL1 EMPLEADO E, ... FROM SQL2 EMPLEADO AS E, ... FROM SQL2 FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR, SEX, SAL, NSSS, ND), ... FBD Tema 5 – Dpto. LSI - Donostia 30
  31. 31. 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Ó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 AS ED ... ON ND=NÚMEROD) FBD Tema 5 – Dpto. LSI - Donostia 31
  32. 32. Tablas combinadas (2) (INNER y NATURAL JOIN en FROM) Uso de NATURAL JOIN: C1B: SELECT NOMBRE, APELLIDO, DIRECCIÓN FROM (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, 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
  33. 33. 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 NOMBRED NÚMEROD NOMBREP SALARIO ND John 5 Investigación 5 NULL ... Franklin 15.000 5 Administración 4 Ramesh 10.000 5 ... ... Dirección 1 10.000 5 Joyce 10.000 4 Alicia 20.000 4 Jennifer SUM(SA- MAX(SA- MIN(SA- AVG(SAL- C19: 20.000 4 Ahmad LARIO) LARIO) LARIO) ARIO) 20.000 1 105.000 20.000 10.000 15.000 James FBD Tema 5 – Dpto. LSI - Donostia 33
  34. 34. 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’: **se refiere aatuplas C21: SELECT COUNT(*) se refiere tuplas FROM EMPLEADO C22: SELECT COUNT(*) FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NÚMEROD WHERE NOMBRED=‘Investigación’ DEPARTAMENTO EMPLEADO NOMBRED NÚMEROD NOMBREP SALARIO ND John 5 Investigación 5 NULL ... Franklin 15.000 5 Administración 4 Ramesh 10.000 5 ... ... Dirección 1 10.000 5 Joyce SUM(SA- MAX(SA- MIN(SA- AVG(SAL- 10.000 4 Alicia C20: LARIO) LARIO) LARIO) ARIO) 20.000 4 Jennifer 35.000 15.000 10.000 11.666 20.000 4 Ahmad 20.000 1 James 35.000 / / 3 35.000 3 C21: COUNT(*) C22: COUNT(*) 8 4 FBD Tema 5 – Dpto. LSI - Donostia 34
  35. 35. Funciones agregadas y de agrupación (3) • Cuántos valores de salario diferentes hay: C23: SELECT COUNT(DISTINCT SALARIO) NO cuenta FROM EMPLEADO los valores nulos • Cuántos valores de salario hay (con repeticiones): Cuenta las filas con C23’: SELECT COUNT(SALARIO) salario NO nulo FROM EMPLEADO • Cuántos empleados hay: Cuenta todas las C23’’: SELECT COUNT(*) filas de la tabla FROM EMPLEADO EMPLEADO C23: COUNT(DISTINCT SALARIO) NOMBREP SALARIO ND 3 John 5 NULL Franklin 15.000 C23’: NULL Ramesh 10.000 5 ... ... COUNT( SALARIO) 10.000 5 Joyce 7 10.000 4 Alicia C23’’: 20.000 4 Jennifer COUNT( *) 20.000 4 Ahmad 8 20.000 1 James ¿Qué ocurre cuando todos los salarios valen NULL? ¿Qué ocurre cuando la tabla está vacía? FBD Tema 5 – Dpto. LSI - Donostia 35
  36. 36. 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 ND COUNT(*) AVG(SALARIO) NOMBREP SALARIO ND 5 4 16.250 John 30.000 5 4 3 16.666 Franklin 15.000 5 1 1 20.000 Ramesh 10.000 5 ... ... 10.000 5 Joyce Fig. 8.4 (a) 10.000 4 Alicia 20.000 4 Jennifer Los valores 20.000 4 Ahmad nulos forman su 20.000 1 James propio grupo EMPLEADO C24: ND COUNT(*) AVG(SALARIO) NOMBREP SALARIO ND 2 10 Jon NULL NULL NULL 5 2 10 Juan 10 NULL Rosa 10 5 ... ... Ana 10 5 FBD Tema 5 – Dpto. LSI - Donostia 36
  37. 37. 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 NP HORAS NOMBREP NÚMEROP PROYECTO 1 32.5 ProductoX 1 INNER JOIN 1 20.0 ProductoX 1 TRABAJA_EN 2 7.5 ProductoY 2 ON 2 20.0 ProductoY 2 NÚMEROP=NP : 2 10.0 ProductoY 2 3 40.0 ProductoZ 3 3 10.0 ProductoZ 3 ... 10 10.0 Automatización 10 10 10.0 Automatización 10 10 35.0 Automatización 10 20 10.0 Reorganización 20 20 15.0 Reorganización 20 20 nulo Reorganización 20 30 5.0 Nuevos beneficios 30 30 20.0 Nuevos beneficios 30 30 30.0 Nuevos beneficios 30 NÚMEROP NOMBREPR COUNT(*) C25: 1 ProductoX 2 2 ProductoY 3 3 ProductoZ 2 10 Automatización 3 20 Reorganización 3 30 Nuevos beneficios 3 En C25, ¿se puede eliminar NOMBREP del GROUP BY? FBD Tema 5 – Dpto. LSI - Donostia 37
  38. 38. 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
  39. 39. 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
  40. 40. Análisis de consultas SQL También hay SELECT <atributos y funciones> HAVING, que FROM <tablas> este curso no [WHERE <condición>] estudiaremos [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. FBD Tema 5 – Dpto. LSI - Donostia 40
  41. 41. 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
  42. 42. 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
  43. 43. Ejercicios FBD Tema 5 – Dpto. LSI - Donostia 43
  44. 44. 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 NO: división cada uno de los proyectos 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 en algún proyecto situado en Houston pero NO: 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
  45. 45. 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
  46. 46. 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. HAVING g) Por cada libro escrito (o coescrito) por ‘Stephen King’, obtener su título y el nº de copias en la sucursal ‘Central’. AUTORES_LIBROS LIBRO IdLibro Título NombreEditorial IdLibro NombreAutor COPIAS_LIBRO EDITORIAL Nombre Dirección Teléfono IdLibro IdSucursal NúmCopias PRÉSTAMOS IdLibro IdSucursal NúmTarjeta ... Figura 7.20: Esquema de BDR ... FechaSale FechaDevol para la BD SUCURSAL_BIBLIOTECA BIBLIOTECA IdSucursal NombreSucursal Dirección LECTOR NúmTarjeta Nombre Dirección Teléfono FBD Tema 5 – Dpto. LSI - Donostia 46
  47. 47. 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
  48. 48. 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
  49. 49. 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
  50. 50. 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 PRÉSTAMO_CLIENTE NúmCta DNI 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
  51. 51. Ejercicio: consultas SQL BIBLIOTECA-2 (1,1) (0,N) EJEMPLAR ESTA_EN BIBLIOTECA (0,N) Día PRESTAMO FechaPréstamo Mes Año (0,N) SOCIO Puede haber varios ejemplares con el BIBLIOTECA COD_BIB FACULTAD TFNO BIBLIOTECARIA 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 título “Fundamentos de BD” “BD:, ¡Qué gozada!” “Fundamentos de BD” “SQL para novatos” “BD:, ¡Qué gozada!” “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
  52. 52. Ejercicio: definición y actualización SQL de ITINERARIOS Matricula Codigo Cod-bast VEHICULO PAIS Nombre Marca (0,N) (0,N) (1,1) (1,N) Moneda Clase V_I De P_C donde Fecha (1,N) (1,1) (1,1) (1,N) Cod-c Cod_iti A ITINERARIO CIUDAD donde Nombre Dieta (0,N) (1,N) Habit Por donde pasa 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, quot;Sevillaquot;, 500000, 34) y llega a Friburgo (141, quot;Friburgoquot;, 300000, 49), pasando por Zaragoza (93, quot;Zaragozaquot;, 450000, 34), París (16, quot;Parísquot;, 6000000, 33) y Karlstadt (148, quot;Karlstadtquot;, 200000, 49). Los países correspondientes son España (34, quot;Españaquot;, quot;Pesetaquot;), Francia (33, quot;Franciaquot;, quot;Francoquot;) y Alemania (49, quot;Alemaniaquot;, quot;Marcoquot;). 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, quot;Renaultquot;, quot;BI-9999-XXquot;, quot;Expressquot;), que no está aún en la BD. FBD Tema 5 – Dpto. LSI - Donostia 52
  53. 53. 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, FBD Tema 5 – Dpto. LSI - Donostia 53
  54. 54. 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
  55. 55. 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 UPDATE CLIENTE SET Nombre=‘Ataulfo A.’ WHERE i) DNI>888 UPDATE CUENTA SET Banco=2, NSuc=2 WHERE NCta=0 j) k) UPDATE CUENTA SET Banco=2 WHERE Banco=1 UPDATE CUENTA SET Banco=null, NSuc=null WHERE l) Banco=1 m) UPDATE CUENTA SET Banco=null WHERE NCta=3 FBD Tema 5 – Dpto. LSI - Donostia 55
  56. 56. Ejercicio: análisis de restricciones de integridad en BANCOS (2) BANCO CLIENTE Código Nombre Dir DNI Nombre Dir Tfno 1 BBVA Gran Vía, 17 111 Juan Legazpi, 1 111111 2 Santander Espolón, 1 222 Pedro Guridi, 5 222222 2101 Kutxa Garibai, 6 333 Gaizka Lardizabal, 1 333333 2102 BBK Salaberría, 3 444 Luisa Nagusia, 2 444444 555 Ceferina Elkano, 3 555555 SUCURSAL 666 Yolanda Av. Madrid, 9 666666 Banco NSuc Ciudad 1 1 Bilbao 777 Segismundo H. Cortés, 9 777777 1 2 S. Sebastián 888 Ataulfo Cervantes, 1 888888 1 3 Vitoria 999 Teodorico Velázquez, 7 999999 2 1 Santander 000 Atenea Sorolla, 13 101010 2 2 S. Sebastián CUENTA 2101 1 S. Sebastián NCta Interés Saldo Banco NSuc 2101 2 Pasajes PRÉSTAMO- 1 1 20000 1 1 2102 1 Bilbao 2 1 30000 1 2 CLIENTE 2102 2 Sestao 3 1 40000 1 3 NPres DNI 0 111 2102 3 Portugalete 4 2 30000 2 1 0 000 5 2 40000 2 2 CE 1 111 6 3 50000 2101 1 CUENTA- 2 111 CLIENTE 7 3 60000 2101 2 NCta DNI 2 222 8 3 60000 2102 1 ... 0 111 3 111 9 4 70000 2102 2 0 222 6 111 3 333 0 4 80000 2102 3 0 555 6 222 4 111 CE CE PRÉSTAMO 0 000 6 333 4 444 NPres TAE Importe Banco NSuc 1 111 6 666 5 111 1 10 200000 1 1 2 111 7 111 5 555 2 10 300000 1 2 2 222 7 777 6 111 3 10 400000 1 3 3 111 8 111 6 666 4 20 300000 2 1 3 333 8 222 7 111 5 20 400000 2 2 4 111 8 444 7 777 6 30 500000 2101 1 4 222 8 888 8 111 7 30 600000 2101 2 4 444 9 111 8 888 8 30 600000 2102 1 5 111 9 333 9 111 9 40 700000 2102 2 5 555 9 999 9 999 0 40 800000 2102 3 ... CE CE CE CE CE CE FBD Tema 5 – Dpto. LSI - Donostia 56
  57. 57. Junio 00 Nombre Características Especie NombreCientífico Origen Hábitat EsperanzaVida Mariposa NomEspecie DNI Nombre Dirección Tfno EsPrincipal Persona CódColección Código Ubicación PrecioEstimado Colección NombreCientífico Número Procedencia Tamaño CódColección Ejemplar Nombre Código MejorEjemplar EspecieColección NombreCientífico Color ColoresMariposa 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
  58. 58. Septiembre 00 ZonaUrbana NombreZona Categoría BloqueCasas Calle Número Npisos NombreZona M2 CasaParticular NombreZona Número M2 Piso Calle Número Planta Puerta DNI Nombre Edad NombreZona NúmCasa Calle NúmBloque Planta Puerta Persona DNI NombreZona NúmCasa PoseeC DNI Calle NúmBloque Planta Puerta PoseeP 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
  59. 59. Junio 01 Artículo Nom Tipo Precio Tam Art año Art_Ingr NomArt NomIngr Ingrediente Nom Precio Sum Ingr inistrador Prd_Ingr NomArt NomPrd NomIngr Pedido NúmeroFechaHoraPedidoHoraServidoTfno Ped_Art Número NomArt Cantidad icilio Tfno Dirección Ped_Prd NúmeroNomArt NomPrd Cantidad Dom 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
  60. 60. Septiembre 01 Película CódigoTítuloGénero Producida Código Nombre Cine Nom Dirección Tfno Actor Código Nombre Persona Nom Sexo Nacionalidad bre Dirigida Código Nombre Prem Categoría Año Euros Código Proyectada Código Nom Número FechaInicioFechaFin io Sala Nom Núm Aforo ero 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
  61. 61. Junio 02 HOTEL Código_H Nombre Dirección Teléfono Código_E NºHabitaciones ÁRBITROCódigo_E1Código_E2 Fecha Árbitro EQUIPO Código_E País Camiseta Total_Goles CLUBES_AÑO DNI Club JUGADOR DNI Nombre FechaN Goles Código_E PARTIDO Código_E1 Código_E2 Fecha Resultado 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
  62. 62. Septiembre 02 P E L C ueblo N bre U B O ód_P om Provincia C N R C entro N bre D E T O ód_C om irección P R D C ueblo Calle AT BS Matrícula N sientos C pañía C entro _A om A A A ód_P UOÚ ód_C AU N DI L MO N N bre C entro om P R _E M A A N atrícula C ueblo C ód_P alle ód_C C ueblo ód_P Fecha_Inscripción C RO D I N Id_Curso V JA N D I IA _E US N Matrícula 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
  63. 63. Junio 03 C PIST R N D O E ÍA IF irección Precio A N T R IdAsignatura C C urso arrera NIF SIG A U A AU N DI C L M O N lave Dirección A N E IdAsignatura Tem N eroH a úm ojas PU T S DI N IdAsignatura FIC A D I IdA HN signatura Tem FechaPetición N eroC a úm opias FechaRecogida CR U SA 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
  64. 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 Dominio PERSONA DNI Nombre Dirección 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
  65. 65. 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 Dominio PERSONA DNI Nombre Dirección 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
  66. 66. Junio 04 E U O N bre D om irector CL AD orsal N bre FechaN EnC om cto arrera Equipo Q IP IC IST M IL O C Prem M A L T olor io etálico R IC A IÓ orsal Etapa Tiempo PA T IP C N D Suponiendoque haya undom inio que incluya E A A N ero K Salida L úm m legada Ganador LEA A L T C olor Etapa Dorsal TP L V _M IL O horas-min-seg. P E T N Etapa N O úm rdenA C ltitud ategoría Prim U R O úm ero 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
  67. 67. 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 EQUIPO CódigoDeporte País Entrenador DEPORTE Código Nombre Historia Equipamiento RECORD CódigoDeporte NúmeroIdDeportista Fecha Hora Ciudad PARTICIPA CódigoDeporte NúmeroIdDeportista TIPO RECORD CódigoDeporte NúmeroIdDeportista Fecha Hora Tipo DESTACA CódigoDeporte NúmeroIdDeportista NúmeroIdVolunt Idioma IDIOMA CódigoDeporte Ciudad Nombre TIENE 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
  68. 68. Junio 05 V J D o ech alid D P D C d S a D I H T LId Htel Nmre L calid C acid IAE estin VF aS a ías recio ía iu ad alid N O E Id o o b o ad ap ad L_ HTL OE _ V J D o ech alid Id Htel C IE T D I Nmre D n NT o G ÍAD I Nmre NT o IAE estin VF aS a _ o L N E N o b irecció _ fn U D o b _ fn ÍA N E C RIÓ _ XUS N O C N L D o ech alid Nm D o x rsió HraS a L g alid P P IO A estin VF aS a ú ero estin E cu n o alid u arS a recio ID M D I Id m IO AD io a AN H T LV J O E _ IAE E C RO C XU_ P _ L N E D o ech alid Nm D I C IE T estin VF aS a ú ero N _ L N E D o ech alid Id o D I Nm Nch C IE T estin VF aS a Htel N ú ero o es 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
  69. 69. Septiembre 05 N serep o ite R SE ecieC talR ech ctoM eroC talP reC talM reD IG jaNm ran E sp ro azaF aN atad ro ad ro ad N ran o G ja ecieenlas esp claves G N D R D INmreE ail ex jerasd tran e G A J D INmreD nT oAm istrad r R NA N o b ireccio fn d in o A A E O N o b -m p reym re ad ad p rserla o E F R E A Nmre N E MD D o b T A A IE T NmreDració R T M N ON b u n o maism A L A E ferm adT ien sp ro _ icio E F RT A A E ferm adT ien P IC R n ed ratam toE ecieC talF In N E _ R T M n ed ratam to S T M E ferm adS to a ÍN O A n ed in m MD A E T T ien ed en E IC MN O ratam toM icam to 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
  70. 70. ER-Relacional Junio y Septiembre 00 Calle NombreZona Categoría Dir NPisos Número 1 N BLOQUE_CASAS ZONA_URBANA 1 1 Planta P_P N N Número N N Puerta PISO POSEEP CASA_PARTICULAR POSEEC 2 M 1 1 M2 M M N N PERSONA VIVEC VIVEP DNI Nombre Edad Nombre Dirección DNI Tfno Nombre Características PERSONA ESPECIE 1 M N NombreCientífico MejorEjemplar N Origen EsPrincipal MARIPOSA Hábitat 1 EsperanzaVida N Colores 1 N N 1 EJEMPLAR COLECCIÓN Número Código Tamaño PrecioEstimado Procedencia Ubicación FBD Tema 5 – Dpto. LSI - Donostia 70
  71. 71. ER-Relacional Junio y Septiembre 01 Precio NomIngr Suministrador (0,N) (0,N) INGREDIENTE LLEVA LLEVA NomArt (1,N) (1,N) Tipo NomPrd (0,N) (1,1) PRODUCTO Precio BASE DE ARTÍCULO ESPECIAL Tamaño (0,N) (0,N) Cantidad Cantidad (0,N) (0,N) PEDIDO INCLUIDO INCLUIDO Hora Número pedido Fecha Hora servido (0,1) Dirección (0,N) Tfno DOMICILIO LLEVAR_A Categoría Año Euros Cód (0,1) (0,N) PREMIO CONCEDIDO CONCEDIDO (0,N) (0,N) (1,N) (0,N) PRODUCIDA Código PELÍCULA (1,N) ACTOR (0,N) Título PERSONA Género (1,N) (1,N) DIRIGIDA (0,N) Fecha Sexo Inicio Nombre Nacionalidad PROYECTADA FechaFin (1,N) (1,1) (1,N) SALA Número CINE DE Aforo Nom Tfno Dirección FBD Tema 5 – Dpto. LSI - Donostia 71
  72. 72. ER-Relacional Junio y Septiembre 02 Cód Direcc Tfno. Cód País Fecha Resultado (1,N) Equip1 (1,N) (1,1) (1,1) (1,N) RESIDE JUEGA HOTEL EQUIPO PARTIDO Equip2 NºHabit Camiseta Total_Goles Árbitros Nombre (1,N) COMPUESTO POR Fecha Lugar (1,1) DNI (1,1) (0,N) CONTROL PASADO JUGADOR Nombre A ANTIDOPAJE FechaN Clubes_Año Goles Nombre Cód_Pueblo Nombre Provincia DNI Cursos (1,1) (0,N) VIVE_EN ALUMNO PUEBLO (1,1) (1,N) (1,N) Fecha_Inscripción ESTUDIA_EN VIAJA_EN POSEE (0,N) (0,N) (1,1) (1,N) (1,1) (1,N) (1,N) CONTRATA_A PARA_EN CENTRO AUTOBÚS PARADA Compañía Cód_Centro Dirección Matrícula Calle N_Asientos Nombre FBD Tema 5 – Dpto. LSI - Donostia 72

×