Sei sulla pagina 1di 9

1.

Considere el esquema relacional BIBLIOTECA que sirve para llevar el


control de libros, lectores y prstamos de libros. Realice las siguientes
consultas sobre los datos, ocupando funciones de agregacin:
a) Cuntos libros posee actualmente la sucursal Santa Tecla de la
biblioteca?
select count(Id_Libro) as NoLibrosSucursalSantaTecla from Copias_Libro where
Id_Sucursal=2

b) Cuntos libros de la editorial PEARSON existen en toda la biblioteca?


select count(Id_Libro) as NoLibrosPearson from Libro where Cod_Ed=100006
c) Cuntos prstamos ha hecho hasta el momento la sucursal Central de
la biblioteca?
select count(Id_Prestamo)as NoPrestamosBibliotecaCentral from Prestamo
where Id_Sucursal=1
d) Cuntas copias del libro PROGRAMACION DE GRAFICOS 3D posee la
biblioteca de la sucursal Santa Tecla?
select sum(Num_Copias) as NoCopiasLibroSucursalSantaTecla from
Copias_Libro C_L inner join Sucursales_Biblioteca S_B on
C_L.Id_Sucursal=S_B.Id_Sucursal inner join Libro L on
C_L.Id_Libro=L.Id_libro where C_L.Id_Sucursal=2 and titulo like '%Graficos%'
e) Cuntas copias del libro PROGRAMACION DE GRAFICOS 3D posee
cada una de las sucursales de la biblioteca?
select nombre_Sucursal, sum(Num_Copias) as
NoCopiasLibroSucursalSantaTecla from Copias_Libro C_L inner join
Sucursales_Biblioteca S_B on C_L.Id_Sucursal=S_B.Id_Sucursal inner join
Libro L on C_L.Id_Libro=L.Id_libro where titulo like '%Graficos%' group by
Nombre_Sucursal

f) Para cada sucursal de biblioteca obtenga su nombre y el cdigo total de


libros que ha prestado hasta hoy.
select nombre_Sucursal, count(Id_Prestamo) as Codigo_Total from
Sucursales_Biblioteca S_B inner join Prestamo P on
S_B.Id_Sucursal=P.Id_Sucursal where Fecha_Salida between '25/02/2008' and
'23/10/2015' group by Nombre_Sucursal

g) De todos los lectores que han prestado ms de dos libros, obtenga sus
nombres, direcciones y el nmero total de libros prestados hasta la
fecha
select Nombre_Lector, Direccion_Lector,(select count(*) from Prestamo where
Prestamo.Num_Tarjeta=Lector.Num_Tarjeta) as Prestados from Lector where
(select count(*) from Prestamo where Fecha_Salida between '25/02/2008' and
'23/10/2015' and Lector.Num_Tarjeta=Prestamo.Num_Tarjeta)>2
h) Genere un listado con el nombre del libro y el nombre de lector de todos
aquellos libros que se hayan prestado entre el 01/03/2009 y el
30/04/2009
select ttulo, Nombre_Lector from Libro L inner join Detalle_Prestamo D_P
onL.Id_libro=D_P.Id_Libro inner join Prestamo P on
D_P.Id_Prestamo=P.Id_Prestamo inner join Lector Le on
P.Num_Tarjeta=Le.Num_Tarjeta where Fecha_Salida between '01/03/2009' and
'30/04/2009'
i) Genere una lista con todos los libros ordenados alfabticamente por
ttulo y dentro de cada ttulo ordenado por editorial.
select ttulo, nombre_Ed from Libro L inner join Editorial E on
L.Cod_Ed=E.Cod_Ed order by Nombre_Ed, ttulo asc
j) Obtenga una lista de los libros con el nmero total de copias existentes
de cada uno.
select ttulo, sum(Num_Copias) as Copias from Libro L inner join Copias_Libro
C_L on l.Id_libro=C_L.Id_Libro group by titulo

k) Muestre por cada sucursal el nmero total de copias que posee y


ordnelas de menor a mayor.
select nombre_Sucursal, sum(Num_Copias) as
NoCopiasLibroSucursalSantaTecla from Copias_Libro C_L inner join
Sucursales_Biblioteca S_B on C_L.Id_Sucursal=S_B.Id_Sucursal inner join
Libro L on C_L.Id_Libro=L.Id_libro group by Nombre_Sucursal order by
NoCopiasLibroSucursalSantaTecla
l) Muestre el total de libros que posee cada editorial contenida en la
biblioteca.
select Nombre_Ed, count(Id_Libro) as Total_Libros from Libro l inner join
Editorial E on l.Cod_Ed=E.Cod_Ed group by Nombre_Ed
m) Para cada libro prestado por la sucursal Central, obtenga el ttulo del
libro, el nombre del lector y la direccin del lector.
select titulo, nombre_lector, direccion_lector from Libro L inner join
Detalle_Prestamo D_P on L.Id_libro=D_P.Id_Libro inner join Prestamo P on
D_P.Id_Prestamo=P.Id_Prestamo inner join Lector Le on
P.Num_Tarjeta=Le.Num_Tarjeta where Id_Sucursal=1
n) Obtenga los nombres de todos los lectores que no tengan libros en
prstamo.
select Nombre_Lector from Lector where not exists (select * from Prestamo
where lector.Num_Tarjeta=Prestamo.Num_Tarjeta)

