Vous êtes sur la page 1sur 15

SQL

(Structured Query Language)

lgebra relacional Orden de las operaciones


Tema 4. SQL
SQL Lenguaje declarativo Optimizacin
El estndar de las BD relacionales
Elmasri/Navathe 02
SGBD comerciales Variantes de SQL
Estndares SQL:
Definicin de datos (CREATE TABLE, etc) (8.1) SQL1 1986.
Consultas (CREATE TABLE, restringidas *) (8.2, 8.3) SQL2 1992.
Actualizacin (INSERT, DELETE, UPDATE) (8.4) SQL3.
Definicin de ndices
No vienen SQL:
en el libro
Definicin (LDD).
Consulta (LMD).
Actualizacin (LMD).
restringidas *
Vistas.
Este curso no cubre todos los aspectos de SELECT.
No estudiaremos SELECT ANIDADOS, EXCEPT ni INTERSECT. ndices (en SQL2 ya no hay).
Inclusin en lenguajes (C, PASCAL,...).

Nos centraremos en SQL2 (en lo posible).

SQL Mod. Relacional


Tabla Relacin
Fila Tupla
Columna Atributo

C. P. G. 2007 FBD Tema 4 1 C. P. G. 2007 FBD Tema 4 2

Crear tablas en SQL


Esquemas y catlogo
CREATE TABLE DEPARTAMENTO
El trmino esquema de BD se incorpora en SQL2. ( NOMBRED VARCHAR(15) NOT NULL,
NUMEROD INT NOT NULL,
CREATE SCHEMA Nombre NSS_JEFE CHAR(9),
[AUTHORIZATION Usuario]; FECHA_INIC_JEFE DATE,

RI: Slo entre relaciones del mismo catlogo. PRIMARY KEY(NUMEROD),


Esquemas de un catlogo: Pueden compartir elementos. UNIQUE(NOMBRED),
(Ej. Dominios). FOREIGN KEY(NSS_JEFE) REFERENCES
EMPLEADO(NSS)
ON UPDATE CASCADE
ON DELETE SET NULL);
Catlogo
Fig.8.1 (a)
Esquema 1 Esquema 2
Tablas CREATE TABLE DEPARTAMENTO
Vistas
Dominios
... ( ...,
NSS_JEFE CHAR(9) NOT NULL
Autorizaciones DEFAULT 888665555,
Aserciones ...,
CONSTRAINT CLPDEPTO PRIMARY KEY(NUMEROD),
CONSTRAINT CLSDEPTO UNIQUE(NOMBRED),
INFORMATION_
SCHEMA CONSTRAINT CLEGTESDEPTO FOREIGN KEY
(NSS_JEFE) REFERENCES EMPLEADO(NSS)
Da a los usuarios
ON DELETE SET DEFAULT
autorizados
ON UPDATE CASCADE);
informacin del catlogo
Fig.8.1 (b)

C. P. G. 2007 FBD Tema 4 3 C. P. G. 2007 FBD Tema 4 4


Tipos de datos: Tipos de datos:
Numricos Cadena de caracteres
Enteros: Longitud fija:
INTEGER / INT CHAR(n)
SMALLINT CHARACTER(n)
Longitud variable:
Reales: CHARACTER VARYING(n)
FLOAT VARCHAR(n)
CHAR VARYING(n)
REAL
n=mximo definido. Por defecto n=1.
DOUBLE PRECISION
DECIMAL(i,j) / DEC(i,j)
NUMERIC(i,j) Representacin nacional:
i dgitos enteros y j dgitos decimales.
Longitud fija:
Por defecto: i segn la implementacin, j=0. NATIONAL CHARACTER(n)
NCHAR(n)
Ejemplos: NATIONAL CHAR(n)
Cdigo INT Longitud variable:
Precio DECIMAL(7,2) NATIONAL CHARACTER VARYING(n)
NCHAR VARYING(n)
NATIONAL CHAR VARYING(n)
n=mximo definido. Por defecto n=1.

Ejemplos:
Descripcin CHARACTER(20)
Nombre VARCHAR(12)

C. P. G. 2007 FBD Tema 4 5 C. P. G. 2007 FBD Tema 4 6

Tipos de datos: Tipos de datos:


Cadena de bits Fecha y hora
Longitud fija: DATE
BIT(n) Generalmente YYYY-MM-DD.
Por defecto n=1. YEAR, MONTH, DAY.
TIME / TIME(i)
Longitud variable: Normalmente HH:MM:SS.
BIT VARYING(n) HOUR, MINUTE, SECOND.
n=mximo definido. Por defecto n=1. i = posiciones de fracciones de sg.
TIME WITH TIME ZONE
Ejemplos: Desplazamiento de huso horario.
SiNo BIT +13:00 a -12:59.
UnFlag BIT(100) Por defecto: Uso local de la sesin.
OtroFlag BIT VARYING (125) TIMESTAMP [WITH TIME ZONE]
Marca de tiempo.
DATE, TIME y mnimo 6 posiciones de
fracciones de sg.
INTERVAL
Valor relativo (de tiempo).
Para incrementar/decrementar un valor
fecha, hora o marca de tiempo.
AosAMeses INTERVAL YEAR TO
MONTH.
Unidad mayor
Unidad menor

C. P. G. 2007 FBD Tema 4 7 C. P. G. 2007 FBD Tema 4 8


Dominios Restricciones de tabla

En CREATE TABLE.
CREATE DOMAIN TIPO_NSS AS CHAR(9); Tras la descripcin de atributos (columnas).

Claves:
DEFAULT
PRIMARY KEY: Clave primaria.
Valor por defecto.
UNIQUE: Clave candidata.
Si no se especifica es NULL.
FOREIGN KEY: Clave extranjera.

NOT NULL
Restriccin. Integridad referencial (clave extranjera):
Calificar con:
ON DELETE
ON UPDATE
Opciones:
SET NULL
CASCADE
SET DEFAULT

C. P. G. 2007 FBD Tema 4 9 C. P. G. 2007 FBD Tema 4 10

Integridad referencial Borrar esquemas y tablas


(DROP)

Borrar esquema
CREATE TABLE EMPLEADO ...
CONSTRAINT CLESUPEREMP FOREIGN KEY
(NSS_SUPERV) REFERENCES EMPLEADO(NSS) DROP SCHEMA EMPRESA CASCADE;
ON DELETE SET NULL
ON UPDATE CASCADE;
RESTRICT: Borrar slo si no contiene elementos
Si se modifica, CASCADE: Borrar esquema y contenidos
Al borrar un empleado
propagar el nuevo
poner NULL en todos
valor a todos los
los empleados que lo
empleados que lo
tengan como jefe
tienen como jefe
Borrar tabla

CASCADE es adecuada para relaciones de: DROP TABLE DEPENDIENTE CASCADE;


