+ All Categories
Home > Education > MANUAL COMPLETO DE SQL

MANUAL COMPLETO DE SQL

Date post: 18-Nov-2014
Category:
Upload: edgar-sandoval
View: 14,606 times
Download: 2 times
Share this document with a friend
Description:
ING. EDGAR SANDOVAL
75
1 FBD Tema 5 – Dpto. LSI - Donostia Tema 5. SQL El estándar de las Bases de Datos Relacionales Elmasri/Navathe 07 • Definición de datos y restricciones (CREATE TABLE), y cambios en el esquema (DROP y ALTER) • Consultas (SELECT...FROM...WHERE) restringidas * • Actualización (INSERT, DELETE, UPDATE) restringidas * En este curso NO se cubren todos los aspectos de SELECT. No se estudian, por ejemplo, SELECT anidados o la cláusula HAVING (consultar el temario de la asignatura). En el examen NO se admiten soluciones que incluyan aspectos de SQL no cubiertos en la asignatura.
Transcript
Page 1: MANUAL COMPLETO DE SQL

1FBD Tema 5 – Dpto. LSI - Donostia

Tema 5. SQL

El estándar de las Bases de Datos Relacionales Elmasri/Navathe 07

• Definición de datos y restricciones (CREATE TABLE),

y cambios en el esquema (DROP y ALTER)

• Consultas (SELECT...FROM...WHERE) → restringidas *

• Actualización (INSERT, DELETE, UPDATE)

restringidas *En este curso NO se cubren todos los aspectos de SELECT.No se estudian, por ejemplo, SELECT anidados o la cláusula HAVING(consultar el temario de la asignatura).

En el examen NO se admiten soluciones que incluyan aspectos de SQL no cubiertos en la asignatura.

Page 2: MANUAL COMPLETO DE SQL

2FBD Tema 5 – Dpto. LSI - Donostia

SQL (Structured Query Language)

• Álgebra relacional → orden de las operaciones• SQL: lenguaje declarativo →

– Se indica cuál es el resultado esperado – Permite que el SGBD seleccione las operaciones y

el orden más adecuados para obtener el resultado: optimización

• SGBD comerciales → son variantes de SQL• Estándares SQL: SQL1 1986, SQL2 1992, SQL3

(extiende SQL2 con conceptos de BD y OO)

• SQL: – Lenguaje de Definición de Datos (LDD)– Lenguaje de Manipulación de Datos (LMD):

consulta y actualización– Definición de vistas– Especificación de seguridad y autorización– Definición de restricciones de integridad– Especificación de control de transacciones– Reglas para inclusión en lenguajes (C, PASCAL,...)

• Nos centraremos en SQL2

Mod. RelacionalSQLRelaciónTabla

TuplaFilaAtributoColumna

Page 3: MANUAL COMPLETO DE SQL

3FBD Tema 5 – Dpto. LSI - Donostia

Esquema y catálogo en SQL2

• Esquema de BD: el término se incorporó en SQL2

• Catálogo del SGBD: colección de esquemas en un entorno SQL

Esquema 1

TablasRestricciones

VistasDominios

Autorizaciones

Esquema 2

...

Catálogo del SGBD

CREATE SCHEMA Nombre [AUTHORIZATION Usuario];

Cuenta propietaria del esquema

Elementosde un

esquema

– RI: sólo entre relaciones del mismo catálogo del SGBD

– Esquemas del catálogo del SGBD: pueden compartir elementos (por ejemplo dominios)

INFORMATION_SCHEMA

Esquema especial que da a los usuarios autorizados información de todos los

esquemas del catálogo del SGBD

Page 4: MANUAL COMPLETO DE SQL

4FBD Tema 5 – Dpto. LSI - Donostia

Instrucción CREATE TABLE

CREATE TABLE DEPARTAMENTO( NOMBRED VARCHAR(15) NOT NULL,NUMEROD INT NOT NULL,NSS_JEFE CHAR(9) NOT NULL,FECHA_INIC_JEFE DATE,PRIMARY KEY(NUMEROD),UNIQUE(NOMBRED),FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)

);

CREATE TABLE DEPARTAMENTO( NOMBRED VARCHAR(15) NOT NULL,NUMEROD INT NOT NULL DEFAULT ‘888665555’,NSS_JEFE CHAR(9) NOT NULL,FECHA_INIC_JEFE DATE,CONSTRAINT CLP_DPTO PRIMARY KEY(NUMEROD),

CONSTRAINT CLS_DPTO UNIQUE(NOMBRED),

CONSTRAINT CLE_JEFES_DPTO FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)

ON DELETE SET DEFAULTON UPDATE CASCADE

);

Clave candidataClave candidata

Clave primariaClave primariaIntegridad de entidadesIntegridad de entidades

Clave extranjera (o externa)Clave extranjera (o externa)

No pueden tomarvalor nulo

No pueden tomarvalor nulo

Atri

buto

sA

tribu

tos

Res

tricc

ione

sR

estri

ccio

nes

Valor pordefecto

Valor pordefecto

Constraint:se pone

nombre a la RI, para poder

cambiarla o eliminarla con

ALTER y DROP

Constraint:se pone

nombre a la RI, para poder

cambiarla o eliminarla con

ALTER y DROP

Res

tricc

ione

s(c

on n

ombr

e)R

estri

ccio

nes

(con

nom

bre)

Acciones: a realizar en caso de borrado (ON DELETE) o modificación (ON UPDATE) del valor referenciado

Acciones: a realizar en caso de borrado (ON DELETE) o modificación (ON UPDATE) del valor referenciado

Opciones:• CASCADE• SET DEFAULT• SET NULL• RESTRICT (no poner ON UPDATE – ON DELETE)

Opciones:• CASCADE• SET DEFAULT• SET NULL• RESTRICT (no poner ON UPDATE – ON DELETE)

Atri

buto

sA

tribu

tos

Fig 8.1(a)

Fig 8.1(b)

Page 5: MANUAL COMPLETO DE SQL

5FBD Tema 5 – Dpto. LSI - Donostia

Tipos de datos en SQL2Enteros de diversos tamaños:

– INTEGER / INT– SMALLINT

Reales:– FLOAT– REAL– DOUBLE PRECISION

Números con formato:– NUMERIC(i,j)– DECIMAL(i,j) / DEC(i,j)– i dígitos enteros y j dígitos

decimales– Por defecto: i según la

implementación, j=0Cadena de caracteres de longitud

fija:– CHAR(n)– CHARACTER(n)

Cadena de caracteres de longitud variable:

– CHARACTERVARYING(n)

– VARCHAR(n)– CHAR VARYING(n)– n=máximo definido. Por

defecto n=1Cadena de bits de longitud fija:

– BIT(n)– n = número de bits– Por defecto n=1

Cadena de bits de longitud variable:

– BIT VARYING(n)– n=máximo definido. Por

defecto n=1

Fecha:– DATE– Sólo admite fechas válidas– Generalmente YYYY-MM-

DD– Componentes: YEAR,

MONTH, DAYHora:

– TIME(i)– Sólo admite horas válidas– Normalmente HH-MM-SS– Componentes: HOUR,

MINUTE, SECOND– i = posiciones de fracciones

de sg.Hora con desplazamiento de huso

horario:– TIME WITH TIME ZONE– +13:00 a -12:59– Sin ‘WITH TIME ZONE’:

huso local de la sesiónMarca de tiempo:

– TIMESTAMP [WITH TIME ZONE]

– Componentes: DATE, TIME y mínimo 6 posiciones de fracciones de sg.

Intervalo de tiempo:– INTERVAL– valor relativo (de tiempo)

para incrementar o decrementar a un valor de fecha, hora o marca de tiempo

– Se pueden calificar con YEAR/MONTH o DAY/TIME (unidad mayor/unidad menor)

Page 6: MANUAL COMPLETO DE SQL

6FBD Tema 5 – Dpto. LSI - Donostia

Dominios en SQL2

• Un dominio es un tipo de datos definido por el usuario

CREATE DOMAIN TIPO_NSS AS CHAR(9);

• En CREATE TABLE se pueden usar para definir atributos:

CREATE TABLE EMPLEADO( NSS TIPO_NSS NOT NULL, ...

• DEFAULT:– CREATE DOMAIN TIPO_NSS AS CHAR(9)

DEFAULT ‘987654321’;

– Valor por defecto de los atributos declarados con ese dominio

– si no se especifica ‘DEFAULT’ el valor por defecto es NULL

Page 7: MANUAL COMPLETO DE SQL

7FBD Tema 5 – Dpto. LSI - Donostia

CREATE TABLE:especificación de restricciones y valores por omisión

• Definición de atributos:

– NOT NULL: no se permite que el atributo tome valor nulo

– DEFAULT un-valor: se indica qué valor tomará el atributo si no se le asigna nada. Si no se indica DEFAULT, el valor por defecto es el valor nulo

• Especificación de restricciones (tras las definiciones de atributo):

– PRIMARY KEY: clave primaria

– UNIQUE: clave candidata

– FOREIGN KEY: clave extranjera• Se puede calificar con:

– ON DELETE: en caso de borrarse la tupla a la que se hace referencia con un valor de la clave extranjera

– ON UPDATE: en caso de modificarse el valor de clave primaria al que se hace referencia con el valor de clave extranjera

CREATE TABLE DEPARTAMENTO( NOMBRED VARCHAR(15) NOT NULL,NUMEROD INT NOT NULL DEFAULT 1,NSS_JEFE CHAR(9) NOT NULL,FECHA_INIC_JEFE DATE,PRIMARY KEY(NUMEROD),UNIQUE(NOMBRED),FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)

ON UPDATE CASCADE ON DELETE SET NULL);

Page 8: MANUAL COMPLETO DE SQL

8FBD Tema 5 – Dpto. LSI - Donostia

CREATE TABLE:especificación de restricciones y valores por omisión (2)

FOREIGN KEY (clave extranjera):• Acciones posibles (en ON DELETE / ON UPDATE):

– SET NULL: el valor de clave extranjera en cuestión se sustituye por el valor nulo

– SET DEFAULT: el valor de clave extranjera en cuestión se sustituye por el valor por defecto del atributo clave extranjera

– CASCADE: en caso de ON DELETE se borran las tuplas que hacen referencia a la tupla que desaparece.En caso de ON UPDATE se aplica la misma modificación en las claves extranjeras que la realizada sobre la clave primaria a laque hacen referencia.CASCADE es adecuada para:

• vínculos (TRABAJA_EN)• atributos multivaluados (LOCALIZACIONES_DEPT)• tipos de entidad débiles (DEPENDIENTE)

– RESTRICT (cuando NO se pone ON DELETE / ON UPDATE): impide el borrado (si falta ON DELETE) o la modificación (si falta ON UPDATE) de cualquier tupla referenciada desde un valor de la clave extranjera en cuestión.

CREATE TABLE DEPARTAMENTO( NOMBRED VARCHAR(15) NOT NULL,NUMEROD INT NOT NULL DEFAULT 1,NSS_JEFE CHAR(9) NOT NULL,FECHA_INIC_JEFE DATE,PRIMARY KEY(NUMEROD),UNIQUE(NOMBRED),FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)

ON UPDATE CASCADE ON DELETE SET NULL);

Page 9: MANUAL COMPLETO DE SQL

9FBD Tema 5 – Dpto. LSI - Donostia

Borrar esquemas (DROP SCHEMA)y borrar tablas (DROP TABLE)