2. Considere el esquema relacional CONTROL DE PEDIDOS, realice las


siguientes consultas sobre los datos ocupando funciones de agregacin.
a) Cul es el artculo con menor costo de la tabla ARTICULOS?
select min(Precio_uni)as Menor_Costo from Articulo
b) Cul es el artculo con mayor costo?
select max(Precio_uni) as Mayor_Costo from Articulo
c) Cul es el importe total de todos los pedidos realizados por el cliente
con Id_Cliente=000123?
select sum(Total_Importe) as Importe_Total from Pedido where
Id_Cliente=000123
d) Obtenga los nmeros de pedido y fechas de envo de todos los pedidos
servidos desde el almacn con nmero 2.
select count(cantidad) as Num_Pedidos, Fecha_Envio from Pedido_Articulo P_A
inner join Envio E on P_A.Id_Pedido=E.Id_Pedido where Id_Almacen=2 group
by Fecha_Envio
e) Obtenga una lista CLIENTE, NUM_PEDIDOS, MEDIA_IMPORTE_PED
donde la columna de en medio es el nmero total de pedidos realizados
por el cliente y la ltima es la medio del importe de todos los pedidos del
cliente.
select Nombre_Cliente, sum(cantidad) Num_Pedidos , avg(total_Importe) as
Media_Importe from Cliente C inner join Pedido P on
C.Id_Cliente=P.Id_Cliente inner join Pedido_Articulo P_A on
p.Id_Pedido=P_A.Id_Pedido group by Nombre_Cliente
f) Muestre el nombre de los clientes que generaron algn pedido los meses
de Febrero y Marzo
select Nombre_Cliente, Id_Pedido from Cliente C , Pedido p where
c.Id_Cliente=p.Id_Cliente and Fecha_Pedido between '01/02/2009' and
'31/03/2009'
g) Obtenga una lista de los nmeros de pedido para los pedidos que se
sirvieron desde todos los almacenes que la empresa tiene en San
Salvador.

select count(cantidad) as Num_Pedidos from Pedido_Articulo p_a inner join


Envio e on p_a.Id_Pedido=e.Id_Pedido inner join Almacen a on
e.Id_Almacen=a.Id_Almacen where Ciudad='San Salvador'

h) Muestre cual es el total del importe de los pedidos realizados para el


mes de Marzo.
select sum(total_importe) as Importe_Marzo from Pedido where Fecha_Pedido
between '01/03/2009' and '31/03/2009'
i) Obtenga por cada cliente (con su cdigo de cliente y nombre) el total del
importe al que ascienden todos sus pedidos.
select c.Id_Cliente, Nombre_Cliente, sum(total_Importe) as
Total_Importe_Cliente from Cliente c, Pedido p where
c.Id_Cliente=p.Id_Cliente group by c.Id_Cliente,Nombre_Cliente
j) Muestre una lista de artculos ordenados por nombre y ordene cada
artculo por su precio de mayor a menor.
select Nombre_Articulo , Precio_uni from Articulo order by Precio_uni desc
k) Cual fue el importe total de los pedidos realizados el mes de JUNIO de
2009.
select sum(total_importe) as Importe_Junio from Pedido where Fecha_Pedido
between '01/06/2009' and '31/06/2009'
l) Muestre el total de productos que se solicitaron para el pedido P00006
select count(cantidad) as Cantidad_de_Producto from pedido_articulo pa inner
join envio e on pa.id_pedido = e.id_pedido where pa.id_pedido ='P00006'

m) Muestre el nombre de los clientes que no hayan generado ningn pedido


para el mes de Febrero.
select nombre_cliente as Cliente from cliente c inner join pedido p on
c.id_cliente = p.id_cliente where fecha_pedido between '25-02-2009' and '3002-2009'

3. Considere el esquema relacional EMPRESA correspondiente al tema 3