Vnculo (TRABAJA_EN).
Atributos multivaluados RESTRICT: Borrar slo si no existen referencias
(LOCALIZACIONES_DEPT).
T. de entidad dbiles (DEPENDIENTE). a la tabla:
En clave externa de otra relacin.
En una vista.
El nombre de una restriccin sirve para poderla
sustituir o desechar. CASCADE: Borrar tabla y todas las restricciones
La asignacin de nombre es opcional. y vistas donde haya referencias a sta.

C. P. G. 2007 FBD Tema 4 11 C. P. G. 2007 FBD Tema 4 12


Modificar columnas Modificar restricciones
(ALTER TABLE) (ALTER TABLE)

Aadir Borrar
ALTER TABLE EMPRESA.EMPLEADO ALTER TABLE EMPRESA.EMPLEADO
ADD PUESTO VARCHAR(12); DROP CONSTRAINT CLESUPEREMP;
Valores null (alternativa: default, orden update). Es preciso haberle dado un nombre.
No con NOT NULL.
Aadir
Borrar ALTER TABLE EMPRESA.EMPLEADO
ALTER TABLE EMPRESA.EMPLEADO ADD CONSTRAINT CLESUPEREMP
DROP DIRECCIN CASCADE; FOREIGN KEY (NSS_SUPERV) REFERENCES
EMPLEADO(NSS)
CASCADE borra restricciones y vistas que le
ON DELETE SET NULL
hagan referencia.
ON UPDATE CASCADE;
RESTRICT slo se borra si no hay restricciones
ni vistas que le hagan referencia.

Modificar definicin
ALTER TABLE
EMPRESA.DEPARTAMENTO ALTER
NSS_JEFE DROP DEFAULT;
ALTER TABLE
EMPRESA.DEPARTAMENTO ALTER
NSS_JEFE SET DEFAULT 333445555;

C. P. G. 2007 FBD Tema 4 13 C. P. G. 2007 FBD Tema 4 14

INSERT INSERT (2)

A1: INSERT INTO EMPLEADO A3A: CREATE TABLE INFO_DEPTOS (


VALUES (Ricardo, C, Martnez, 653298653, 1952-12-30, NOMBRE_DEPTO VARCHAR(15),
Olmo 98, Cedros, MX, H, 37000, 987654321, 4) NM_DE_EMPS INTEGER,
Mismo orden en el que se especificaron los atributos. SAL_TOTAL INTEGER);

A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, ND,NSS)


VALUES (Ricardo, Martnez, 4, 653298653) A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO,
As los atributos con valor NULL o DEFAULT se NM_DE_EMPS, SAL_TOTAL)
pueden omitir. SELECT NOMBRED, COUNT (*), SUM(SALARIO)
FROM (DEPARTAMENTO JOIN EMPLEADO ON
Mismo orden en el que se especifican los atributos
NMEROD=ND)
en INSERT. 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.
A2:INSERT INTO EMPLEADO (NOMBRE,APELLIDO,NSS,ND)
VALUES (Roberto, Huerta, 980760540, 2)

A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND)


VALUES (Roberto, Huerta, 2)
Rechazada por no proporcionar valor para NSS
(clave primaria: NOT NULL).

C. P. G. 2007 FBD Tema 4 15 C. P. G. 2007 FBD Tema 4 16


DELETE UPDATE

A4A: DELETE FROM EMPLEADO A5: UPDATE PROYECTO


WHERE APELLIDO=Brown; SET LOCALIZACINP=Bellaire, NUMD=5
Una sola tabla. WHERE NMEROP=10;

WHERE: seleccin de tuplas a eliminar. Una sola tabla.


El borrado se puede propagar (RI referencial). WHERE: Seleccin de tuplas a modificar.
SET: Atributos a modificar y nuevos valores.
SET: El nuevo valor puede ser NULL o DEFAULT.
A4B: DELETE FROM EMPLEADO
Modificaciones de clave primaria pueden
WHERE NSS=123456789;
propagarse a clave/s extranjera/s.

A4C: DELETE FROM EMPLEADO


WHERE ND IN A6: UPDATE EMPLEADO
(SELECT NMEROD SET SALARIO=SALARIO*1.1
FROM DEPARTAMENTO WHERE ND IN (SELECT NMEROD
WHERE NOMBRED=Investigacin); FROM DEPARTAMENTO
WHERE NOMBRED= Investigacin);
A4D: DELETE FROM EMPLEADO; A la izda se refiere al nuevo valor de SALARIO.
Sin WHERE se borran todas las tuplas. A la dcha al valor antiguo.
DROP eliminara la definicin de la tabla.

C. P. G. 2007 FBD Tema 4 17 C. P. G. 2007 FBD Tema 4 18

ndices ndices (2)

Eliminados en SQL2. I3: CREATE UNIQUE INDEX NDICE_NSS


ON EMPLEADO(NSS);
Estructura fsica de acceso a datos de una relacin.
Indica restriccin de clave.
Basada en uno o ms atributos.
Si hay tuplas con igual NSS la instruccin falla.
Acceso ms eficiente si en WHERE estn los
atributos de indexacin. Mejor crearlo antes de insertar tuplas.
Mejora considerable en relaciones con muchas tuplas.
Cuando no haba clusulas para restriccin de clave: Se I4: CREATE INDEX NDICE_ND
especificaba un ndice. ON EMPLEADO(ND)
CLUSTER;
I1: CREATE INDEX NDICE_APELLIDO Empleados agrupados por n de departamento.
ON EMPLEADO(APELLIDO);
Reunin y seleccin son aun ms eficientes si
Por defecto en orden ascendente (ASC). se especifican en base a este atributo.
Mximo: 1 ndice de agrupamiento por
I2: CREATE INDEX NDICE_NOMBRES
relacin.
ON EMPLEADO(APELLIDO ASC,
NOMBREP DESC, INIC);
Con o sin UNIQUE.
Tambin sobre una combinacin de atributos.
I5: DROP INDEX NDICE_ND;
Elimina un ndice.

C. P. G. 2007 FBD Tema 4 19 C. P. G. 2007 FBD Tema 4 20


Consultas bsicas Consultas bsicas (2)

Nombre y direccin de los empleados del departa-


SELECT columnas El temario no cubre todos mento de Investigacin.
los aspectos de SELECT.
FROM tablas En particular no estudiaremos
[WHERE condicin] SELECT anidados. EMPLEADO
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN SEXO ...
Fecha de nacimiento y direccin de John Smith. ... SALARIO NSS_SUPERV ND

EMPLEADO DEPARTAMENTO

NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN SEXO ... NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE

C0: SELECT FECHA_NCTO, DIRECCIN C1: SELECT NOMBRE, APELLIDO, DIRECCIN