• Borrar un esquema completo:

DROP SCHEMA EMPRESA CASCADE

– RESTRICT:borra el esquema sólo si NO contiene

ningún elemento

– CASCADE: borra el esquema y todos sus

contenidos

• Borrar una tabla de un esquema:

DROP TABLE DEPENDIENTE CASCADE

– RESTRICT: borra la tabla sólo si NO existen

referencias a la misma:

– Desde claves externa de otra tabla

– Desde alguna vista

– CASCADE: borra tabla y todas las restricciones

(constraints) y vistas donde haya referencias a ésta

Page 10: MANUAL COMPLETO DE SQL

10FBD Tema 5 – Dpto. LSI - Donostia

Evolución del esquema: columnas(ALTER TABLE)

• Añadir columnas:ALTER TABLE EMPRESA.EMPLEADO ADD PUESTO

VARCHAR(12);

– En las tuplas existentes se asignan valores NULL.Alternativas: definir DEFAULT o introducir valores con la orden UPDATE (se estudiará más adelante)

– NOT NULL no está permitido

• Borrar columnas:ALTER TABLE EMPRESA.EMPLEADO DROP

DIRECCIÓN CASCADE;

– CASCADE borra también las restricciones (constraints) y vistas que hagan referencia a la columna (DIRECCIÓN)

– RESTRICT sólo borra la columna (DIRECCIÓN) si no hay restricciones ni vistas que le hagan referencia

• Modificar la definición de columnas:ALTER TABLE EMPRESA.DEPARTAMENTO ALTER

NSS_JEFE DROP DEFAULT;ALTER TABLE EMPRESA.DEPARTAMENTO ALTER

NSS_JEFE SET DEFAULT ‘333445555’;

– Elimina la definición DEFAULT ‘888665555’– Inserta una nueva definición de DEFAULT para el

atributo NSS_JEFE

Page 11: MANUAL COMPLETO DE SQL

11FBD Tema 5 – Dpto. LSI - Donostia

Evolución del esquema: restricciones (constraints)(ALTER TABLE)

• Borrar restricciones:ALTER TABLE EMPRESA.EMPLEADO DROP

CONSTRAINT CLE_SUPERV_EMP;

– Es preciso haberle dado un nombre con CONSTRAINT en la definición (por ejemplo en CREATE TABLE)

• Añadir restricciones:ALTER TABLE EMPRESA.EMPLEADO ADD

CONSTRAINT CLE_SUPERV_EMP

FOREIGN KEY (NSS_SUPERV) REFERENCESEMPLEADO(NSS)

ON DELETE SET NULL

ON UPDATE CASCADE;

Page 12: MANUAL COMPLETO DE SQL

12FBD Tema 5 – Dpto. LSI - Donostia

OPERACIONES DE ACTUALIZACIÓNINSERT

A1: INSERT INTO EMPLEADOVALUES (‘Richard’, ‘K’, ‘Marini’, ‘653298653’, ‘1962-12-30’, ’98 Oak Forest, Katy, TX’, ‘H’, 37000, ‘987654321’, 4)

– Mismo orden en el que se especificaron los atributos en CREATE TABLE

A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, NSS)VALUES (‘Richard’, ‘Marini’, ‘653298653’)

– Así los atributos con valor NULL o DEFAULT se pueden omitir

– Los valores de VALUES en el mismo orden que se especifican los atributos en INSERT INTO

– También se pueden incluir varias tuplas en la misma instrucción: INSERT ... INTO ... VALUES (tupla1), (tupla2), ... (tuplaN)

A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND)VALUES (‘Robert’, ‘Hatcher’, ‘980760540’, 2)

– Rechazada por la inexistencia del departamento número 2

A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND)VALUES (‘Robert’, ‘Hatcher’, 5)

– Rechazada por no proporcionar valor para NSS (clave primaria: NOT NULL)

Page 13: MANUAL COMPLETO DE SQL

13FBD Tema 5 – Dpto. LSI - Donostia

OPERACIONES DE ACTUALIZACIÓNINSERT (2)

A3A: CREATE TABLE INFO_DEPTOS (NOMBRE_DEPTO VARCHAR(15), NÚM_DE_EMPS INTEGER, SAL_TOTAL INTEGER);

A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO, NÚM_DE_EMPS, SAL_TOTAL)SELECT NOMBRED, COUNT (*), SUM(SALARIO)FROM DEPARTAMENTO INNER JOIN EMPLEADO

ON NÚMEROD=NDGROUP BY NOMBRED;

– Inserta varias tuplas (el resultado de la consulta)– Utilidad: tabla temporal donde realizar consultas

• Sus datos pueden perder actualidad• Alternativa sin este problema: vista

Page 14: MANUAL COMPLETO DE SQL

14FBD Tema 5 – Dpto. LSI - Donostia

OPERACIONES DE ACTUALIZACIÓN DELETE

A4A: DELETE FROM EMPLEADOWHERE APELLIDO=‘Brown’

– Una sola tabla– WHERE: selección de tuplas a eliminar– El borrado se puede propagar (RI referencial)

A4B: DELETE FROM EMPLEADOWHERE NSS=‘123456789’

A4C: DELETE FROM EMPLEADOWHERE ND IN

(SELECT NÚMERODFROM DEPARTAMENTOWHERE NOMBRED=‘Investigación’)

A4D: DELETE FROM EMPLEADO

– Sin WHERE se borran todas las tuplas (quedaría la tabla vacía)

– Usando DROP TABLE se hubiera eliminado además la definición de la tabla

Page 15: MANUAL COMPLETO DE SQL

15FBD Tema 5 – Dpto. LSI - Donostia

OPERACIONES DE ACTUALIZACIÓN UPDATE

A5: UPDATE PROYECTOSET LOCALIZACIÓNP=‘Bellaire’, NÚMD=5WHERE NÚMEROP=10

– Una sola tabla– WHERE: selección de tuplas a modificar– SET: atributos a modificar y nuevos valores– SET: el nuevo valor puede ser NULL o DEFAULT

– Modificaciones de clave primaria pueden propagarse a clave/s extranjera/s (debido a las acciones declaradas en la RI, como CASCADE)

A6: UPDATE EMPLEADOSET SALARIO=SALARIO*1.1WHERE ND IN (SELECT NÚMEROD

FROM DEPARTAMENTOWHERE NOMBRED= ‘Investigación’)

– A la izda se refiere al nuevo valor de SALARIO

– A la dcha al valor antiguo

Page 16: MANUAL COMPLETO DE SQL

16FBD Tema 5 – Dpto. LSI - Donostia

Consultas básicas

• Fecha de nacimiento y dirección de John Smith

C0: SELECT FECHA_NCTO, DIRECCIÓNFROM EMPLEADOWHERE NOMBRE=‘John’ AND

APELLIDO=‘Smith’

– Secuencia σ- π– Condiciones en WHERE:

{=, <>, <, >, <=, >=}, AND, OR, NOT

El resultado de una consulta SQL

puede contener ...

El temario de FBD NO cubretodos los aspectos de SELECT. En particular NO estudiaremos

SELECT anidados

El temario de FBD NO cubretodos los aspectos de SELECT. En particular NO estudiaremos

SELECT anidados

SELECT columnasFROM tablas[WHERE condición]

tuplas repetidas

πFECHA_NCTO, DIRECCIÓN (1)

(1) = σNOMBRE=‘John’ Y

APELLIDO=‘Smith’(EMPLEADO)

NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN

SEXO SALARIO NSS_SUPERV ND

EMPLEADO...

...

Page 17: MANUAL COMPLETO DE SQL

17FBD Tema 5 – Dpto. LSI - Donostia

Consultas básicas (2)

• Nombre y dirección de los empleados del departamento de Investigación

C1: SELECT NOMBRE, APELLIDO, DIRECCIÓNFROM EMPLEADO, DEPARTAMENTOWHERE NOMBRED=‘Investigación’ AND NÚMEROD=ND

– Secuencia: |×| - σ - π

– WHERE:condiciones de σ y |×|

πNOMBRE, APELLIDO, DIRECCIÓN (2)

(1) = DEPARTAMENTO |×|NÚME-ROD=ND EMPLEADO

(2) = σNOMBRED=‘Investigación’ (1)

NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN

SEXO SALARIO NSS_SUPERV ND

EMPLEADO...

...

NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE

DEPARTAMENTO

Page 18: MANUAL COMPLETO DE SQL

18FBD Tema 5 – Dpto. LSI - Donostia

Consultas básicas (3)

• Nº de proyecto, nº de departamento que lo controla, apellido, dirección y fecha de nacimiento del jefe del departamento, de todos los proyectos realizados en ‘Stafford’

C2: SELECT NÚMEROP, NÚMD , APELLIDO, DIRECCIÓN,

FECHA_NCTO

FROM PROYECTO, DEPARTAMENTO, EMPLEADO

WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND

LOCALIZACIÓNP=‘Stafford’

NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE

DEPARTAMENTO

PROYECTO

NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD

NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN

EMPLEADO...

PR_STF ←σLOCALIZACIÓNP=‘Stafford’(PROYECTO)

DP_CN←PR_STF |×|NÚMD=NÚME-

ROD DEPARTAMENTOJEFE_DP_PR←

DP_CN |×| NSS_JEFE= NSS EMPLEADO

πNÚMEROP, NÚMD, APELLIDO, DIRECCIÓN, FECHA_NCTO (JEFE_DP_PR)

1

23

4

Page 19: MANUAL COMPLETO DE SQL

19FBD Tema 5 – Dpto. LSI - Donostia

Calificar atributos

• Nombre, apellido y dirección de los empleados del departamento de investigación

C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIÓN

FROM EMPLEADO, DEPARTAMENTO

WHERE DEPARTAMENTO.NOMBRE = ‘Investigación’ AND DEPARTAMENTO.NÚMEROD=EMPLEADO.NÚMEROD

– Con EMPLEADO.NOMBRE se distingue el atributo NOMBRE de la tabla EMPLEADO del atributo NOMBRE de la tabla DEPARTAMENTO

NOMBRE NÚMEROD NSS_JEFE FECHA_INIC_JEFE

DEPARTAMENTO

NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN

SEXO SALARIO NSS_SUPERV NÚMEROD

EMPLEADO...

...

Page 20: MANUAL COMPLETO DE SQL

20FBD Tema 5 – Dpto. LSI - Donostia

Alias

• Nombre y apellido de cada empleado junto al nombre y apellido de su supervisor

C8: SELECT E.NOMBRE, E.APELLIDO, S.NOMBRE, S.APELLIDO FROM EMPLEADO E, EMPLEADO SWHERE E.NSS_SUPERV=S.NSS

– Admite varias referencias a una misma tabla (útil para consultas recursivas de un nivel)

– E y S representan dos copias diferentes de la tabla EMPLEADO, pero no hay más que una copia de EMPLEADOen la BD

• Para cambiar los nombres de atributo:FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR,

SEX, SAL, NSSS, ND), ...

• Se pueden usar alias aunque no haya varias referencias a una misma tabla→ para manejar nombres más cortos

• Por ejemplo, C1A se puede escribir:

C1B:SELECT E.NOMBRE, E.APELLIDO, E.DIRECCIÓNFROM EMPLEADO E, DEPARTAMENTO DWHERE D.NOMBRE = ‘Investigación’ AND

D.NÚMEROD=E.NÚMEROD