realice las siguientes consultas sobre los datos ocupando funciones de
agregacin.
a) Genere un listado que muestre todos los empleados cuyas horas
trabajadas sean superiores a las del empleado con
ID_Emp=666884444
select nombre, horas from empleado inner join trabaja_en on
empleado.id_emp =trabaja_en.id_emp where horas<(select sum (horas)from
trabaja_en where id_emp='666884444');
b) Cuntos empleados trabajan en el departamento con NDepto=?
select count(l.ndepto) as Numero_de_Empleados from departamento d inner
join Localizaciones_Depto l on d.NDepto = l.NDepto where l.NDepto ='5'
c) Cul es el total de horas invertidas por los empleados en el proyecto
con NumProy=30?
select sum(t.horas) as Horas_Invertidas from trabaja_en t inner join proyecto
p on p.NumProy = t.NumProy
d) Determine el menor y mayor salario que existe para los empleados de la
empresa y presente adems cual es el promedio general de los salarios.
select min(salario) as salario_min, max(salario) as salario_max, avg(salario)
as salario_prom from empleado
e) Obtenga los nombres de todos los empleados de departamento 5 que
trabajan ms de 10 horas por semana en el Proyecto ProductoX.
select nombre from empleado inner join trabaja_en on
empleado.id_emp=trabaja_en.id_emp inner join proyecto on
trabaja_en.numproy = proyecto.nombreproy where horas>'10.00' and
ndepto='5' and nombreproy= '%ProductoX%' ;
f) Cite los nombres de todos los empleados que tienen una persona
dependiente de ellos con su mismo nombre de pila.
select empleado.nombre from empleado inner join dependiente on
empleado.id_emp = dependiente.id_emp where empleado.nombre
=dependiente.nombreDep;

g) Muestre todos aquellos empleados en los que su nombre comience con


el carcter A pero que su nombre no exceda de 6 caracteres.
select nombre from empleado where nombre like '[A]{6}';

h) Para cada proyecto, cite el nombre del proyecto y el total de horas por
semana (de todos los empleados) invertidas en el proyecto.
select nombreproy, (select sum(horas) as total_horas from trabaja_en where
proyecto.numproy = trabaja_en.numproy ) from proyecto ;
i) Obtenga los nombres de los empleados que trabajan en cada uno de los
proyectos.
select Nombre, nombreProy from Empleado E inner join Trabaja_En T_E on
E.Id_Emp=T_E.Id_Emp inner join Proyecto P on P.NumProy=T_E.NumProy

j) Obtenga el nombre de todos los empleados que no trabajan en ningn


proyecto.
select nombre, apellido from Empleado where not exists (select * from
Trabaja_En where Empleado.Id_Emp = Trabaja_En.Id_Emp)
k) Para cada departamento, obtenga el nombre del departamento y salario
medio de todos los empleados que trabajan en l.
select Nombre_Depto, AVG(salario) as salario_medio from Empleado E inner
join Departamento D on E.NDepto=D.NDepto group by Nombre_Depto
l) Obtenga el salario medio de todos los empleados varones.
select AVG(salario) as Salario_Medio_Varones from Empleado where sexo='M'

m) Obtenga una lista de los empleados y los proyectos en los que trabajan,
ordenados por departamento y dentro de cada departamento, alfabticamente
por apellido y nombre.
select Nombre, Apellido, nombreProy, Nombre_Depto from Empleado E inner
join Departamento D on E.NDepto=D.NDepto inner join Trabaja_En T_E on

E.Id_Emp=T_E.Id_Emp inner join Proyecto P on P.NumProy=T_E.NumProy


order by Nombre_Depto, Apellido, Nombre asc

n) Utilizando EXISTS, recupere los nombres de los empleados que no tienen


familiares dependientes.
select nombre from empleado where not exists(select * from dependiente
where empleado.id_emp = dependiente.id_emp);

o) Liste los nombres de los jefes que tienen por lo menos un familiar
dependiente.
select distinct empleado.nombre from empleado inner join departamento on
empleado.id_emp=departamento.id_jefe inner join dependiente on
dependiente.id_emp=departamento.id_jefe
p) Recupere los nombres de todos los empleados que no tienen supervisores
select Nombre from Empleado where Id_Superv=''

q) Recuperar el nombre y direccion de todos los empleados que trabajan para


el departamento de inverstigacion (JOIN)
r) De cada proyecto en el que trabajan ms de dos empleados, recupere su
nmero, su nombre y el mero de empleados que trabajan en l.
select nombreproy, numproy,(select count(id_emp) from trabaja_en
where proyecto.numproy=trabaja_en.numproy)as numEmpleados from
proyecto
where (select count(id_emp) from trabaja_en
where proyecto.numproy=trabaja_en.numproy)>2

s) Cuntos empleados trabajan en el proyecto numero 30?


select count(empleado.id_emp) as cantidad_emp from empleado inner join
trabaja_en on trabaja_en.id_emp = empleado.id_emp inner join proyecto on
proyecto.numproy=trabaja_en.numproy where proyecto.numproy=30

t) Obtenga el Nombre, Apellido, Fecha de Nacimiento, sexo, salario y numero


de departamento de todos aquellos empleados cuyo apellido sea Fernndez
select nombre, fecha_ncto, sexo, salario, ndepto from empleado where apellido
like '%Fernndez%'

u) Encuentre los nombres de todos los empleados supervisados por Franklin


Javier
select nombre from empleado where id_superv=( select id_emp from
empleado where nombre='Franklin Javier')

v) Obtenga el salario medio de todos los empleados que sean mujeres.


select avg(salario) as Salario_Medio_Mujeres from Empleado where sexo='F'

Potrebbero piacerti anche