FROM EMPLEADO FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRE=John AND APELLIDO=Smith; WHERE NOMBRED=Investigacin AND NMEROD=ND;

FECHA_NCTO,DIRECCIN(NOMBRE=John AND Secuencia: - -


APELLIDO=Smith( EMPLEADO)) DINOMBRED=Investigacin(DEPARTAMENTO)
SELECT tiene los atributos de . EM_DIDI NUMEROD=ND EMPLEADO

WHERE tiene la condicin de : RESUL NOMBREP,APELLIDO,DIRECCIN (EM_DI)

{=, <, >, <=, >=, <>}, AND, OR, NOT WHERE: Condiciones de y

El resultado de una
consulta SQL tuplas repetidas
puede contener ...

C. P. G. 2007 FBD Tema 4 21 C. P. G. 2007 FBD Tema 4 22

Consultas bsicas (3) Calificar atributos

N de proyecto, n de depto. que lo controla, apellido,


Nombre, apellido y direccin de los empleados del
direccin y fecha de nacimiento del jefe del depto. de
todos los proyectos realizados en Stafford. departamento de investigacin.
EMPLEADO
... C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIR
NOMBREP INIC APELLIDO NSS FECHA_NCTO DIRECCIN
FROM EMPLEADO, DEPARTAMENTO
DEPARTAMENTO WHERE DEPARTAMENTO.NOMBRE = Investigacin
AND DEPARTAMENTO.ND=EMPLEADO.ND;
NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE

PROYECTO
NOMBREP NMEROP LOCALIZACINP NMD
EMPLEADO
C2: SELECT NMEROP, NMD, APELLIDO, DIRECCIN, NOMBRE INIC APELLIDO NSS FECHA_NCTO DIR
FECHA_NCTO
SEXO SALARIO NSS_SUPERV ND
FROM PROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NMD=NMEROD AND NSS_JEFE=NSS AND DEPARTAMENTO
LOCALIZACINP=Stafford; NOMBRE ND NSS FECHA_INIC_JEFE

NMD=NMEROD relaciona un proyecto con su


departamento controlador.
NSS_JEFE=NSS relaciona el departamento controlador Se usa obligatoriamente cuando coinciden los
con el empleado que lo dirige. nombres de los atributos en varias tablas.

PR_ST LOCALIZACINP=Stafford(PROYECTO)
DP_CNPR_ST NMD=NMEROD DEPARTAMENTO
JEFE_DP_PRY DP_CN NSS_JEFE=NSS EMPLEADO
RESULTADO NMEROP, NMD, APELLIDO, DIRECCIN,
FECHA_NCTO (JEFE_DP_PRY)

C. P. G. 2007 FBD Tema 4 23 C. P. G. 2007 FBD Tema 4 24


Seudnimos de tablas
Nombre, apellido de cada empleado junto al nombre y Omisin de WHERE
apellido de su supervisor.

... NSS_SUPERV ND Indica seleccin de tuplas incondicional.


EMPLEADO E NOMBRE INIC APELLIDO NSS
Equivale a WHERE TRUE.
EMPLEADO S NOMBRE INIC APELLIDO NSS ... NSS_SUPERV ND Producto cartesiano:
Sin WHERE y ms de una relacin en FROM.
C8: SELECT E.NOMBRE, E.APELLIDO, S.NOMBRE,
S.APELLIDO
FROM EMPLEADO E, EMPLEADO S NSS de todos los empleados:
WHERE E.NSS_SUPERV=S.NSS; C9: SELECT NSS
FROM EMPLEADO;
Admite varias referencias a una misma
relacin.
Combinaciones posibles de NSS de empleados con
NO CON nombres de departamento:
MYSQL
Se pueden cambiar los nombres de atributos: C10: SELECT NSS, NOMBRED
FROM EMPLEADO , DEPARTAMENTO;
FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR,
SEX, SAL, NSSS, ND), ...

Se pueden usar seudnimos aunque no haya varias


referencias a una relacin nombres ms cortos.
Por ejemplo, C1A se puede escribir:

C1B: SELECT E.NOMBRE, E.APELLIDO, E.DIR


FROM EMPLEADO E, DEPARTAMENTO D
WHERE D.NOMBRE = Investigacin AND D.ND=E.ND;

C. P. G. 2007 FBD Tema 4 25 C. P. G. 2007 FBD Tema 4 26

DISTINCT
SELECT * Es lo que ocurre si no
se indica nada

Selecciona todos los atributos de las relaciones de C11: SELECT ALL SALARIO
FROM. FROM EMPLEADO;

SQL no elimina automticamente las tuplas


C1C: SELECT * repetidas:
FROM EMPLEADO Operacin costosa:
WHERE ND=5; Ordenar + Eliminar duplicados
El usuario puede desear ver las tuplas repetidas.
C1D: SELECT *
Usando funciones agregadas nos puede
FROM EMPLEADO, DEPARTAMENTO
interesar no eliminarlos. Ejemplo: Calcular
WHERE NOMBRED=Investigacin AND
salario medio, en lugar del salario medio de los
ND=NMEROD; salarios diferentes.
C10A: SELECT *
FROM EMPLEADO, DEPARTAMENTO;
C11A: SELECT DISTINCT SALARIO
FROM EMPLEADO;

Tambin se puede poner EMPLEADO.* (calificar Si slo nos interesan los salarios distintos.
atributos).

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.

C. P. G. 2007 FBD Tema 4 27 C. P. G. 2007 FBD Tema 4 28


Comparar subcadenas
Operaciones de conjuntos
(LIKE en WHERE)

En SQL existen las operaciones UNION (), Empleados que viven en Houston, estado de Texas:
INTERSECT () y EXCEPT (resta).
Algunos SGBD slo implementan la unin. C12: SELECT NOMBRE, APELLIDO
En este curso slo consideraremos que existe la FROM EMPLEADO
unin para resolver consultas en SQL. WHERE DIRECCIN LIKE %Houston, TX%;
LIKE: Compara una subcadena de caracteres.
Por defecto las tuplas repetidas se eliminan del _ sustituye a un carcter arbitrario.
resultado. % a un n indeterminado de caracteres.
Incluyendo ALL se conservan las repeticiones.
Se exige compatibilidad de unin:
Mismos atributos y mismo orden entre ellos. Empleados que nacieron en la dcada de 1950:

Nmeros de proyecto donde participa Wong como C12A: SELECT NOMBRE, APELLIDO
FROM EMPLEADO
trabajador o como jefe del dpto. controlador:
WHERE FECHA_NCTO LIKE _ _ 5%;

C4: ( SELECT NUMEROP


FROM PROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NMD=NMEROD AND NSS_JEFE=NSS AND
APELLIDO= Wong)
UNION
( SELECT NP AS NUMEROP
FROM TRABAJA_EN, EMPLEADO
WHERE NSSE=NSS AND APELLIDO=Wong );