NOMBRE INIC APELLIDO NSS FECHA_NCTO NSS_SUPERV ND

EMPLEADO S...

NOMBRE INIC APELLIDO NSS FECHA_NCTO NSS_SUPERV ND

EMPLEADO E...

Uso de alias

Declaración de alias

Uso de alias

Page 21: MANUAL COMPLETO DE SQL

21FBD Tema 5 – Dpto. LSI - Donostia

Omisión de WHERE

• Indica selección de tuplas incondicional• Equivale a WHERE TRUE• Producto cartesiano:

sin WHERE y más de una relación en FROM

• NSS de todos los empleados:

C9: SELECT NSSFROM EMPLEADO

• Combinaciones posibles de NSS de empleados con nombres de departamento:

C10: SELECT NSS, NOMBREDFROM EMPLEADO , DEPARTAMENTO

• Es importante especificar todas las condiciones de σ y |×| en WHERE ya que el resultado puede ser una tabla incorrecta y de gran tamaño

Page 22: MANUAL COMPLETO DE SQL

22FBD Tema 5 – Dpto. LSI - Donostia

SELECT *

• Selecciona todos los atributos de las tablas de FROM

C1C:SELECT *FROM EMPLEADO

WHERE ND=5

C1D:SELECT *FROM EMPLEADO, DEPARTAMENTOWHERE NOMBRED=‘Investigación’ AND

ND=NÚMEROD

C10A:SELECT *FROM EMPLEADO, DEPARTAMENTO

• También se puede usar en SELECT la calificación de atributos con *. Ejemplo: EMPLEADO.*

Page 23: MANUAL COMPLETO DE SQL

23FBD Tema 5 – Dpto. LSI - Donostia

DISTINCT y ALL

C11:SELECT ALL SALARIOFROM EMPLEADO

• SQL NO elimina automáticamente tuplas repetidas porque:– Es una operación costosa: ordenar+eliminar

duplicados– El usuario puede desear ver las tuplas repetidas– Usando funciones agregadas suele interesar no

eliminarlos. Ejemplo: al calcular el salario medio, NO interesa considerar únicamente los valores de salario diferentes entre sí

C11:SELECT DISTINCT SALARIOFROM EMPLEADO

• Si sólo nos interesan los salarios distintos

SELECT DISTINCT SALARIO, APELLIDOFROM EMPLEADO

• En el resultado:– Puede haber dos filas con el mismo salario.– No puede haber dos filas con igual salario y

apellido

Poner SELECT ALL es lo mismo que poner sólo SELECT

(sin DISTINCT)

Page 24: MANUAL COMPLETO DE SQL

24FBD Tema 5 – Dpto. LSI - Donostia

UNION y UNION ALLINTERSECT e INTERSECT ALL

EXCEPT y EXCEPT ALL

• En SQL existen las operaciones UNION (∪), INTERSECT (∩) y EXCEPT (resta).

• Por defecto las tuplas repetidas se eliminan del resultado

• Usando UNION ALL se conservan las repeticiones• Se exige compatibilidad de unión (ver en tema anterior)

• Números de proyecto donde participa Smith como trabajador o como jefe del departamento controlador:

C4: SELECT NUMEROPFROM PROYECTO, DEPARTAMENTO, EMPLEADOWHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND

APELLIDO=‘Smith’UNIONSELECT NPFROM TRABAJA_EN, EMPLEADOWHERE NSSE=NSS AND APELLIDO=‘Smith’

Page 25: MANUAL COMPLETO DE SQL

25FBD Tema 5 – Dpto. LSI - Donostia

Comparar subcadenas(LIKE en WHERE)

• Empleados que viven en Houston, Texas:

C12: SELECT NOMBRE, APELLIDOFROM EMPLEADOWHERE DIRECCIÓN LIKE ‘%Houston, TX%’

– Compara parte de una cadena de caracteres (DIRECCIÓN)

– % sustituye a un nº arbitrario de caracteres– _ sustituye a un solo carácter

• Empleados que nacieron en la década de 1950:

C12A: SELECT NOMBRE, APELLIDOFROM EMPLEADOWHERE FECHA_NCTO LIKE ’195_ _ _ _ _ _ _’

Page 26: MANUAL COMPLETO DE SQL

26FBD Tema 5 – Dpto. LSI - Donostia

Operaciones aritméticas: ‘+’, ‘-’, ‘*’, ‘/’y operación de concatenación: ‘||’

• Nombre y salario de los empleados que trabajan en ‘ProductoX’ tras aumentarles el sueldo un 10% :

C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIOFROM EMPLEADO, TRABAJA_EN, PROYECTO WHERE NSS=NSSE AND NP=NÚMEROP AND

NOMBREP=‘ProductoX’

– ‘+’, ‘-’,’*’ y ‘/’ son operadores aritméticos– ‘||’ concatena cadenas de caracteres. Ejemplo:

SELECT ‘Nombre=‘ || NOMBRE– ‘+’, ‘-’ también sirven para sumar/restar a una

fecha, hora o marca de tiempo, un intervalo compatible

– Se puede calcular un intervalo como la diferencia entre fechas, horas o marcas de tiempo

¿Qué produce 1.1 * SALARIO cuando SALARIO vale NULL?

Page 27: MANUAL COMPLETO DE SQL

27FBD Tema 5 – Dpto. LSI - Donostia

Ordenación de tuplas(ORDER BY)

• Empleados y proyectos donde trabajan, ordenados por departamento y, dentro de cada departamento, ordenados alfabéticamente por apellido y nombre :

C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREPFROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN,

PROYECTOWHERE NÚMEROD=ND AND NSS=NSSE AND NP=NÚMEROPORDER BY NOMBRED, APELLIDO, NOMBRE

– Por defecto, el orden es ascendente– DESC indica orden descendente– ASC indica orden ascendente

ORDER BY NOMBRED DESC, APELLIDO ASC, NOMBRE ASC

Page 28: MANUAL COMPLETO DE SQL

28FBD Tema 5 – Dpto. LSI - Donostia

Operador BETWEEN yconjuntos explícitos de valores

Operador BETWEEN:• Información de los empleados del departamento 5

cuyo salario está entre 30.000 y 40.000C14: SELECT *

FROM EMPLEADOWHERE (SALARIO BETWEEN 30000 AND 40000)

AND ND=5

– La condición de WHERE es equivalente a:SALARIO >= 30000 AND SALARIO <= 40000 AND ND=5

Conjuntos explícitos de valores:• NSS de los empleados que trabajan en los proyectos

1, 2 o 3C17: SELECT DISTINCT NSSE

FROM TRABAJA_ENWHERE NP IN (1,2,3)

– El conjunto explícito se encierra entre paréntesis

• La consulta anterior utilizando BETWEEN:C14’: SELECT DISTINCT NSSE

FROM TRABAJA_ENWHERE NÚMP BETWEEN 1 AND 3

Page 29: MANUAL COMPLETO DE SQL

29FBD Tema 5 – Dpto. LSI - Donostia

IS NULL e IS NOT NULL

• Nombre y apellido de empleados sin supervisores

C18: SELECT NOMBRE, APELLIDOFROM EMPLEADOWHERE NSS_SUPERV IS NULL

– En lugar de = y ≠ se usa IS e IS NOT– SQL considera el valor nulo de diferente forma– Las tuplas con valores nulos en el atributo de

reunión no se incluyen en el resultado (salvo en reunión externa)

• Si pusiera WHERE NSS_SUPERV = NULL

– Para las filas con NSS_SUPERV nulo se estaría comparando si NULL = NULL

– Esta comparación NO devuelve cierto– Tampoco devuelve falso– La comparación devuelve NULL (UNKNOWN)

• Cualquier cosa operada con NULL devuelve NULL (UNKNOWN)

Una condición puede NO verificarse por FALSE o por NULL

Page 30: MANUAL COMPLETO DE SQL

30FBD Tema 5 – Dpto. LSI - Donostia

Renombrar atributos del resultado con AS

C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO, S.APELLIDO AS NOMBRE_SUPERVISOR

FROM EMPLEADO AS E, EMPLEADO AS SWHERE E.NSS_SUPERV = S.NSS

– Cambia el nombre de cualquier columna (atributo) que aparezca en el resultado

– Antes hemos visto que la construcción AS también sirve para declarar alias de tablas:

FROM EMPLEADO E, ...

FROM EMPLEADO AS E, ...

FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR, SEX, SAL, NSSS, ND), ...

SQL1

SQL2

SQL2

Page 31: MANUAL COMPLETO DE SQL

31FBD Tema 5 – Dpto. LSI - Donostia

Tablas combinadas(INNER y NATURAL JOIN en FROM)

• Nombre y dirección de los empleados del departa-mento de Investigación

C1: SELECT NOMBRE, APELLIDO, DIRECCIÓNFROM EMPLEADO, DEPARTAMENTOWHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD

C1A: SELECT NOMBRE, APELLIDO, DIRECCIÓNFROM (EMPLEADO INNER JOIN DEPARTAMENTO

ON ND=NÚMEROD)WHERE NOMBRED=‘Investigación’

– Este concepto se incorporó a SQL2– La consulta se entiende más fácilmente, al evitar la

mezcla de condiciones de |×| y σ en el WHERE

– Se pueden especificar diferentes tipos de reunión:INNER JOIN (o JOIN) y NATURAL JOIN

– También de reunión externa (que este curso NO usaremos):

OUTER JOIN, LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN y FULL [OUTER] JOIN

– NO se pueden definir alias de tablas combinadas:

FROM (EMPLEADO INNER JOIN DEPARTAMENTO

ON ND=NÚMEROD) AS ED ...

Page 32: MANUAL COMPLETO DE SQL

32FBD Tema 5 – Dpto. LSI - Donostia

Tablas combinadas (2) (INNER y NATURAL JOIN en FROM)

Uso de NATURAL JOIN:

C1B: SELECT NOMBRE, APELLIDO, DIRECCIÓNFROM (EMPLEADO NATURAL JOIN (DEPARTAMEN-

TO AS DEPTO (NOMBRED, ND, NSSG, FECHAIG)))WHERE NOMBRED=‘Investigación’

– Renombra DEPARTAMENTO.NÚMEROD por ND

– condición de reunión implícita:EMPLEADO.ND = DEPARTAMENTO.ND

Anidamiento de INNER y de NATURAL JOIN:

C2: SELECT NÚMERO, NÚMD, APELLIDO, DIRECCIÓN, FECHA_NCTO

FROM PROYECTO, DEPARTAMENTO, EMPLEADOWHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND

LOCALIZACIÓNP=‘Stafford’

C2A:SELECT NÚMEROP, NÚMD, APELLIDO, DIRECCIÓNFECHA_NCTO

FROM (PROYECTO INNER JOIN DEPARTAMENTO ON NÚMD=NÚMEROD)

INNER JOIN EMPLEADO ON NSS_JEFE=NSSWHERE LOCALIZACIÓNP=‘Stafford’

Page 33: MANUAL COMPLETO DE SQL

33FBD Tema 5 – Dpto. LSI - Donostia

Funciones agregadas y de agrupación

• COUNT (cuenta), SUM (suma), MAX (máximo), MIN(mínimo), AVG (media)

– El argumento de una función agregada puede ser una expresión: AVG(1.1*SALARIO)

– MAX y MIN se pueden aplicar a atributos NOnuméricos (con orden total en el dominio)

