Vous êtes sur la page 1sur 5

EJERCICIOS DE SQL

Considerar las siguientes tablas:

EMPLEADO: ( DniEmp, NomEmp, SexEmp, FecNac, FecAlt, SalEmp, CodSuc, Dir )


SUCURSAL: ( CodSuc, DirSuc, TelSuc )
CUENTA: ( NumCta, FecApe, CodSuc )
CLIENTE: ( DniCli, NomCli, DirCli, TelCli )
TITULAR: ( NumCta, DniCli, NumOrd )
CAJERO: ( CodCaj, TipCaj, CodSuc )
OPERACIÓN: ( CodCaj, FecOpe, HorOpe, TipOpe, DesOpe, ImpOpe, NumCta )

Realizar las siguientes consultas:

1. Número de todas las cuentas corrientes ( NumCta ) de la sucursal número 2 ordenadas por fecha
de apertura ( FecApe ).

2. El número de todas las cuentas corrientes del cliente con DNI 44444444 y el orden de titularidad.

3. El número de todas las cuentas corrientes del cliente que se llama Pedro del Valle y el orden de
titularidad.

4. El DNI y nombre de todos los clientes que tienen cuenta en la sucursal número 4, ordenado por
nombre.

* 5. El saldo de la cuenta número 6.

* 6. El número y saldo de todas las cuentas de la sucursal número 4.

* 7. Listado de clientes ( DNI y nombre ) con el saldo total ( suma de saldos ) de todas sus cuentas
corrientes, ordenado por nombre.

* 8. Todas las sucursales ( número ) y su saldo total ( suma de los saldo de todas sus cuentas ) ordenado
descendentemente por el saldo.

9. Todas las fechas que hay operaciones junto con el saldo global del banco acumulado hasta esa
fecha.

# 10. Todos los clientes (DNI y nombre) junto con el número de cuentas corrientes que tienen (¿Cuántas
tienen?), el saldo máximo y la suma de los saldos ordenado por el número de cuentas que tienen
descendentemente; y para todos aquellos que tienen el mismo número de cuentas, ordenados por
nombre ascendentemente.

11. Todos los clientes (DNI) junto con el número de cuentas corrientes que tienen; pero sólo aquellos
clientes que tienen más de una cuenta corriente.

# 12. Todas las cuentas corrientes ( número ) cuyo saldo sea superior a la media de saldos de la misma
sucursal.

13. Estraer las cuentas en las que no han hecho ninguna operación en un cajero de la sucursal de la
cuenta.

14. Extraer un listado de todas las sucursales ( número ) junto con el número de empleados de dicha
sucursal; ordenado por el número de empleados

15. Extraer un listado de todas las sucursales ( número ) junto con el número de empleados masculinos
y el número de empleados femeninos.

16. Extraer un listado de clientes ( DNI y nombre ) junto con el nombre del director de la sucursal de
todas aquellas cuentas en las que el cliente es el primer titular.

Nota: * = Dos versiones; utilizando una vista y sin utilizarla; # = Sólo utilizando vistas.
EJERCICIOS DE SQL ( HOJA 2)
Considerau el següent model Entitat Relació:

TEMA
N
Tema-Pel·lícula
M
N Produeix 1
PEL·LÍCULA PRODUCTORA
N
Dirigeix
M
DIRECTOR

Que produeix les següents relacions:


TEMA: ( CodiTema, Nom )
PELÍCULA: ( CodiPel·lícula, Títol, AnyEstreno, Duració, CodiProductora )
PRODUCTORA:( CodiProductora, Nom )
DIRECTOR: ( CodiDirector, Nom, Nacionalitat, DataNaixement )
TEMA-PELI: ( CodiTema, CodiPel·lícula )
DIRIGEIX: ( CodiPel·lícula, CodiDirector )

1. Expressar la següent consulta en SQL:


Per a cada tema i any d’estreno, informar el nombre de pel·lícules estrenades sobre aquest tema
en aquell any.
2. Expressar la següent consulta en SQL:
Per a cada tema informar el nom del tema, el títol i any d’estreno de cada pel·lícula que versi
sobre ell, i el nom de la productora que l’ha produit. Donar el resultat ordenat per nom del tema i
any d’estreno de la pel·lícula.
3. Expressar la següent consulta en SQL:
Informar de les pel·lícules ( Codi i títol ) que tenen més duració que la mitjana de les pel·lícules
de la mateixa productora i any de publicació.
EJERCICIOS SQL ( HOJA 3 )

Para que un alumno ingrese en la Universidad, debe realizar una preinscripción, especificando a qué
estudios desea acceder en orden de preferencia.