C. P. G. 2007 FBD Tema 4 29 C. P. G. 2007 FBD Tema 4 30

Operaciones aritmticas y
Conjuntos explcitos de valores y BETWEEN
de concatenacin
Nombre y salario de los empleados que trabajan en NSS de los empleados que trabajan en los proyectos
ProductoX tras aumentarles el sueldo un 10% : 1, 2 3.

C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIO C17: SELECT DISTINCT NSSE


FROM EMPLEADO, TRABAJA_EN, PROYECTO FROM TRABAJA_EN
WHERE NSS=NSSE AND NP=NMEROP AND WHERE NP IN (1,2,3);
NOMBREP=ProductoX;
El conjunto explcito se encierra entre parntesis.

+, -,* y / son operadores aritmticos.


|| concatena cadenas de caracteres.
+, - para sumar/restar a fecha, hora o marca
de tiempo, un intervalo compatible. NSS y salario de los empleados del departamento 5
Se puede calcular un intervalo como diferencia cuyo salario est entre 30.000 y 40.000 $.
entre fechas, horas o marcas de tiempo.
C14: SELECT NSS, SALARIO
Qu devuelve 1.1 * SALARIO cuando FROM EMPLEADO
SALARIO vale null? WHERE ND=5 AND
SALARIO BETWEEN 30000 AND 40000;

Entre 30000 y
40000 ambos
incluidos

C. P. G. 2007 FBD Tema 4 31 C. P. G. 2007 FBD Tema 4 32


Ordenacin de tuplas Valores nulos
(ORDER BY)

Empleados y proyectos donde trabajan ordenados por Nombre y apellido de empleados sin supervisores.
departamento y en cada departamento alfabticamente
por apellido y nombre : C18: SELECT NOMBRE, APELLIDO
FROM EMPLEADO
C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREP WHERE NSS_SUPERV IS NULL;
FROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN, En lugar de = y se usa IS e IS NOT.
PROYECTO
SQL considera el valor nulo de diferente forma.
WHERE NMEROD=ND AND NSS=NSSE AND
NP=NMEROP Las tuplas con valores nulos en el atributo de
ORDER BY NOMBRED, APELLIDO, NOMBREP; reunin no se incluyen en el resultado (salvo en
reunin externa).

Si pusiera WHERE NSS_SUPERV = NULL


Por defecto, el orden es ascendente.
Para las filas con NSS_SUPERV nulo se estara
DESC indica orden descendente. comparando si NULL = NULL.
ASC indica orden ascendente. Esta comparacin NO devuelve cierto.
Tampoco devuelve falso.
ORDER BY NOMBRED DESC, APELLIDO ASC,
La comparacin devuelve NULL (UNKNOWN).
NOMBRE ASC
Una condicin puede NO verificarse
por FALSE o por NULL

Cualquier cosa operada con NULL devuelve NULL


(UNKNOWN).

C. P. G. 2007 FBD Tema 4 33 C. P. G. 2007 FBD Tema 4 34

Tablas reunidas (combinadas)


Seudnimos de atributos
(JOIN en FROM)

Nombre y direccin de los empleados del departa-


C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO, mento de Investigacin.
S.APELLIDO AS NOMBRE_SUPERVISOR
FROM EMPLEADO AS E, EMPLEADO AS S C1: SELECT NOMBRE, APELLIDO, DIRECCIN
WHERE E.NSS_SUPERV = S.NSS; FROM EMPLEADO, DEPARTAMENTO
WHERE NOMBRED=Investigacin AND
ND=NMEROD;
Cambia el nombre de cualquier columna
(atributo) que aparezca en el resultado.
C1A: SELECT NOMBRE, APELLIDO, DIRECCIN
La construccin AS tambin sirve para declarar FROM (EMPLEADO INNER JOIN DEPARTAMENTO
los seudnimos de las tablas. ON ND=NMEROD)
WHERE NOMBRED=Investigacin;

Este concepto se incorpor a SQL2.


SQL1
Se pueden especificar diferentes tipos de
FROM EMPLEADO E reunin:
INNER JOIN (o JOIN)
FROM EMPLEADO AS E SQL2
NATURAL JOIN
OUTER JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN

NO se pueden definir seudnimos de tablas


reunidas:
FROM (EMPLEADO INNER JOIN DEPARTAMENTO ON
ND=NMEROD) AS ED ...

C. P. G. 2007 FBD Tema 4 35 C. P. G. 2007 FBD Tema 4 36


Tablas reunidas (2) Tablas reunidas (3)
(JOIN en FROM) (JOIN en FROM)

C1B: SELECT NOMBRE, APELLIDO, DIRECCIN Nombre y salario de los empleados que trabajan en
FROM (EMPLEADO NATURAL JOIN (DEPARTAMEN- ProductoX tras aumentarles el sueldo un 10% :
TO AS DEPTO(NOMBRED, ND, NSSG,FECHAIG)))
WHERE NOMBRED=Investigacin; Se estn
renombrando
atributos C13A: SELECT NOMBRE, APELLIDO, 1.1*SALARIO
FROM (EMPLEADO INNER JOIN TRABAJA_EN
Renombra DEPARTAMENTO.NMEROD por ND. ON NSS=NSSE) INNER JOIN PROYECTO
Condicin de reunin implcita: ON NP=NMEROP )
EMPLEADO.ND = DEPTO.ND WHERE NOMBREP=ProductoX;

C8B: SELECT E.APELLIDO AS NOMBRE_EMPLEADO,


S.APELLIDO AS NOMBRE_SUPERVISOR Empleados y proyectos donde trabajan ordenados por
FROM (EMPLEADO E LEFT OUTER JOIN departamento y en cada departamento alfabticamente
EMPLEADO S ON E.NSS_SUPERV=SS.NSS);
por apellido y nombre :

C15A: SELECT NOMBRED, APELLIDO, NOMBRE,


C2: SELECT NMEROP, NMD, APELLIDO, DIRECCIN NOMBREP
FROM PROYECTO, DEPARTAMENTO, EMPLEADO
FROM ((DEPARTAMENTO INNER JOIN EMPLEADO
WHERE NMD=NMEROD AND NSS_JEFE=NSS AND ON NMEROD=ND) INNER JOIN TRABAJA_EN
LOCALIZACINP=Stafford;
ON NSS=NSSE) INNER JOIN PROYECTO
C2A:SELECT NMEROP, NMD, APELLIDO, DIRECCIN ON NP=NMEROP
FROM ( (PROYECTO INNER JOIN DEPARTAMENTO ORDER BY NOMBRED, APELLIDO, NOMBREP;
ON NMD=NMEROD)
INNER JOIN EMPLEADO ON NSS_JEFE=NSS )
WHERE LOCALIZACINP=Stafford;