• Suma de los salarios de todos los empleados, junto a los salarios máximo, mínimo y medio:

C19: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO), AVG(SALARIO)

FROM EMPLEADO

NOMBREP

EMPLEADO

FranklinJohn

AliciaJennifer

RameshJoyce

AhmadJames

SALARIO ND

15.000NULL

10.00020.000

10.00010.000

20.00020.000

55

44

55

41

... ......

NOMBRED NÚMEROD

DEPARTAMENTO

InvestigaciónAdministración

Dirección

541

SUM(SA-LARIO)

MAX(SA-LARIO)

105.000 20.000

MIN(SA-LARIO)

10.000

AVG(SAL-ARIO)

15.000

C19:

Page 34: MANUAL COMPLETO DE SQL

34FBD Tema 5 – Dpto. LSI - Donostia

Funciones agregadas y de agrupación (2)

• Suma de los salarios de los empleados del departamen-to de ‘Investigación’, junto a los salarios máximo, mínimo y medio del mismo:

C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO), AVG(SALARIO)

FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NÚMEROD

WHERE NOMBRED=‘Investigación’

• Cuántos empleados hay en la compañía y cuántos en el departamento ‘Investigación’:

C21: SELECT COUNT(*)FROM EMPLEADO

C22: SELECT COUNT(*)FROM EMPLEADO INNER JOIN DEPARTAMENTO ON

ND=NÚMERODWHERE NOMBRED=‘Investigación’

SUM(SA-LARIO)

MAX(SA-LARIO)

35.000 15.000

MIN(SA-LARIO)

10.000

AVG(SAL-ARIO)

11.666C20:

35.000 / 335.000 / 3

NOMBREP

EMPLEADO

FranklinJohn

AliciaJennifer

RameshJoyce

AhmadJames

SALARIO ND

15.000NULL

10.00020.000

10.00010.000

20.00020.000

55

44

55

41

... ......

NOMBRED NÚMEROD

DEPARTAMENTO

InvestigaciónAdministración

Dirección

541

* se refiere a tuplas* se refiere a tuplas

COUNT(*)

8C21: COUNT(*)

4C22:

Page 35: MANUAL COMPLETO DE SQL

35FBD Tema 5 – Dpto. LSI - Donostia

Funciones agregadas y de agrupación (3)

• Cuántos valores de salario diferentes hay:

C23: SELECT COUNT(DISTINCT SALARIO)FROM EMPLEADO

• Cuántos valores de salario hay (con repeticiones):

C23’: SELECT COUNT(SALARIO)FROM EMPLEADO

• Cuántos empleados hay:

C23’’: SELECT COUNT(*)FROM EMPLEADO

Cuenta las filas con salario NO nulo

COUNT(DISTINCT SALARIO)

3

C23:

COUNT( SALARIO)

7

C23’:

COUNT( *)

8

C23’’:

Cuenta todas lasfilas de la tabla

NO cuentalos valores nulos

¿Qué ocurre cuando todos los salarios valen NULL?¿Qué ocurre cuando la tabla está vacía?

NOMBREP

EMPLEADO

FranklinJohn

AliciaJennifer

RameshJoyce

AhmadJames

SALARIO ND

15.000NULL

10.00020.000

10.00010.000

20.00020.000

NULL5

44

55

41

... ...

Page 36: MANUAL COMPLETO DE SQL

36FBD Tema 5 – Dpto. LSI - Donostia

Atributos de agrupación: GROUP BY

• Obtener cada número de departamento junto a su número de empleados y salario medio:

C24: SELECT ND, COUNT(*), AVG(SALARIO)FROM EMPLEADO

GROUP BY ND– En GROUP BY está el/los atributo/s de agrupación– NO confundir GROUP BY y ORDER BY (que ordena)

– Todos los atributos de SELECT deben estar en GROUP BY

– Los atributos de GROUP BY no es obligatorio que estén en SELECT

– Se suelen poner en SELECT algunos/todos los de GROUP BY

Fig. 8.4 (a)

NOMBREP

EMPLEADO

JuanJon

RosaAna

SALARIO ND

10NULL

1010

NULLNULL

55

... ...

NULL5

ND

22

1010

COUNT(*) AVG(SALARIO)

NOMBREP

EMPLEADO

FranklinJohn

AliciaJennifer

RameshJoyce

AhmadJames

SALARIO ND

15.00030.000

10.00020.000

10.00010.000

20.00020.000

55

44

55

41

... ...

541

ND

431

16.25016.66620.000

COUNT(*) AVG(SALARIO)

C24:

C24:

Los valores nulos forman su

propio grupo

Page 37: MANUAL COMPLETO DE SQL

37FBD Tema 5 – Dpto. LSI - Donostia

Atributos de agrupación: GROUP BY (2)

• Obtener por cada proyecto su número y nombre junto al número de empleados que trabajan en él

C25: SELECT NÚMEROP, NOMBREP, COUNT(*)FROM PROYECTO INNER JOIN TRABAJA_EN

ON NÚMEROP=NPGROUP BY NÚMEROP, NOMBREP

PROYECTOINNER JOINTRABAJA_EN

ON NÚMEROP=NP :

NP HORAS

2

1

3

1

22

310

30

20

1010

3030

2020

7.5

32.5

40.0

20.0

20.010.0

10.010.0

30.0

10.0

10.035.0

5.020.0

15.0nulo

...

NÚMEROP

2

1

3

1

22

310

30

20

1010

3030

2020

NOMBREP

ProductoY

ProductoX

ProductoZ

ProductoX

ProductoYProductoY

ProductoZAutomatización

Nuevos beneficios

Reorganización

AutomatizaciónAutomatización

Nuevos beneficiosNuevos beneficios

ReorganizaciónReorganización

NÚMEROP1

NOMBREPRProductoX

COUNT(*)2

2 ProductoY 33 ProductoZ 210 Automatización 320 Reorganización 330 Nuevos beneficios 3

C25:

En C25, ¿se puede eliminar NOMBREP del GROUP BY?

Agrupación por varios atributos

Page 38: MANUAL COMPLETO DE SQL

38FBD Tema 5 – Dpto. LSI - Donostia

GROUP BY con ORDER BY

• Obtener por cada proyecto su número y nombre junto al número de empleados que trabajan en él, ordenado ascendentemente por el número de empleados

C25’: SELECT NÚMEROP, NOMBREP, COUNT(*)FROM PROYECTO INNER JOIN TRABAJA_EN

ON NÚMEROP=NPGROUP BY NÚMEROP, NOMBREPORDER BY COUNT(*) ASC

• Si se renombran los atributos del resultado con AS, el nuevo nombre NO se puede usar en ORDER BY (en general, no sólo con funciones agregadas):

C25’: SELECT NÚMEROP, NOMBREP, COUNT(*) ASNUM_EMP

FROM PROYECTO INNER JOIN TRABAJA_EN ON NÚMEROP=NP

GROUP BY NÚMEROP, NOMBREPORDER BY NUM_EMP ASC

NO se puede usar el nuevo nombre (AS) del atributo del resultado en

ORDER BY

Page 39: MANUAL COMPLETO DE SQL

39FBD Tema 5 – Dpto. LSI - Donostia

Constructor de valor de tupla

• Una sola comparación incluye todos los valores de dos tuplas:

WHERE (NOMBRE,EDAD,ESTADO_CIVIL) = (“José María”, 18, ‘S’)

WHERE NOMBRE= “José María” AND EDAD=18 ANDESTADO_CIVIL=‘S’

WHERE (C1, C2, C3) < (T1, T2, T3)

WHERE C1<T1 OR(C1=T1 AND C2<T2) OR(C1=T1 AND C2=T2 AND C3<T3)

Page 40: MANUAL COMPLETO DE SQL

40FBD Tema 5 – Dpto. LSI - Donostia

Análisis de consultas SQL

SELECT <atributos y funciones>FROM <tablas>[WHERE <condición>][GROUP BY <atributos agrupación>][ORDER BY <atributos ordenación>]

• Una consulta SQL se evalúa conceptualmente así:

– Primero FROM, seguido de WHERE, en tercer lugar GROUP BY y por último ORDER BY

– Si no hay GROUP BY ni ORDER BY, para cada combinación de tuplas (una de cada tabla de FROM), se evalúa la condición de WHERE. Si es cierta se colocan en el resultado los valores correspondientes a los atributos del SELECT.

– Esta NO es una forma eficiente de implementar una consulta SQL. Así pues, cada SGBD tiene rutinas para optimizar la evaluación.

También hay HAVING, que este curso no estudiaremos

Page 41: MANUAL COMPLETO DE SQL

41FBD Tema 5 – Dpto. LSI - Donostia

Análisis de consultas SQL (2)

• En SQL hay varias alternativas para especificar la misma consulta :

– Ventaja: el programador elige la técnica que le resulte más cómoda.

– Desde el punto de vista de optimización de consultas, conviene que las consultas tengan el menor anidamiento y el menor ordenamiento implícito posible.

– Desventaja: el programador puede desconocer cuál es la técnica más eficiente en cada caso

– Idealmente, el SGBD debería procesar la consulta de la misma manera sin importar cómo se haya escrito.

– En la práctica esto resulta muy difícil, y es conveniente que el usuario sea consciente de quéconstrucciones tienen un costo más elevado que otras.

Page 42: MANUAL COMPLETO DE SQL

42FBD Tema 5 – Dpto. LSI - Donostia

Características adicionales de SQL

• Especificación de vistas (CREATE VIEW)• Especificación de restricciones de integridad

generales (CREATE ASSERTION)• Concesión y revocación de privilegios (GRANT y

REVOKE)• Sentencias SQL en lenguajes de programación:

– Metodología para insertarlas. – Ligaduras con varios lenguajes de programación. – El concepto de cursor para recorrer el resultado de

las consultas.• Instrucciones de control de transacciones.• Cada SGBD contará con un conjunto de instrucciones

para especificar parámetros de diseño físico: – Se denomina LDA, o lenguaje de definición de

almacenamiento– Las primeras versiones de SQL tenían

instrucciones para crear índices, pero se eliminaron porque no aparecían en el nivel del esquema conceptual.

• Operadores CASE, NULLIF, COALESCE, CAST

Page 43: MANUAL COMPLETO DE SQL

43FBD Tema 5 – Dpto. LSI - Donostia

Ejercicios

Page 44: MANUAL COMPLETO DE SQL

44FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: consultas SQL EMPRESA(8.13 (7.18) Elmasri/Navathe 02)

Sobre el esquema de BD de la figura 7.7 (ver pg. siguiente):

a) Empleados del departamento 5 que trabajan más de 10 horas/semana en el proyecto ‘Producto X’

b) Empleados con un dependiente con su mismo nombre de pila

c) Empleados cuyo jefe directo es Franklin Wongd) Nombre de cada proyecto junto al número total de

horas trabajadas por los empleados en él.e) Nombres de todos los empleados que trabajan en

cada uno de los proyectosf) Empleados que no trabajan en ningún proyectog) Nombre de cada departamento junto al salario medio

de los empleados asignados al mismoh) Salario medio de las empleadas de la compañíai) Nombre y dirección de los empleados que trabajan

en algún proyecto situado en Houston pero departamento no está situado allí

j) Jefes de departamento sin dependientes

8.14b) Número de empleados de sexo masculino de cada

departamento

NO: división

NO: anidados

Page 45: MANUAL COMPLETO DE SQL

45FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: consultas SQL EMPRESA (2)(8.13 Elmasri/Navathe 02)