Dicha información se guarda en una base de datos cuyo modelo de datos responde al siguiente diagrama:

ALUMNO

N
Preinscripción Orden,
Admitid
M o
ESTUDIO

Pasando el modelo de datos a relacional obtenemos:


ALUMNO: (DNI, Nombre, Nota, Isla)
ESTUDIO: (Código, Nombre, Nota de corte )
PREINSCRIPCION: (DNI, Código, Orden, Admitido)

Por otro lado, su implementación en SQL corresponde a:

CREATE TABLE ALUMNO
( DNI  Varchar2( 9 ),
  NOM  Varchar2( 40 ),
  ILLA Varchar2( 3 )
       CHECK ( ILLA IN (‘MA’, ‘ME’, ‘IB’, ‘FO’) ),
  NOTA Number
);
CREATE TABLE PREINSCRIPCION
( DNI  Varchar2( 9 ),
  COD  Varchar2( 4 ),
  ORD  Number( 2 ),
  ADM  Varchar2( 1 ) CHECK ( ADM IN ( ‘S’, ‘N’) )
);
CREATE TABLE ESTUDIO
( COD  Varchar2( 4 ),
  NOM  Varchar2( 20 ),
  NOTA Number
);
Nota: El atributo ‘Nota de corte’ de la entidad ESTUDIO indica la nota mínima para acceder a estos
estudios. Sin embargo hay alumnos que tienen acceso directo por otras causas (por ejemplo por aprobar
las pruebas de mayores de 25 años); por tanto se considera que un alumno està admitido en un estudio si
el atributo ‘Admitido’ de la relación ‘Preinscripción’ es igual a ‘S’.

1) Extraer el DNI y nombre de todos los alumnos junto con el nombre del estudio donde han sido
admitidos ordenados por estudios.
2) Extraer el DNI y nombre de todos los alumnos que no han sido admitidos en ningún estudio
ordenados por DNI.
3) Extraer todos los estudios junto con el número de alumnos que lo han solicitado en primera
preferéncia, ordenado descendentemente por el número de alumnos.
4) Extraer todos los alumnos (DNI y nombre) cuya nota sea igual o superior a la nota media de todos
los alumnos que viven en la misma isla.
5) Enunciar las instrucciones SQL necesarias para crear las claves primarias, externas y los índices
que creáis convenientes del ejemplo.
6) Suponer que al crear la clave primaria de la tabla de alumnos da error porque existen DNI’s
duplicados. Dar la sentencia SQL para listar los DNI’s duplicados ( es decir, que existen dos o más
registros diferentes en a tabla de alumnos con el mismo DNI). Evidentemente, al listar los DNI’s
no deben salir duplicados.
7) Escribir un procedimiento PL/SQL sin parámetros de entrada, que actualice el campo ‘Admitido’
según las siguientes reglas:
 Un alumno será admitido en un estudio siempre que su nota sea superior a la nota de corte.
 Un alumno sólo es admitido en un estudio. Si un alumno puede ser admitido en más de un
estudio, sólo se le admintirá en aquél que corresponda a su preferéncia más baja en orden.
EJERCICIOS SQL ( HOJA 4 )

Considerar el siguiente modelo de datos que corresponde a los préstamos de libros de una biblioteca:

1 N N 1
LIBRO PRÉSTAMO SOCIO

Este modelo genera la siguiente definición de tablas:

CREATE TABLE LIBRO
( ISBN       Number( 10 ),   ­­ Código identificativo del libro
  Titulo     Varchar2( 70 ), ­­ Título del libro
  Editorial  Varchar2( 40 ), ­­ Nombre de la editorial del libro
  NumPaginas Number( 4 ),    ­­ Número de páginas del libro
  CONSTRAINT pk_libro PRIMARY KEY ( ISBN )
);

CREATE TABLE PRESTAMO
( ISBN            Number( 10 ),   ­­ Código del libro prestado
  DNI             Varchar2( 11 ), ­­ DNI del socio que se lleva el
                                  ­­  libro
  FechaPrestamo   DATE,           ­­ Fecha del préstamo
  FechaDevolucion DATE,           ­­ Fecha prevista de devolución
  Devuelto Varchar2( 1 )          ­­ Indica si está devuelto o no
  CONSTRAINT ck_devuelto CHECK ( Devuelto IN ( ‘S’, ‘N’ ) ),
  CONSTRAINT pk_prestamo PRIMARY KEY ( ISBN, DNI, FechaPrestamo )
);

CREATE TABLE SOCIO
( DNI     Varchar2( 11 ),  ­­ DNI del socio
  Nombre  Varchar2( 70 ),  ­­ Nombre completo del socio
  CONSTRAINT pk_socio PRIMARY KEY ( DNI )
);