Los INNER JOIN ... ON se pueden anidar

C. P. G. 2007 FBD Tema 4 37 C. P. G. 2007 FBD Tema 4 38

Funciones agregadas Funciones agregadas (2)


Pueden contener
COUNT (cuenta), SUM (suma), expresiones Cuntos empleados hay en la EMPRESA y cuntos
en el departamento Investigacin:
MAX (mximo), MIN (mnimo), AVG (media)
C21: SELECT COUNT(*) * se refiere a tuplas
FROM EMPLEADO;
Suma de salarios de los empleados, junto a salarios
mximo, mnimo y medio: C22: SELECT COUNT(*)
FROM EMPLEADO INNER JOIN DEPARTAMENTO
C19: SELECT SUM(SALARIO), MAX(SALARIO), ON ND=NMEROD
MIN(SALARIO), AVG(SALARIO) WHERE NOMBRED=Investigacin;
FROM EMPLEADO; no cuenta
Cuntos salarios diferentes hay:
el valor nulo
Lo mismo para empleados del dpto. Investigacin: C23: SELECT COUNT(DISTINCT SALARIO)
C20: SELECT SUM(SALARIO), MAX(SALARIO), FROM EMPLEADO;
MIN(SALARIO), AVG(SALARIO)
FROM EMPLEADO INNER JOIN DEPARTAMENTO C23: SELECT COUNT(SALARIO) Cuenta las filas con
ON ND=NMEROD FROM EMPLEADO; salario no nulo
WHERE NOMBRED=Investigacin;
C23: SELECT COUNT(*) Cuenta todas las
FROM EMPLEADO; filas de la tabla
EMPLEADO DEPARTAMENTO
NOMBRE SALARIO ND NOMBRED NMEROD EMPLEADO
C23:
John nulo 5 Investigacin 5 NOMBRE SALARIO ND COUNT(DISTINCT(SALARIO))

Franklin 15.000 5 Administracin 4


... John nulo 5 3
Ramesh ... 10.000 ... 5 Direccin 1 Franklin 15.000 nulo C23:
Joyce 10.000 5 Ramesh
Alicia 10.000 4 Joyce
... 10.000
10.000
... 5
5
COUNT( SALARIO)
SUM(SA- MAX(SA- MIN(SA- AVG(SAL-
C19: 7
Jennifer 20.000 4 LARIO) LARIO) LARIO) ARIO) Alicia 10.000 4
Ahmad 20.000 4 105.000 20.000 10.000 15.000 Jennifer 20.000 4 C23:
COUNT( *)
Jaime 20.000 1 Ahmad 20.000 4
SUM(SA- MAX(SA- MIN(SA- AVG(SAL- Jaime 20.000 1 8
C20: LARIO) LARIO) LARIO) ARIO)

35.000 15.000 10.000 11.666 Qu ocurre cuando todos los salarios valen null?
35.000 / 3
Qu ocurre cuando la tabla est vaca?
C. P. G. 2007 FBD Tema 4 39 C. P. G. 2007 FBD Tema 4 40
Atributos de agrupacin: GROUP BY Atributos de agrupacin: GROUP BY (2)

Obtener el nmero de departamento junto a su nmero Obtener por cada proyecto su nmero y nombre
junto al nmero de empleados que trabajan en l.
de empleados y salario medio:
C25: SELECT NMEROP, NOMBREP, COUNT(*)
C24: SELECT ND, COUNT(*), AVG(SALARIO) FROM PROYECTO INNER JOIN TRABAJA_EN
FROM EMPLEADO ON NMEROP=NP Agrupacin por
GROUP BY ND; varios atributos
GROUP BY NMEROP, NOMBREP;
En GROUP BY est el/los atributo/s de agrupacin.
NOMBREP NMEROP NP HORAS
Atributos de SELECT todos en GROUP BY. PROYECTO
ProductoX 1 1 32.5
INNER JOIN
Atrib. de GROUP BY no obligatorio en SELECT. TRABAJA_EN:
ProductoX 1 1 20.0
ProductoY 2 2 7.5
Se suelen poner en SELECT algunos/todos los de ProductoY 2 2 20.0
GROUP BY. ProductoY 2 2 10.0
EMPLEADO ProductoZ 3 3 40.0
NOMBRE ProductoZ 3 3 10.0
SALARIO ND
Automatizacin 10 ... 10 10.0
John 30.000 5 10 10.0
Automatizacin 10
Franklin 40.000 5 ND COUNT(*) AVG(SALARIO) 10 35.0
Automatizacin 10
Ramesh ... 38.000 ... 5 5 4 33250 20 10.0
Reorganizacin 20
Joyce 25.000 5 4 3 31000 Reorganizacin 20 20 15.0
Alicia 25.000 4 1 1 55000 Reorganizacin 20 20 nulo
Jennifer 43.000 4
Nuevas_prestaciones 30 30 5.0
Ahmad 25.000 4
Fig. 8.4 (a) Nuevas_prestaciones 30 30 20.0
Jaime 55.000 1
Nuevas_prestaciones 30 30 30.0

C25: NMEROP NOMBREP COUNT(*)


Los valores nulos forman su propio grupo. 1 ProductoX 2
2 ProductoY 3
EMPLEADO
3 ProductoZ 2
NOMBRE SALARIO ND ND COUNT(*) AVG(SALARIO)
10 Automatizacin 3
Jon null null null 2 10 20 Reorganizacin 3
Juan 10 null 5 2 10 30 Nuevas_prestaciones 3
Rosa ... 10 ... 5
Ana 10 5 En C25, se podra eliminar NOMBREP del GROUP BY?
C. P. G. 2007 FBD Tema 4 41 C. P. G. 2007 FBD Tema 4 42

Condicin para cada grupo: HAVING WHERE vs. HAVING

Obtener por cada proyecto su nmero y nombre


Lo mismo que antes pero slo para aquellos junto al nmero de empleados del departamento 5
proyectos donde trabajen ms de 2 personas. que trabajan en l.
C26: SELECT NMEROP, NOMBREP, COUNT(*) C27: SELECT NMEROP, NOMBREP, COUNT(*)
FROM PROYECTO INNER JOIN TRABAJA_EN FROM (PROYECTO INNER JOIN TRABAJA_EN
ON NMEROP=NP ON NMEROP=NP) INNER JOIN
GROUP BY NMEROP, NOMBREP EMPLEADO ON NSS=NSSE
HAVING COUNT(*)>2; WHERE ND=5
GROUP BY NMEROP, NOMBREP;

PROYECTO NOMBREP NMEROP NP HORAS