Figura 7.7 restricciones de integridad referencial representadas en el esquema de la base de datos relacional EMPRESA

NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE

DEPARTAMENTO

LOCALIZACIONES_DEPT

NÚMEROD LOCALIZACIÓND

PROYECTO

NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD

TRABAJA_EN

NSSE NP HORAS

DEPENDIENTE

NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO

NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN

SEXO SALARIO NSS_SUPERV ND

EMPLEADO

......

Page 46: MANUAL COMPLETO DE SQL

46FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: consultas SQL BIBLIOTECA(8.11 (7.23) Elmasri/Navathe 02)

a) Número de copias de la tribu perdida en la sucursal de ‘Sharpstown’.

b) Identificador de sucursal y número de copias del libro ‘La tribu Perdida’ en cada una de las sucursales.

c) Lectores sin libros en préstamo.d) Título del libro, nombre y dirección del lector de los

préstamos de la sucursal de ‘Sharpstown’ con fecha de devolución la de hoy.

e) Por cada sucursal: nombre y total de ejemplares de libro en préstamo.

f) Para los lectores con más de 5 libros en préstamo, obtener su nombre, dirección y nº de libros.

g) Por cada libro escrito (o coescrito) por ‘StephenKing’, obtener su título y el nº de copias en la sucursal ‘Central’.

IdLibro Título NombreEditorialLIBRO

Nombre Dirección TeléfonoEDITORIAL

IdLibro IdSucursal NúmCopiasCOPIAS_LIBRO

IdLibro NombreAutorAUTORES_LIBROS

IdSucursal NombreSucursal DirecciónSUCURSAL_BIBLIOTECA

NúmTarjeta Nombre DirecciónLECTOR

Teléfono

Figura 7.20: Esquema de BDR

para la BD BIBLIOTECA

IdLibro IdSucursal NúmTarjetaPRÉSTAMOS

FechaSale FechaDevol...

...

NO: HAVING

Page 47: MANUAL COMPLETO DE SQL

47FBD Tema 5 – Dpto. LSI - Donostia

Ejercicios consultas SQL BIBLIOTECA (2)

h) Tiempo medio que duran los préstamos de libros (en conjunto).

i) Tiempo medio que duraron los préstamos de libros (en conjunto) que se prestaron el año 2002.

j) Número total de préstamos, número de socios de la biblioteca que han tomado libros en préstamo y número medio de libros que han tomado en préstamo los socios.

k) Número medio de copias por libro de la biblioteca “central” (en conjunto)

l) Número de socio junto al número de préstamos que ha tomado hasta el momento, ordenado por número de préstamos

m) Identificador de libro junto al número de veces actualmente en préstamo

n) Identificadores de cada libro y sucursal junto al número de veces que ha sido prestado el libro en la sucursal.

o) Para cada libro: identificador de libro y número de autores.

p) Para cada libro: título y número de autores.q) Para cada día del mes pasado en el que hubiera

préstamos, número de libros distintos que se prestaron ese día.

Page 48: MANUAL COMPLETO DE SQL

48FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: consultas SQL UNIVERSIDAD(8.16 Elmasri/Navathe 02)

a) Nombres de los alumnos de 4º de la carrera ‘CC’b) Nombre de los cursos impartidos por el profesor

‘King’ en los años 1998 y 99c) Para cada sección impartida por el profesor ‘King’,

obtener el número de curso, semestre, año y número de alumnos que se matricularon en esa sección.

d) Nombre y boletín de notas de los alumnos de 5º de la carrera ‘CC’. El boletín incluye el nombre y número del curso, las horas-crédito, el semestre, el año y las notas de los cursos concluidos por el alumno.

e) Nombre y carrera de los estudiantes calificados con nota ‘A’ en todos sus cursos.

f) Nombre y carrera de los estudiantes que NO tengan nota ‘A’ en ningún curso.

Nombre NúmAlumno Grado

NombreCurso

ALUMNO

NúmCurso HorasCréditoCURSO

IdentSección NúmCurso SemestreSECCION

NúmCurso NúmRequisitoREQUISITO

NúmAlumno IdentSección Nota

INFORME_CALIFICACIONES

Carrera

Departamento

Año Profesor

Page 49: MANUAL COMPLETO DE SQL

49FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: consultas SQL BANCOS

Sobre el esquema que aparece en la siguiente página:a) Código de banco y DNI de cliente, para todos aquellos

clientes que tienen cuenta en más de una sucursal del banco, ordenada por código de banco y DNI

b) Nombre de banco, número de sucursal, préstamo medio y número de TAE diferentes en la sucursal, ordenado descendentemente por préstamo medio.

c) DNI y nombre de clientes que tienen solicitado algún préstamo igual o superior a 60.000 €, en sucursales de la calle Urbieta de Donostia

d) Nombre del banco y media de los TAE ofrecidos en sus sucursales a clientes de Donostia, para aquellos bancos cuyo código comienza por ‘011’ y donde los préstamos sean de un importe superior a 60.000 €. El resultado deberá estar ordenado crecientemente por media de TAE.

e) Todos los datos de clientes y código del banco donde tienen solicitado préstamo, para aquellos clientes que tengan algún préstamo en sucursales de Donostia pero que no tengan cuentas en el mismo banco donde tienen el préstamo.

Page 50: MANUAL COMPLETO DE SQL

50FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: consultas SQL BANCOS (2)

Código Nombre

NúmCta

BANCO

Interés SaldoCUENTA

NúmPrés TAE ImportePRÉSTAMO

DNI NombreCLIENTE

NúmCta DNICUENTA_CLIENTE

Banco

Banco NúmSucursal

NúmSucursal

Dir Tfno

Banco NúmSucursal CiudadSUCURSAL

NúmPrés DNIPRÉSTAMO_CLIENTE

BDR correspondiente al esquema ER de la figura 3.17 Salvo que se ha añadido el atributo Ciudad a SUCURSAL y se

ha cambiado el atributo Dir de BANCO a SUCURSAL

Dir

Page 51: MANUAL COMPLETO DE SQL

51FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: consultas SQL BIBLIOTECA-2

Escribe las siguientes consultas SQL sobre la BD anterior:

a) Pares de títulos distintos del área de informática sacados en préstamo por el mismo socio. Posible salida:

b) Lista de pares ordenados de bibliotecas que tengan ejemplares de libros de la misma área. Por ejemplo, si las bibliotecas A, B y C tienen libros de informática y las bibliotecas A y C de filosofía, deberán aparecer: <A,B,Informática>, <A,C,Informática>, <A,C,Filosofía>, <B,A,Informática>, <B,C,Informática>, ...

EJEMPLAR

SOCIO

BIBLIOTECAESTA_EN

PRESTAMO FechaPréstamoDíaMesAño

(0,N)(1,1)

(0,N)

(0,N)

COD_BIB FACULTAD TFNO BIBLIOTECARIABIBLIOTECA

COD_EJE TÍTULO AUTOREDITORIALEJEMPLAR ÁREA COD_BIB

DNI NOM_SOCIO TFNO CIUDADSOCIO CARRERA

DNI COD_EJE DÍA MESPRÉSTAMO AÑO DIAS_PRESTADO

Puede haber variosejemplares con el

mismo título

título título“Fundamentos de BD” “BD:, ¡Qué gozada!”“Fundamentos de BD” “SQL para novatos”“BD:, ¡Qué gozada!” “Fundamentos de BD”

Page 52: MANUAL COMPLETO DE SQL

52FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: definición y actualización SQL de ITINERARIOS

(1,1)

(0,N)

(1,N)

(1,1)

VEHICULO PAIS

ITINERARIO CIUDAD

Por donde pasa

V_I P_CDe donde

A donde

Cod-bast

ClaseMarca

Matricula

Fecha

Orden

Moneda

Nombre

Codigo

Dieta

Cod_itiNombre

Cod-c

Habit

a) Completa las instrucciones de creación de la BD para el esquema ER anterior (ver páginas siguientes).

b) Incluir el itinerario (111, 50000, 95, 141) que sale de Sevilla (95, "Sevilla", 500000, 34) y llega a Friburgo (141, "Friburgo", 300000, 49), pasando por Zaragoza (93, "Zaragoza", 450000, 34), París (16, "París", 6000000, 33) y Karlstadt (148, "Karlstadt", 200000, 49). Los países correspondientes son España (34, "España", "Peseta"), Francia (33, "Francia", "Franco") y Alemania (49, "Alemania", "Marco"). Ninguno de los datos está en la BD.

c) Todos los itinerarios que pasan por Sevilla (solo pasar, no salir o llegar) se han desviado por Córdoba. Los datos de Córdoba (957, “Córdoba”, 134000, 34) no están en la BD.

d) El vehículo con nº de bastidor 3 ha tenido un accidente y lo han llevado a la chatarra. Se ha cambiado el vehículo a los itinerarios donde figuraba por (345, "Renault", "BI-9999-XX", "Express"), que no está aún en la BD.

(1,N)

(1,1)

(1,N)(0,N)

(0,N)

(1,N)

Page 53: MANUAL COMPLETO DE SQL

53FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: definición y actualización SQL de ITINERARIOS (2)

CREATE TABLE VEHICULO (Cod-bast INTEGER NOT NULL,Marca VARCHAR (15),Matricula VARCHAR (8) NOT NULL,Clase VARCHAR (8),PRIMARY KEY (Cod-bast),UNIQUE (Matrícula));

CREATE TABLE PAIS (Codigo INTEGER NOT NULL,Nombre VARCHAR (15) NOT NULL,Moneda VARCHAR (10),

CREATE TABLE ITINERARIO (Cod-iti INTEGER NOT NULL,Dieta INTEGER,Cod-dedonde INTEGER,Cod-adonde INTEGER,PRIMARY KEY (Cod-iti),FOREIGN KEY (Cod-dedonde) REFERENCES CIUDAD (Cod-c)

ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY (Cod-adonde) REFERENCES CIUDAD (Cod-c)

ON DELETE CASCADE ON UPDATE CASCADE);

CREATE TABLE CIUDAD (Cod-c INTEGER NOT NULL,Nombre VARCHAR (15) NOT NULL,Habit INTEGER,Codigo INTEGER,

Page 54: MANUAL COMPLETO DE SQL

54FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: definición y actualización SQL de ITINERARIOS (3)

CREATE TABLE VEHI-ITINE (Cod-bast INTEGER NOT NULL,Cod-iti INTEGER NOT NULL,Fecha DATE,PRIMARY KEY (Cod-bast, Cod-iti),FOREIGN KEY (Cod-bast) REFERENCES VEHICULO (Cod-bast)

ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY (Cod-iti ) REFERENCES ITINERARIO (Cod-iti)

ON DELETE CASCADE ON UPDATE CASCADE);

CREATE TABLE POR-DONDE (Cod-iti INTEGER NOT NULL,Cod-c INTEGER NOT NULL,Orden INTEGER,

FOREIGN KEY (Cod-c) REFERENCES CIUDAD (Cod-c)ON DELETE CASCADE ON UPDATE CASCADE);

Page 55: MANUAL COMPLETO DE SQL

55FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: análisis de restricciones de integridad en BANCOS

Analizar todas las R.I. violadas por cada operación cuando se ejecuta sobre la BD de la figura de la siguiente página:

a) INSERT INTO CUENTA VALUES (7, 7, 20000, null, null)

b) INSERT INTO CLIENTE VALUES (123, Pepi, null, null)