Realizar las siguientes consultas en SQL sobre las tablas anteriores:

1) Listar el DNI y Nombre de todos los socios que tienen algún libro en préstamo junto con el
número total de libros que tienen en préstamo.

2) Listar el ISBN y Título de todos aquellos libros que están en préstamo y ya deberían estar
devueltos; visualizar también el DNI del socio que lo tiene y las fechas de préstamo y de
devolución. Ordenar la lista descendentemente por el tiempo que hace que lo tenía que haber
devuelto ( los que haga más tiempo que lo tenían que haber devuelto deben salir los primeros ).

3) Definiendo las vistas que se crean necesarias, extraer el ISBN y título del libro que se ha prestado
más veces.
EJERCICIOS SQL ( HOJA 5 )

Considerar el siguiente modelo de tablas en SQL de una tienda de comestibles

CREATE TABLE ALIMENTO
( REFERENCIA   VARCHAR2(13) CONSTRAINT PRIMARY KEY, /* Referencia del producto     */
NOMBRE       VARCHAR2(50) NOT NULL,               /* Nombre del producto         */
PRECIO       NUMBER       NOT NULL                /* Precio del producto         */
);
CREATE TABLE PROVEEDOR
( NIF          VARCHAR2(11) CONSTRAINT PRIMARY KEY, /* NIF del proveedor           */
NOMBRE       VARCHAR2(50) NOT NULL                /* Nombre del proveedor        */
);
CREATE TABLE ALBARAN
( CODIGO       NUMBER(5)    CONSTRAINT PRIMARY KEY, /* Código del albaran          */
NIF_PRO      VARCHAR2(11) NOT NULL,               /* NIF del proveedor           */
FECHA        DATE         NOT NULL,               /* Fecha del albaran           */
FACTURADO    VARCHAR2(1)  NOT NULL,               /* ¿ Está facturado ?          */
CONSTRAINT   CHECK ( FACTURADO IN ( ‘S’, ‘N’ ) )
CONSTRAINT   FOREIGN KEY ( NIF_PRO ) REFERENCES PROVEEDOR ( NIF )
);
CREATE TABLE LINEA_ALBARAN
( CODIGO_ALB   NUMBER(5)    NOT NULL,               /* Código del albaran          */
REFERENCIA   VARCHAR2(13) NOT NULL,               /* Referencia del producto     */
KILOS        NUMBER       NOT NULL                /* Kilos de producto           */
PRECIO       NUMBER           NULL,               /* Precio del kilo de producto */
CONSTRAINT   PRIMARY KEY ( CODIGO_ALB, REFERENCIA ),
CONSTRAINT   FOREIGN KEY ( CODIGO_ALB ) REFERENCES ALBARAN ( CODIGO ),
CONSTRAINT   FOREIGN KEY ( REFERENCIA ) REFERENCES ALIMENTO ( REFERENCIA )
);
CREATE TABLE VENTA
( CODIGO       NUMBER(8)    CONSTRAINT PRIMARY KEY, /* Código de la venta          */
REFERENCIA   VARCHAR2(13) NOT NULL,               /* Referencia del producto     */
FECHA        DATE         NOT NULL,               /* Fecha de la venta           */
KILOS        NUMBER       NOT NULL,               /* Kilos vendidos del producto */
PRECIO       NUMBER       NOT NULL,               /* Precio el kilo de producto  */
CONSTRAINT   FOREIGN KEY ( REFERENCIA ) REFERENCES ALIMENTO ( REFERENCIA )
);

Las entradas de alimentos en la tienda quedan registradas en los albaranes; mientras que las
salidas de alimentos quedan registradas por las ventas; de esta forma las existencias de un
producto se calculan como la diferencia entre las entradas y las salidas.

1) Realizar el modelo entidad-relación del cual provienen estas tablas, incluyendo los
atributos.

2) Calcular en álgebra relacional, en cálculo relacional y en SQL las siguientes consultas:


 Obtener la referencia y el nombre de todos los alimentos que nos ha servido el
proveedor que se llama “MercaFruita”
 Extraer el código del albaran y el nombre del proveedor de todos aquellos albaranes
facturados que tienen alguna línea sin especificar el precio.

3) Realizar en SQL las siguientes consultas:


 Extraer las referencias de los alimentos junto con el último precio de algún albarán de
entrada de este producto. Si se desea se puede crear una vista.
 Calcular el estoc de la tienda. Extraer la referencia del alimento, el nombre y el número
de kilos que hay.

4) Crear los triggers necesarios para garantizar que todo albarán facturado tiene todas sus
líneas con precio.

Vous aimerez peut-être aussi