INNER JOIN PROYECTO NOMBREP NMEROP NP ND
ProductoX 1 1 32.5
TRABAJA_EN: NO INNER JOIN ProductoX 1 1 5
ProductoX 1 1 20.0 TRABAJA_EN
ProductoY 2 2 7.5 ProductoX 1 1 5
INNER JOIN
ProductoY 2 2 20.0 ProductoY 2 2 5
EMPLEADO:
ProductoY 2 2 10.0 ProductoY 2 2 5
ProductoZ 3 3 40.0 ProductoY 2 2 5
NO ProductoZ 3 3 5
ProductoZ 3 3 10.0
Automatizacin 10 ... 10 10.0 ProductoZ 3 ... 3 ... 5
Automatizacin 10 10 10.0 Automatizacin 10 10 5
Automatizacin 10 10 35.0 Automatizacin 10 10 4 NO
Reorganizacin 20 20 10.0 Automatizacin 10 10 4
Reorganizacin 20 20 15.0 Reorganizacin 20 20 5
Reorganizacin 20 20 nulo Reorganizacin 20 20 4
Nuevas_prestaciones 30 30 5.0 Reorganizacin 20 20 1
Nuevas_prestaciones 30 30 4 NO
Nuevas_prestaciones 30 30 20.0
Nuevas_prestaciones 30 30 30.0 Nuevas_prestaciones 30 30 4
Nuevas_prestaciones 30 30 4
C26: NMEROP NOMBREP COUNT(*)
C27: NMEROP NOMBREP COUNT(*)
2 ProductoY 3
10 Automatizacin 3 1 ProductoY 2
20 Reorganizacin 3 2 ProductoY 3
30 Nuevas_prestaciones 3 3 ProductoZ 2
10 Automatizacin 1
20 Reorganizacin 1
C. P. G. 2007 FBD Tema 4 43 C. P. G. 2007 FBD Tema 4 44
Primero WHERE, despus HAVING

Cuntos empleados hay con salario mayor que 25.000


por departamento. Slo departamentos con ms de 2
empleados con tal sueldo.
C28: SELECT NOMBRED, COUNT(*)
FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
ND = NMEROD
WHERE SALARIO>25000
GROUP BY NOMBRED
HAVING COUNT(*) > 2;

EMPLEADO NOMBREP SALARIO ND NOMBRED


Ejercicios
INNER JOIN John 30.000 5 Investigacin
DEPARTA-
MENTO:
Franklin
Ramesh
Joyce ...
40.000
38.000
25.000 ...
5
5
5 ...
Investigacin
Investigacin
Investigacin ...
SQL
Alicia 25.000 4 Administracin
Jennifer 43.000 4 Administracin
Primero Ahmad 25.000 4 Administracin
se ejecuta Jaime 55.000 1 Direccin
WHERE
...
NOMBREP SALARIO ND NOMBRED
INNER JOIN
... WHERE John 30.000 5 Investigacin
SALARIO Franklin ... 40.000 ... 5 ... Investigacin ...
>25000: Ramesh 38.000 5 Investigacin
Jennifer 43.000 4 Administracin NO
Jaime 55.000 1 Direccin NO
Despus
se ejecuta
NOMBRED COUNT(*)
HAVING
Investigacin 3

C. P. G. 2007 FBD Tema 4 45 C. P. G. 2007 FBD Tema 4 46

Itinerarios Itinerarios (2)

Marca Matricula Codigo