c) INSERT INTO CUENTA-CLIENTE VALUES (4, null)

d) INSERT INTO CUENTA VALUES (10, 4, 100000, 2, 3)

e) DELETE FROM CLIENTE WHERE DNI=999

f) DELETE FROM CUENTA-CLIENTE WHERE NCta=0 andDNI>000

g) UPDATE CUENTA-CLIENTE SET NCta=5, DNI=111 WHERE NCta=0 and DNI=111

h) UPDATE CUENTA-CLIENTE SET NCta=3, DNI=222 WHERE NCta=0

i) UPDATE CLIENTE SET Nombre=‘Ataulfo A.’ WHEREDNI>888

j) UPDATE CUENTA SET Banco=2, NSuc=2 WHERE NCta=0

k) UPDATE CUENTA SET Banco=2 WHERE Banco=1

l) UPDATE CUENTA SET Banco=null, NSuc=null WHEREBanco=1

m) UPDATE CUENTA SET Banco=null WHERE NCta=3

Page 56: MANUAL COMPLETO DE SQL

56FBD Tema 5 – Dpto. LSI - Donostia

Ejercicio: análisis de restricciones de integridad en BANCOS (2)

Código Nombre1 BBVA2 Santander

2101 Kutxa2102 BBK

DirGran Vía, 17Espolón, 1Garibai, 6

Salaberría, 3

BANCO

Banco NSuc1 11 21 32 1

CiudadBilbao

S. SebastiánVitoria

Santander

SUCURSAL

2 2 S. Sebastián2101 1 S. Sebastián2101 2 Pasajes2102 1 Bilbao2102 2 Sestao2102 3 Portugalete

DNI Nombre111 Juan222 Pedro333 Gaizka444 Luisa

DirLegazpi, 1Guridi, 5

Lardizabal, 1Nagusia, 2

CLIENTE

555 Ceferina Elkano, 3666 Yolanda Av. Madrid, 9777 Segismundo H. Cortés, 9888 Ataulfo Cervantes, 1999 Teodorico Velázquez, 7000 Atenea Sorolla, 13

Tfno111111222222333333444444555555666666777777888888999999101010

NCta Interés1 12 13 14 2

Saldo20000300004000030000

CUENTA

5 2 400006 3 500007 3 600008 3 600009 4 700000 4 80000

Banco11122

21012101210221022102

NSuc1231212123

PRÉSTAMO-CLIENTENPres DNI

0 1110 0001 1112 1112 2223 1113 3334 1114 4445 1115 5556 1116 6667 1117 7778 1118 8889 1119 999

PRÉSTAMONPres TAE

1 102 103 104 20

Importe200000300000400000300000

5 20 4000006 30 5000007 30 6000008 30 6000009 40 7000000 40 800000

Banco11122

21012101210221022102

NSuc1231212123

CE

CE

CECECE

NCta DNI0 1110 2220 5550 000

CUENTA-CLIENTE

1 1112 1112 2223 1113 3334 1114 2224 4445 1115 555

6 1116 2226 3336 6667 1117 7778 1118 2228 4448 8889 1119 3339 999

...

... CECE

CE

CE

Page 57: MANUAL COMPLETO DE SQL

57FBD Tema 5 – Dpto. LSI - Donostia

Junio 00

a) Obtener el nombre científico, hábitat y esperanza de vida de las mariposas de la colección de JoséMari Poza ordenadas por esperanza de vida. Hay que asegurarse de que sólo se obtiene una tupla por mariposa (y no por cada ejemplar de la misma).

b) Obtener el nombre científico y esperanza de vida de todas las mariposas que tienen algún ejemplar de mayor tamaño que el ejemplar número 5 de la mariposa con nombre científico Papilio macaonperteneciente a la colección de José Mari Poza.

Nombre Características

NombreCientífico Origen Hábitat EsperanzaVida

DNI Nombre Dirección Tfno

Código Ubicación PrecioEstimado

Número Procedencia TamañoNombreCientífico

NomEspecie

CódColección EsPrincipal

Nombre Código MejorEjemplar

NombreCientífico Color

Especie

Mariposa

Persona

Colección

Ejemplar

EspecieColección

ColoresMariposa

CódColección

Page 58: MANUAL COMPLETO DE SQL

58FBD Tema 5 – Dpto. LSI - Donostia

Septiembre 00

a) Obtener el DNI, nombre y edad de dueños de casas particulares, con la peculiaridad de que todas sus casas (las que posee) están situadas en una Zona Urbana cuya categoría es de “lujo”.

b) Obtener DNI, nombre y edad de las personas que vivenen un piso de menos m2 que algún piso que cumpla al mismo tiempo las dos condiciones siguientes:a) Esté situado en otro bloque distinto.b) Ese otro bloque pertenezca a una Zona Urbana de

categoría “Residencial”.c) Obtener datos de los pisos habitados por personas de

más de 60 años y situados en un Bloque de Casas que no supere los 10 pisos. Por cada piso queremos obtener la calle y número donde se encuentra, además de la siguiente información:– “Piso pequeño” si tiene menos de 50 m2

– “Piso mediano” si tiene entre 50 y 75 m2

– “Piso grande” si tiene más de 75 m2

ZonaUrbana

BloqueCasas

CasaParticular

Piso

Persona

PoseeC

PoseeP

NombreZona Categoría

Calle Número Npisos NombreZona

Número M2NombreZona

Calle Número Planta Puerta M2

DNI Nombre Edad NúmCasaNombreZona Calle NúmBloque Planta

DNI NúmCasaNombreZona

DNI Calle NúmBloque Planta

Puerta

Puerta

Page 59: MANUAL COMPLETO DE SQL

59FBD Tema 5 – Dpto. LSI - Donostia

Junio 01

a) Media de tiempo que se tarda en servir cada uno de los productos especiales a ser consumidos en el local (y no en el domicilio).

b) Considera los artículos de tipo “pizza” que llevan “pimiento”. Se desea conocer todos los datos de productos especiales que se basan en tales artículos y llevan “champiñón” entre los ingredientes para el producto especial.

c) Dirección de aquellos domicilios que hayan solicitado pedidos de artículos con precios superiores al artículo de nombre “Pizza 3 quesos”

Artículo NomArt Tipo Precio Tamaño

Ingrediente NomIngr Precio

Pedido NúmeroFechaHoraPedidoHoraServido

Domicilio Tfno Dirección

ProductoEspecial NomArt NomPrd

Art_Ingr NomArt NomIngr

Prd_Ingr NomArt NomPrd NomIngr

Ped_Art Número NomArt Cantidad

Ped_Prd NúmeroNomArt CantidadNomPrd

Tfno

Suministrador

Page 60: MANUAL COMPLETO DE SQL

60FBD Tema 5 – Dpto. LSI - Donostia

Septiembre 01

a) Para cada película de género policiaco obtener su título y el número total de premios que se le han concedido.

b) Nombres de los cines, con alguna sala de aforo igual o superior a 100 butacas, que no han proyectado la película premiada con la categoría “mejor actriz” del año 2001.

c) Obtener los nombres de los distintos actores que han participado en películas dirigidas por una persona que haya conseguido el premio al “mejor director” del festival en alguna ocasión. Queremos los actores participantes en cualquier película dirigida por esa persona, no sólo en las premiadas al mejor director.

Película

Cine

Persona

CódigoTítuloGénero

Nom Dirección Tfno

Nombre Sexo

Premio

Sala

Producida Código Nombre

Actor Código Nombre

Dirigida Código Nombre

Proyectada Código Nom Número

PremPers Categoría Nombre

FechaInicioFechaFinCategoría Euros CódigoAño

Año

Nacionalidad

Nom Número Aforo

Page 61: MANUAL COMPLETO DE SQL

61FBD Tema 5 – Dpto. LSI - Donostia

Junio 02

a) Buscando casualidades que se hayan producido en el mundial, deseamos obtener los nombres de aquellos jugadores (JUGADOR.Nombre contiene el nombre seguido del apellido) cuyo nombre de pila comience por “Carlos” y se hayan hospedado en el hotel del mismo nombre (“Carlos”), además de los nombres de aquellos jugadores que cumplían años el día de la inauguración (el 31/05/2002).

b) Mostrar, junto al nombre de cada país participante en el mundial, el número total de sus jugadores que hayan pasado al menos un control antidopaje. Téngase en cuenta que un mismo jugador ha podido pasar varios controles y deseamos contar el número de jugadores (NO el número de controles realizados a los jugadores de un país). Se desea que el resultado quede ordenado alfabéticamente por nombre de país de forma descendente.

c) Para aquellos equipos tales que entre dos de sus jugadores hayanmarcado más de la mitad de los goles totales del equipo, se desea obtener el código del equipo, los nombres de ambos jugadores, el total de goles del equipo y los goles que ha marcado cada uno de los dos jugadores. No queremos que una misma pareja de jugadores aparezca repetida en el resultado (el primer jugador deberá ser menor alfabéticamente que el segundo). Por ejemplo:

a) ESP, Gaizka Mendieta, Raul González, 25, 10, 5b) FRA, Francois Republique, Zinedine Zidane, 24, 9, 9

ResultadoCódigo_E1 Código_E2 FechaPARTIDO

Código_H Dirección TeléfonoHOTEL

DNI ClubCLUBES_AÑO

DNI Fecha LugarCONTROL_ANTIDOPAJE

Total_GolesCódigo_E País CamisetaEQUIPO

FechaNDNI NombreJUGADOR Goles

ÁrbitroCódigo_E1Código_E2FechaÁRBITRO

Código_E

Código_E

NºHabitacionesNombre

ResultadoCódigo_E1 Código_E2 FechaPARTIDO

Código_H Dirección TeléfonoHOTEL

DNI ClubCLUBES_AÑO

DNI Fecha LugarCONTROL_ANTIDOPAJE

Total_GolesCódigo_E País CamisetaEQUIPO

FechaNDNI NombreJUGADOR Goles

ÁrbitroCódigo_E1Código_E2FechaÁRBITRO

Código_E

Código_E

NºHabitacionesNombre

Page 62: MANUAL COMPLETO DE SQL

62FBD Tema 5 – Dpto. LSI - Donostia

Septiembre 02

a) Obtener el nombre de los alumnos que viajan en autobuses contratados por centros universitarios distintos a donde estudian, junto al nombre de su pueblo, la compañía del autobús y la fecha de inscripción del alumno en el autobús.Si el autobús no pertenece a ninguna compañía tendrá que figurar en vez de la compañía el código del centro. Si todavía no figurase en la BD el centro que contrata al autobús deberá aparecer en su lugar la matrícula.Las filas del resultado deberán aparecer ordenadas por nombre de pueblo y las que tengan el mismo nombre de pueblo ordenadas por fecha de inscripción.Téngase en cuenta que un alumno puede viajar en varios autobuses de estas características y que el resultado deberá recoger cada alumno junto a cada autobús en el que viaja que cumpla las condiciones anteriores.

b) Obtener el listado de las paradas (Cód_Pueblo, Calle) por las que pasan los autobuses que tienen alguna parada en “Beasain” y los ha contratado el centro de código “IFSS”.

c) Obtener para cada centro su nombre y el número de alumnos matriculados en él que viajan en algún autobús que:

– Figura en la BD como ya contratado por algún centro (suponer que pueden figurar en la BD autobuses que no están todavía contratados).

– Realiza alguna parada en la calle “Gorosabel” del pueblo de código “TLS”.

– Cuenta con más de 40 plazas.

CENTRO Cód_Centro Nombre Dirección

AUTOBÚS Matrícula N_Asientos Compañía Cód_Centro

ALUMNO DNI Nombre Cód_PuebloCód_Centro

CURSO DNI Id_Curso

PUEBLO NombreCód_Pueblo Provincia

PARADA CalleCód_Pueblo

PARA_EN CalleCód_PuebloMatrícula

VIAJA_EN DNI Matrícula Fecha_Inscripción

CENTRO Cód_Centro Nombre Dirección

AUTOBÚS Matrícula N_Asientos Compañía Cód_Centro

ALUMNO DNI Nombre Cód_PuebloCód_Centro

CURSO DNI Id_Curso

CENTRO Cód_Centro Nombre DirecciónCENTRO Cód_Centro Nombre DirecciónCód_Centro Nombre Dirección

AUTOBÚS Matrícula N_Asientos Compañía Cód_CentroAUTOBÚS Matrícula N_Asientos Compañía Cód_CentroMatrícula N_Asientos Compañía Cód_Centro

ALUMNO DNI Nombre Cód_PuebloCód_CentroALUMNO DNI Nombre Cód_PuebloCód_CentroDNI Nombre Cód_PuebloCód_Centro

CURSO DNI Id_CursoCURSO DNI Id_CursoDNI Id_Curso

PUEBLO NombreCód_Pueblo Provincia

PARADA CalleCód_Pueblo

PARA_EN CalleCód_PuebloMatrícula

VIAJA_EN DNI Matrícula Fecha_Inscripción

PUEBLO NombreCód_Pueblo ProvinciaPUEBLO NombreCód_Pueblo ProvinciaNombreCód_Pueblo Provincia

PARADA CalleCód_PuebloPARADA CalleCód_Pueblo CalleCód_Pueblo

PARA_EN CalleCód_PuebloMatrículaPARA_EN CalleCód_PuebloMatrícula CalleCód_PuebloMatrícula

VIAJA_EN DNI Matrícula Fecha_InscripciónVIAJA_EN DNI Matrícula Fecha_Inscripción

Page 63: MANUAL COMPLETO DE SQL

63FBD Tema 5 – Dpto. LSI - Donostia

Junio 03

a) DNI y Dirección, sin tuplas repetidas en el resultado, de aquellos alumnos que hayan rellenado fichas de petición de apuntes de al menos dos asignaturas distintas.

b) Indica por cada copistería (NIF) y asignatura (IdAsignatura) cuál es la facturación pendiente de pago por los alumnos de la asignatura.

COPISTERÍA

ALUMNO IdAsignatura Tema NúmeroHojasIdAsignatura Tema NúmeroHojasAPUNTES

ASIGNATURA

CURSA FICHAIdAsignaturaDNI IdAsignaturaDNI

DirecciónClaveDNI DirecciónClaveDNI

DirecciónNIF PrecioDirecciónNIF Precio CarreraIdAsignatura Curso NIFCarreraIdAsignatura Curso NIF

DNI IdAsignatura Tema NúmeroCopias FechaRecogidaFechaPeticiónDNI IdAsignatura Tema NúmeroCopias FechaRecogidaFechaPetición

Page 64: MANUAL COMPLETO DE SQL

64FBD Tema 5 – Dpto. LSI - Donostia

a) DNI, nombre y dirección de las personas solicitantes de algún permiso de obra asignado a un aparejador de la plantilla de “Aduna” (donde “Aduna” es el nombre de un municipio).

b) Obtener el nombre del aparejador y a cuántos inmuebles distintos ha denegado algún permiso de obra. Sólo queremos tener en cuenta aquellos permisos de obra donde el inmueble haya obtenido otro permiso de obra, solicitado con posterioridad y con el mismo presupuesto (el aparejador que acepta el permiso NO tiene por qué ser el mismo que el que lo denegópreviamente).

Septiembre 03APAREJADOR

MUNICIPIO

INMUEBLE

PERMISO

PERSONA

TRABAJA

N_Identificación Nombre Tfno NombreMunicipio

Nombre TfnoDirección

N_Propiedad Tipo Dirección NombreMunicipioDNI

N_Propiedad DescripciónFechaPeticiónDNI N_Identificación

FechaAsignación Presupuesto FechaResolución EstáConcedido

DNI Nombre Dirección

NombreMunicipio N_Identificación

......

M2

PETICIÓN N_Propiedad DNI

Dominio booleano

Page 65: MANUAL COMPLETO DE SQL

65FBD Tema 5 – Dpto. LSI - Donostia

c) Obtener la descripción, nº de propiedad y el presupuesto máximo para aquellos permisos de obra que cumplen:– El permiso está concedido, su campo descripción

tiene como valor “cerramiento” y corresponde a un inmueble de “Lasarte” de menos de 60 m2.

Junto a tuplas con los mismos campos, para aquellos permisos de obra que cumplen:– El permiso está concedido, el campo descripción

tiene como valor “fachada” y está asignado a un aparejador de la plantilla de “Lasarte”

Septiembre 03APAREJADOR

MUNICIPIO

INMUEBLE

PERMISO

PERSONA

TRABAJA

N_Identificación Nombre Tfno NombreMunicipio

Nombre TfnoDirección

N_Propiedad Tipo Dirección NombreMunicipioDNI

N_Propiedad DescripciónFechaPeticiónDNI N_Identificación

FechaAsignación Presupuesto FechaResolución EstáConcedido

DNI Nombre Dirección

NombreMunicipio N_Identificación

......

M2

PETICIÓN N_Propiedad DNI

Dominio booleano

Page 66: MANUAL COMPLETO DE SQL

66FBD Tema 5 – Dpto. LSI - Donostia

a) Obtener la clasificación general de la vuelta, es decir, el dorsal, nombre del ciclista y nombre del equipo junto al tiempo total invertido en las etapas disputadas, para aquellos ciclistas que continúan en carrera, ordenados de menor a mayor tiempo consumido.

b) Obtener el dorsal y el nombre de los ciclistas que pertenecen al equipo del ciclista ganador de la décima etapa (incluido este) y que participaron en dicha etapa

Junio 04

PUERTO CategoríaNúmOrdenAltitudNúmEtapa Primero

EQUIPO DirectorNombre CICLISTA EnCarreraNombreFechaNctoDorsal Equipo

MAILLOT PremioColor Metálico PARTICIPACIÓN Etapa TiempoDorsal

ETAPA SalidaKmNúmero LlegadaGanador LLEVA_MAILLOT Etapa DorsalColor

Suponiendo que haya un dominio

que incluya horas-min-seg.

Page 67: MANUAL COMPLETO DE SQL

67FBD Tema 5 – Dpto. LSI - Donostia

a) Nombre y procedencia de los voluntarios que hablanfrancés y acompañan a deportistas que participan endeportes cuyos eventos de clasificación se celebraronen París.

b) Nombre, apellido e identificación de aquellosdeportistas del equipo de Jorge Sánchez que cumplanla siguiente condición: han logrado algún record y todos los records que han conseguido son de tipo mundial. En el resultado debe excluirse a Jorge Sánchez.

Septiembre 04

EVENTO FechaNombre

DEPORTE HistoriaCódigo Equipamiento

RECORD CódigoDeporte Ciudad

Ciudad

Nombre

NúmeroIdDeportista Fecha Hora

TIPO RECORD CódigoDeporte TipoNúmeroIdDeportista Fecha Hora

IDIOMA NúmeroIdVolunt IdiomaTIENE CódigoDeporte Ciudad Nombre

DEPORTISTA ApellidoNombreNúmeroId Dirección Teléfono NúmeroIdVolunt FechaCom FechaFin CódigoDeporte País

VOLUNTARIO ProfesiónNombreNúmeroId Procedencia

EQUIPO CódigoDeporte País Entrenador

PARTICIPA CódigoDeporte NúmeroIdDeportista

DESTACA CódigoDeporte NúmeroIdDeportista

EVENTO FechaNombre

DEPORTE HistoriaCódigo Equipamiento

RECORD CódigoDeporte Ciudad

Ciudad

Nombre

NúmeroIdDeportista Fecha Hora

TIPO RECORD CódigoDeporte TipoNúmeroIdDeportista Fecha Hora

IDIOMA NúmeroIdVolunt IdiomaTIENE CódigoDeporte Ciudad Nombre

DEPORTISTA ApellidoNombreNúmeroId Dirección Teléfono NúmeroIdVolunt FechaCom FechaFin CódigoDeporte País

VOLUNTARIO ProfesiónNombreNúmeroId Procedencia

EQUIPO CódigoDeporte País Entrenador

PARTICIPA CódigoDeporte NúmeroIdDeportista

DESTACA CódigoDeporte NúmeroIdDeportista

Page 68: MANUAL COMPLETO DE SQL

68FBD Tema 5 – Dpto. LSI - Donostia

a) Nombre y dirección de aquellos clientes (sin repeticiones) que hayan participado en algún viaje en el que se hayan hospedado más noches en un mismo hotel que las noches que se hospedó en el hotel “Gabriella” el cliente con DNI “15238432”, en el viaje que realizó a Roma el “3/05/2005”.

b) Obtener, para cada destino de viaje DV, el número de guías que hablen “italiano” que han llevado o llevarán algún viaje a ese destino DV, con posibilidad de alojarse (en el destino de viaje DV) en algún hotel de “Roma”.

Junio 05

DestinoVFechaSalida Días PrecioDía CiudadSalida DNIVIAJE DestinoVFechaSalida Días PrecioDía CiudadSalida DNIVIAJE

DNI Nombre N_TfnoGUÍADNI Nombre N_TfnoGUÍA

DNI IdiomaIDIOMADNI IdiomaIDIOMA

Id_Hotel Nombre LocalidadCapacidadHOTELId_Hotel Nombre LocalidadCapacidadHOTEL

DNI Nombre N_TfnoCLIENTE DirecciónDNI Nombre N_TfnoCLIENTE Dirección

DestinoVFechaSalida NúmeroDestinoExcursiónHoraSalida LugarSalidaEXCURSIÓN_OPCIONAL PrecioDestinoVFechaSalida NúmeroDestinoExcursiónHoraSalida LugarSalidaEXCURSIÓN_OPCIONAL Precio

DestinoVFechaSalida IdHotel DNI NúmeroNochesHOTEL_VIAJE_CLIENTE DestinoVFechaSalida IdHotel DNI NúmeroNochesHOTEL_VIAJE_CLIENTE DestinoVFechaSalida NúmeroDNIEXCUR_OPC

_CLIENTE

Id_HotelDestinoVFechaSalidaHOTEL_VIAJE Id_HotelDestinoVFechaSalidaHOTEL_VIAJE

Page 69: MANUAL COMPLETO DE SQL

69FBD Tema 5 – Dpto. LSI - Donostia

a) Especie, crotal y fecha de nacimiento de las reses de la raza “Angus” con padre y madre conocidos (están en la BD) y cuyo propietario es “Domecq”. Sólo se obtendrán reses que NUNCA hayan padecido la enfermedad “Brucelosis”.

b) Obtener la especie y crotal de las reses que, habiendo padecido la enfermedad “Encefalopatía”, se les aplicópara dicha enfermedad alguno de los tratamientos usados para esa misma enfermedad en la res de la especie “bovina” con crotal número 1. Esta última res no debe aparecer en el resultado.