CREATE TABLE VEHICULO (
Nombre Moneda Cod-bast INTEGER NOT NULL,
Clase Cod-bast
Marca VARCHAR (15),
VEHICULO PAIS Matricula VARCHAR (8) NOT NULL,
1 Clase VARCHAR (8),
M
Fecha PRIMARY KEY (Cod-bast),
V_I De P_C
donde UNIQUE (Matrcula));
N 1
N N
N A 1 CREATE TABLE PAIS (
ITINERARIO donde CIUDAD
Codigo INTEGER NOT NULL,
M N
Por Nombre VARCHAR (15) NOT NULL,
Cod_iti donde
pasa Nombre Cod-c Moneda VARCHAR (10),
Dieta
Habit
Orden

1. Completa las instrucciones de creacin de la BD para el


CREATE TABLE ITINERARIO (
esquema ER anterior.
Cod-iti INTEGER NOT NULL,
2. Incluir el itinerario (111, 50000, 95, 141) que sale de Dieta INTEGER,
Sevilla (95, "Sevilla", 500000, 34) y llega a Friburgo (141, Cod-dedonde INTEGER,
Cod-adonde INTEGER,
"Friburgo", 300000, 49), pasando por Zaragoza (93,
PRIMARY KEY (Cod-iti),
"Zaragoza", 450000, 34), Pars (16, "Pars", 6000000, 33) y FOREIGN KEY (Cod-dedonde) REFERENCES CIUDAD (Cod-c)
Karlstadt (148, "Karlstadt", 200000, 49). Los pases ON DELETE CASCADE ON UPDATE CASCADE,
correspondientes son Espaa (34, "Espaa", "Peseta"), FOREIGN KEY (Cod-adonde) REFERENCES CIUDAD (Cod-c)
ON DELETE CASCADE ON UPDATE CASCADE);
Francia (33, "Francia", "Franco") y Alemania (49,
"Alemania", "Marco"). Ninguno de los datos est en la BD. CREATE TABLE CIUDAD (
3. Todos los itinerarios que pasan por Sevilla (solo pasar, no Cod-c INTEGER NOT NULL,
Nombre VARCHAR (15) NOT NULL,
salir o llegar) se han desviado por Crdoba. Los datos de
Habit INTEGER,
Crdoba (957, Crdoba, 134000, 34) no estn en la BD. Codigo INTEGER,
4. El vehculo con n de bastidor 3 ha tenido un accidente y lo
han llevado a la chatarra. Se ha cambiado el vehculo a los
itinerarios donde figuraba por (345, "Renault", "BI-9999-
XX", "Express"), que no est an en la BD.
C. P. G. 2007 FBD Tema 4 47 C. P. G. 2007 FBD Tema 4 48
Itinerarios (3) Ejercicio sobre R.I.

CREATE TABLE VEHI-ITINE ( Analizar todas las R.I. violadas por cada operacin cuando
Cod-bast INTEGER NOT NULL,
Cod-iti INTEGER NOT NULL,
se ejecuta sobre la BD de la figura siguiente:
Fecha DATE,
PRIMARY KEY (Cod-bast, Cod-iti), a. INSERT INTO CUENTA VALUES (7, 7, 20000, null, null)
FOREIGN KEY (Cod-bast) REFERENCES VEHICULO (Cod-bast)
ON DELETE CASCADE ON UPDATE CASCADE, b. INSERT INTO CLIENTE VALUES (123, Pepi, null, null)
FOREIGN KEY (Cod-iti ) REFERENCES ITINERARIO (Cod-iti)
c. INSERT INTO CUENTA-CLIENTE VALUES (4, null)
ON DELETE CASCADE ON UPDATE CASCADE);
d. INSERT INTO CUENTA VALUES (10, 4, 100000, 2, 3)
CREATE TABLE POR-DONDE (
Cod-iti INTEGER NOT NULL, e. DELETE FROM CLIENTE WHERE DNI=999
Cod-c INTEGER NOT NULL,
Orden INTEGER, f. DELETE FROM CUENTA-CLIENTE WHERE NCta=0 and
DNI>000
g. UPDATE CUENTA-CLIENTE SET NCta=5, DNI=111
FOREIGN KEY (Cod-c) REFERENCES CIUDAD (Cod-c)
WHERE NCta=0 and DNI=111
ON DELETE CASCADE ON UPDATE CASCADE);
h. UPDATE CUENTA-CLIENTE SET NCta=3, DNI=222
WHERE NCta=0
i. UPDATE CLIENTE SET Nombre=Ataulfo A. WHERE
DNI>888
j. UPDATE CUENTA SET Banco=2, NSuc=2 WHERE NCta=0
k. UPDATE CUENTA SET Banco=2 WHERE Banco=1
l. UPDATE CUENTA SET Banco=null, NSuc=null WHERE
Banco=1
m. UPDATE CUENTA SET Banco=null WHERE NCta=3

C. P. G. 2007 FBD Tema 4 49 C. P. G. 2007 FBD Tema 4 50

Ejercicio sobre R.I. (2)


Elmasri & Navathe 8.13 (7.18)
BANCO CLIENTE
Cdigo Nombre Dir DNI Nombre Dir Tfno
1 BBVA Gran Va, 17 111 Juan Legazpi, 1 111111
2 Santander Espoln, 1 222 Pedro Guridi, 5 222222
2101 Kutxa Garibai, 6 333 Gaizka Lardizabal, 1 333333 EMPLEADO
2102 BBK Salaberra, 3 444 Luisa Nagusia, 2 444444
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIN SEXO ...
SUCURSAL 555 Ceferina Elkano, 3 555555
Banco NSuc Ciudad 666 Yolanda Av. Madrid, 9 666666 ... SALARIO NSS_SUPERV ND
1 1 Bilbao 777 Segismundo H. Corts, 9 777777
1 2 S. Sebastin 888 Ataulfo Cervantes, 1 888888
1 3 Vitoria 999 Teodorico Velzquez, 7 999999 DEPARTAMENTO
2 1 Santander 000 Atenea Sorolla, 13 101010 NOMBRED NMEROD NSS_JEFE FECHA_INIC_JEFE
2 2 S. Sebastin CUENTA
2101 1 S. Sebastin NCta Inters Saldo Banco NSuc LOCALIZACIONES_DEPT
2101 2 Pasajes 1 1 20000 1 1
2102 1 Bilbao 2 1 30000 1 2 NMEROD LUGARD
2102 2 Sestao PRSTAMO- 3 1 40000 1 3
CLIENTE
2102 3 Portugalete NPres DNI 4 2 30000 2 1 PROYECTO
CE 5 2 40000 2 2
0 111 NOMBREP NMEROP LOCALIZACINP NMD
CUENTA- 6 3 50000 2101 1
CLIENTE 0 000
NCta DNI 1 111 7 3 60000 2101 2
8 3 60000 2102 1 TRABAJA_EN
0 111 2 111
0 222 2 222 9 4 70000 2102 2 NSSE NMP HORAS
0 555 3 111 0 4 80000 2102 3
CE
0 000 3 333 DEPENDIENTE
1 111 ... 4 111 PRSTAMO NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO
2 111 6 333 4 444 NPres TAE Importe Banco NSuc
2 222 6 666 5 111 1 10 200000 1 1
3 111 7 111 5 555 2 10 300000 1 2
3 333 7 777 6 111 3 10 400000 1 3 Figura 7.7 Restricciones de integridad referencial
4 111 8 111 6 666 4 20 300000 2 1 representadas en el esquema de la base de
4 222 8 222 7 111 5 20 400000 2 2
datos relacional EMPRESA.
4 444 8 444 7 777 6 30 500000 2101 1
5 111 8 888 8 111 7 30 600000 2101 2
5 555 9 111 8 888 8 30 600000 2102 1
6 111 9 333 9 111 9 40 700000 2102 2
6 222 9 999 9 999 0 40 800000 2102 3
... CE CE CE CE CE

C. P. G. 2007 FBD Tema 4 51 C. P. G. 2007 FBD Tema 4 52


Elmasri & Navathe 8.13 (7.18) (2) Elmasri & Navathe 8.11 (7.23)

Sobre el esquema de BD de la figura 7.7: a. Nmero de copias de La tribu perdida en la


sucursal de Sharpstown.
a. Empleados del departamento 5 que trabajan ms de 10 b. Identificador de sucursal y nm. de copias del libro
horas/semana en el proyecto ProductoX. La tribu perdida en cada una de las sucursales.
NO:
b. Empleados con un dependiente con su mismo nombre de c. Nombres de lectores sin libros en prstamo. EXCEPT

pila. d. Ttulo del libro, nombre y direccin del lector de


los prstamos de la sucursal de Sharpstown con
c. Empleados cuyo jefe directo es Franklin Wong. fecha de devolucin la de hoy.
d. Nombre de cada proyecto junto al nmero total de horas e. Por cada sucursal: Nombre y total de ejemplares de
trabajadas por los empleados en l. libro en prstamo.
f. Para los lectores con ms de 5 libros en prstamo,
e. Nombres de todos los empleados que trabajan en cada obtener su nombre, direccin y n de libros.
uno de los proyectos(nombre del proyecto). Nota: Si lo g. Por cada libro escrito total o parcialmente por
entendemos como empleados que trabajan en todos los Stephen King, obtener su ttulo y el n de copias en
proyectos sera divisin y no lo podramos hacer.
NO:
divisin
la sucursal Central.
f. Empleados que no trabajan en ningn proyecto. NO:
EXCEPT LIBRO AUTORES_LIBROS
g. Nombre de cada departamento junto al salario medio de IdLibro Ttulo NombreEditorial IdLibro NombreAutor
los empleados asignados al mismo. EDITORIAL COPIAS_LIBRO
h. Salario medio de las empleadas de la EMPRESA Nombre Direccin Telfono IdLibro IdSucursal NmCopias
PRSTAMOS
i. Nombre y direccin de los empleados que trabajan en
IdLibro IdSucursal NmTarjeta FechaSale FechaDevol
algn proyecto situado en Houston pero cuyo NO:
anidados
departamento no est situado all. SUCURSAL
IdSucursal NombreSucursal Direccin
j. Gerentes de departamento sin dependientes. NO:
EXCEPT
BD
LECTOR BIBLIOTECA
NmTarjeta Nombre Direccin Telfono

C. P. G. 2007 FBD Tema 4 53 C. P. G. 2007 FBD Tema 4 54

Ms ejercicios sobre el esquema de BD de


Elmasri & Navathe 8.11 (7.23)
Elmasri & Navathe 8.16
a. Tiempo medio que duran los prstamos de libros (en
conjunto). a. Nombres de los estudiantes de 1 de la carrera CS
b. Tiempo medio que duraron los prstamos de libros (en b. Nombre de los cursos impartidos por el profesor
conjunto) que se prestaron el ao pasado. Anderson en los aos 1998 y 99.
c. Nmero total de prstamos, nmero de socios de la biblioteca c. Para cada seccin impartida por el profesor
Anderson, obtener el cdigo de curso, semestre, ao
que han tomado libros en prstamo y nmero medio de libros
y nmero de estudiantes que tomaron la seccin.
que han tomado en prstamo los socios.
d. Nombre y boletn de notas de los estudiantes de 1 de
N medio de libros= N total prstamos / N lectores distintos CS. El boletn incluye el nombre y cdigo del curso,
d. Nmero medio de copias por libro de la biblioteca central los crditos, el semestre, el ao y las notas de los
cursos aprobados (nota A,B C) por el estudiante.
(en conjunto).
e. Nombres y departamentos de carrera de los estudian-
e. Nmero de prstamos de cada socio (basta indicar su nmero tes calificados con nota A en todos sus cursos. NO: EXCEPT

de tarjeta) que ha llevado prstamos. f. Nombres y departamentos de carrera de los estudian-


NO:
f. Nmero de prstamos por socio para todos los socios tes que NO tengan nota A en ningn curso. EXCEPT

(incluyendo los que no han llevado prstamos). ALUMNO


g. Identificador de libro junto al nmero de veces que ha sido Nombre Cdigo Alumno Ao Especialidad
prestado. CURSO
h. Identificadores de cada libro y sucursal junto al nmero de Nombre Curso Cdigo Curso Crditos Departamento
veces que ha sido prestado el libro en la sucursal.
REQUISITO
i. Para cada libro: identificador de libro y nmero de autores. Cdigo Curso Cdigo Requisito Fig 1.2 (pg. 7)
j. Para cada libro: ttulo y nmero de autores.
SECCION
k. Para cada da del mes pasado en el que hubiera prstamos, Identificador Seccin Cdigo_Curso Semestre Ao Profesor
nmero de libros distintos que se prestaron ese da.
INFORME_CALIFICACIONES
Cdigo Alumno Identificador Seccin Calificacin

C. P. G. 2007 FBD Tema 4 55 C. P. G. 2007 FBD Tema 4 56


Ejercicios sobre el esquema ER de
Elmasri &Navathe Pg. 66 (salvo SUCURSAL.Ciudad) Ejercicio de consultas en SQL

(1,1) (0,N)
a. Datos de todos los bancos. EJEMPLAR ESTA_EN BIBLIOTECA
(0,N)
b. Direcciones de todos los bancos. Da
PRESTAMO FechaPrstamo Mes
c. DNI de los clientes que viven en la calle Urbieta. Ao
(0,N)
d. Diferentes TAE ofrecidos por el banco sito en la SOCIO
Plaza Circular 1. Puede haber varios
ejemplares con el
e. Datos de los clientes junto a los datos de todas sus BIBLIOTECA COD_BIB FACULTAD TFNO BIBLIOTECARIA mismo ttulo

cuentas. EJEMPLAR COD_EJE TTULO AUTOR EDITORIAL REA COD_BIB

SOCIO DNI NOM_SOCIO TFNO CIUDAD CARRERA


f. Datos de los clientes con cuenta en un banco que
PRSTAMO DNI COD_EJE DA MES AO DIAS_PRESTADO
tenga sucursal en Andoain.
g. Insertar la tupla (12, 123) en CUENTA_CLIENTE. Escribe las siguientes consultas en SQL sobre la BD anterior:
h. El banco BBK ha cambiado su direccin a Arenal a. Pares de ttulos del rea de informtica sacados en prsta-
18. Introducir la modificacin en la BD. mo por el mismo socio. Posible salida:
ttulo ttulo
BANCO SUCURSAL Fundamentos de BD BD:, Qu gozada!
Fundamentos de BD SQL para novatos
Cdigo Nombre Dir Banco NmSucursal Ciudad BD:, Qu gozada! Fundamentos de BD

CUENTA
b. Ttulos junto al nmero total de prstamos en cada ao
NmCta Inters Saldo Banco NmSucursal
entre 1990 y 2000. Slo aparecern si se han prestado al
CLIENTE menos a diez socios distintos en el mismo ao (evitando
que un socio sesgue la estadstica al tomar un ttulo varias
DNI Nombre Dir Tfno veces).
ttulo ao total de prstamos
PRSTAMO
Fundamentos de BD 1997 43
NmPrs TAE Importe Banco NmSucursal Fundamentos de BD 2000 59
BD:, Qu gozada! 1987 57
CUENTA_CLIENTE PRSTAMO_CLIENTE BD:, Qu gozada! 1993 34
NmCta DNI NmPrs DNI
C. P. G. 2007 FBD Tema 4 57 C. P. G. 2007 FBD Tema 4 58

Ejercicio de consultas en SQL (2) Consultas sobre la BD BUQUES

Escribe las siguientes consultas en SQL sobre la BD anterior: 2. Nombres de aquellos buques que, en el mismo da, hayan
c. Lista de pares ordenados de bibliotecas que tengan salido de un puerto y llegado a otro puerto situado en un
ejemplares de libros de la misma rea. Por ejemplo, si las mar distinto al del puerto de partida, junto al nombre de
bibliotecas A, B y C tienen libros de informtica y las bi- los mares visitados.
bliotecas A y C de filosofa, debern aparecer:
<A,B,Informtica>, <A,C,Informtica>, 3. Nmero de pases visitados por cada buque que haya
<A,C,Filosofa>, <B,A,Informtica>,
visitado algn puerto.
<B,C,Informtica>, ...

4. Nombres de aquellos buques que hayan ido, en menos de


5 das, desde el puerto de Santander al de Cdiz,
habiendo hecho escala en el puerto de Vigo.

7. Informacin de todas las visitas de buques con puerto de


origen Detroit junto a la informacin de su visita anterior
al mismo puerto de esa visita.

8. N de veces que han ido a Cdiz cada uno de los buques


cuyo tonelaje es mayor que 1000.

C. P. G. 2007 FBD Tema 4 59 C. P. G. 2007 FBD Tema 4 60