Septiembre 05

No se repite especieen las

claves extranjeras de padre y madre

por ser la misma

RESEspecieCrotalRazaFechaNctoMataderoCrotalPadreCrotalMadreDNIGranjaNomGranjaEspecieCrotalRazaFechaNctoMataderoCrotalPadreCrotalMadreDNIGranjaNomGranja

GRANJA DNINombreE-mailDNINombreE-mailGANADERODNINombreDireccionTfnoAdministradorDNINombreDireccionTfnoAdministrador

NombreENFERMEDAD TRATAMIENTONombreDuraciónNombreDuración

MEDICAMENTOTratamientoMedicamentoTratamientoMedicamentoSÍNTOMAEnfermedadSintomaEnfermedadSintoma

ENFER_TRATAMEnfermedadTratamientoEnfermedadTratamientoAPLICAREnfermedadTratamientoEspecieCrotalF_InicioEnfermedadTratamientoEspecieCrotalF_Inicio

Page 70: MANUAL COMPLETO DE SQL

70FBD Tema 5 – Dpto. LSI - Donostia

ER-Relacional Junio y Septiembre 00

MARIPOSA

ESPECIE PERSONA

COLECCIÓNEJEMPLAR

ProcedenciaNúmero Tamaño

Nombre Características

Origen

Colores

NombreCientífico

Hábitat

DNI

Nombre

EsPrincipal

1

N

N

N

N

1

1

1N

M

Código

Ubicación

PrecioEstimado

Dirección

Tfno

EsperanzaVida

MejorEjemplar

NombreZona CategoríaNúmero

M2

ZONA_URBANA

PERSONA

BLOQUE_CASAS

DNI Nombre Edad

Puerta

CalleNPisos

POSEEC POSEEP

VIVEC VIVEP

M2

PISO

1 N

1

N

CASA_PARTICULARN

M M

N

N

1 1

N

N

1

Planta

Dir

Número P_P

Page 71: MANUAL COMPLETO DE SQL

71FBD Tema 5 – Dpto. LSI - Donostia

ER-RelacionalJunio y Septiembre 01

INGREDIENTE

ARTÍCULO

PEDIDO

DOMICILIO

PRODUCTOESPECIAL

LLEVA

BASE DE

INCLUIDO

LLEVAR_A

NomArt

Precio

NomIngrPrecio

Tamaño

Tipo

FechaNúmero

LLEVA

INCLUIDO

NomPrd

DirecciónTfno

Cantidad Cantidad

HorapedidoHora

servido

(1,N)

(0,N)

(0,N)

(0,N) (1,1)(1,N)

(0,N)(0,N)

(0,N)

(0,N)

(0,1)(0,N)

Suministrador

PERSONAPELÍCULA

PREMIO

CINESALA

ACTOR

PROYECTADA

Título

NombreSexo

Género

Código

DIRIGIDA

CONCEDIDO

Número

DirecciónTfno

Categoría

PRODUCIDA

DE

Nom

Euros(0,1)

(0,N)(0,N)(0,N)

(0,N)

(0,N)(1,N)

(1,N)

(1,N)

(1,1) (1,N)(1,N)

(1,N)

Aforo

FechaInicio

FechaFin

CONCEDIDO(0,N)

Año

Cód

Nacionalidad

Page 72: MANUAL COMPLETO DE SQL

72FBD Tema 5 – Dpto. LSI - Donostia

ER-Relacional Junio y Septiembre 02

HOTEL

Cód Direcc Tfno.

Nombre

EQUIPO

Cód País

Camiseta Total_Goles

RESIDE(1,N)(1,1)

PARTIDO

Fecha Resultado

Árbitros

JUEGA(1,1)(1,N)

(1,N)

Equip2

Equip1

JUGADOR

DNI

Nombre

FechaN

Clubes_Año Goles

COMPUESTO POR

(1,1)

(1,N)

CONTROLANTIDOPAJE

Fecha Lugar

PASADOA

(1,1) (0,N)

NºHabit

HOTEL

Cód Direcc Tfno.

Nombre

EQUIPO

Cód País

Camiseta Total_Goles

RESIDE(1,N)(1,1)

PARTIDO

Fecha Resultado

Árbitros

JUEGA(1,1)(1,N)

(1,N)

Equip2

Equip1

JUGADOR

DNI

Nombre

FechaN

Clubes_Año Goles

COMPUESTO POR

(1,1)

(1,N)

CONTROLANTIDOPAJE

Fecha Lugar

PASADOA

(1,1) (0,N)

NºHabit

ALUMNO

CENTRO AUTOBÚS PARADA

ESTUDIA_EN VIAJA_EN

VIVE_EN

PARA_ENCONTRATA_A

Matrícula

DNI

Nombre

(1,N)(1,1)

(0,N) (0,N)

(1,N)

(1,1)

(1,N)(1,1)

(0,N)

(1,N)

PUEBLO

ProvinciaNombreCód_Pueblo

POSEE

(1,N) (1,1)

NombreCursos

Dirección

N_Asientos

Cód_Centro Compañía

Fecha_Inscripción

Calle

ALUMNO

CENTRO AUTOBÚS PARADA

ESTUDIA_EN VIAJA_EN

VIVE_EN

PARA_ENCONTRATA_A

Matrícula

DNI

Nombre

(1,N)(1,1)

(0,N) (0,N)

(1,N)

(1,1)

(1,N)(1,1)

(0,N)

(1,N)

PUEBLO

ProvinciaNombreCód_Pueblo

POSEE

(1,N) (1,1)

NombreCursos

Dirección

N_Asientos

Cód_Centro Compañía

Fecha_Inscripción

CalleCalle

Page 73: MANUAL COMPLETO DE SQL

73FBD Tema 5 – Dpto. LSI - Donostia

ER-Relacional Junio 2003

Septiembre 2003

Alumno

Apuntes Asignatura

Copistería

Cursa Asignada_a

Pertenecen_a

IdAsignatura

DNI

(0,N)

(0,N) (0,N)

(1,N) (1,N)

(1,1)

(0,N)

Clave Dirección

NúmeroHojas

Dirección

Curso

Carrera

Precio

NIF

(1,1)

FechaRecogida

NúmeroCopias

Pide

Ficha

(1,1)FechaPeticiónFechaPetición

TemaTema

MUNICIPIO INMUEBLE

PERMISOAPAREJADOR

Nombre Dirección Tfno NºPropiedad Tipo Dirección M2

UBICADO PERTENECE

SOLICITATRABAJAPLANTILLA PERSONA

NºIdentificaciónNombre

Tfno

ASIGNADO

FechaAsignaciónDNI DirecciónNombre

NºPeticiones

Descripción Presupuesto

FechaPeticiónFechaPetición FechaResolución

EstáConcedido

(0,N) (1,1) (1,1)

(0,N)

(1,1)

(0,N)(0,N)

(0,1)(0,N)

(0,N)

(0,N)(1,1)

(1,N)

Page 74: MANUAL COMPLETO DE SQL

74FBD Tema 5 – Dpto. LSI - Donostia

ER-Relacional Junio 2004

Septiembre 2004

CICLISTANombre

Fecha_Ncto

Dorsal

Edad

En_Carrera

EQUIPO

Nombre Director

Consta(1,1)

(1,N)

ETAPAKmSalida

Número

Llegada

Altitud

Categoría

PUERTO

NºOrden

Corresponde

(0,N)

(1,1)

MAILLOT

Color Premio Metálico

Lleva

(0,N)

1 (0,N)(1,N)

N

M

Gana(1,1) (0,N)

Participa(1,N) (1,N)

Tiempo

Horas

Min.

Seg.

Primero(1,1)

(0,N)

CICLISTANombre

Fecha_Ncto

Dorsal

Edad

En_Carrera

EQUIPO

Nombre Director

Consta(1,1)

(1,N)

ETAPAKmSalida

Número

Llegada

Altitud

Categoría

PUERTO

NºOrdenNºOrden

Corresponde

(0,N)

(1,1)

MAILLOT

Color Premio Metálico

Lleva

(0,N)

1 (0,N)(1,N)

N

M

Gana(1,1) (0,N)

Participa(1,N) (1,N)

Tiempo

Horas

Min.

Seg.

Primero(1,1)

(0,N)

DEPORTISTA

Nombre

Apellido

NúmeroId

Teléfono

EQUIPO

CONSTA

(0,1)

(1,N)

DEPORTENombre

Código

Historia

Tipo

RECORD

FechaCom

CONSIGUE(0,N)

(1,1)

EVENTO

Código

Fecha

DESTACA(0,N)

(0,N)(0,N)

PARTICIPA(1,N) (1,N)

EquipamientoTIENE

Ciudad

Nombre(1,N)

VOLUNTARIONúmeroId

(1,1)

ACOMPAÑA

(1,N)

Nombre

ProcedenciaProfesión

Idioma

(0,N)

Dirección

Fecha

Hora

Ciudad

País Entrenador

SELECCIÓN

(1,1)

(0,N)FechaCom

FechaFin

DEPORTISTA

Nombre

Apellido

NúmeroId

Teléfono

EQUIPO

CONSTA

(0,1)

(1,N)

DEPORTENombre

Código

Historia

Tipo

RECORD

FechaComFechaCom

CONSIGUE(0,N)

(1,1)

EVENTO

Código

Fecha

DESTACA(0,N)

(0,N)(0,N)

PARTICIPA(1,N) (1,N)

EquipamientoTIENE

Ciudad

Nombre(1,N)

VOLUNTARIONúmeroId

(1,1)

ACOMPAÑA

(1,N)

Nombre

ProcedenciaProfesión

Idioma

(0,N)

Dirección

Fecha

Hora

Ciudad

PaísPaís Entrenador

SELECCIÓN

(1,1)

(0,N)FechaCom

FechaFin

Page 75: MANUAL COMPLETO DE SQL

75FBD Tema 5 – Dpto. LSI - Donostia

ER-Relacional Junio 2005

Septiembre 2005

VIAJE HOTEL

CLIENTE

GUÍA

EXCURSIÓNOPCIONAL

ASIGNADO

ASIGNADA ALOJADO

LLEVA

ASISTE

(1,1)

(0,N)

(0,N)(1,N)

(0,N) NM (1,N)

P (1,N)

(0,N)(0,N)

(0,N)

(1,1)

IdentDestino

FechaSalida Días

Precio día

Precio total

Ciudad salida

DNI

Nombre

N_Tfno

IdiomasIdHotel

Nombre

Localidad

Capacidad

DNI

Nombre

Dirección

N_Tfno

Hora salida

Lugar salida

Precio

NúmeroNúmeroNº Noches

DestinoDestino

TRATAMIENTOGANADERO

ENFERMEDADGRANJA PERTENECE APLICADO

SE_APLICAADMINISTRADA PERTENECE

Medicamentos

IdEspecie

CrotalRaza

PADRE MADRE

FechaNcto

RES

Síntomas

Nombre

Nombre

DuraciónDNI

Nombre

Dirección

Tfno

Nombre

(0,1) hija

(0,N) madre

hija (0,1)

padre (0,N)

(0,N)(0,N)

(0,N) (1,N)

(1,N)

(1,1)(1,N)

(1,1)(1,1)

(0,N)(0,N)

E-mail

Matadero

FinTratamiento

APLICAR

InicioTratamientoInicioTratamiento

(1,1)


Recommended