Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Operaciones de Conjutnos
Operaciones de Conjutnos
CONJUNTOS
1. Nombre de las empresas que tienen vendedores con pedidos O que puedan
suministrar la pieza
A-1001-L.
select nombrecomer
from vendedor
group by nombrecomer
having count(*)>2
UNION
select nombrecomer
from vendedor v, preciosum ps
where v.numvend=ps.numvend and numpieza=A-10001-L
2. Nombre de las empresas que tienen vendedores con pedidos Y que puedan
suministrar la pieza
A-1001-L.
select nombrecomer
from vendedor
group by nombrecomer
having count(*)>2
INTERSECT
select nombrecomer
from vendedor v, preciosum ps
where v.numvend=ps.numvend and numpieza=A-10001-L
3. Nombre de las empresas que tienen vendedores con pedidos PERO NO suministran
la pieza A1001-L.
select nombrecomer
from vendedor
group by nombrecomer
having count(*)>2
MINUS
select nombrecomer
from vendedor v, preciosum ps
where v.numvend=ps.numvend and numpieza=A-10001-L
6. Nmero y nombre de las piezas con un precio de venta mayor que 1000, y todas las
que pueden
ser suministradas por el vendedor nmero 1, ordenado por nombre.
select numpieza, nompieza
from pieza p, preciosum ps
where p.numpieza=ps.numpieza and preciovent>1000 and numvend=1
ARITMTICA Y
FUNCIONES
AGREGADAS
CONSULTAS FUNCIONES
1. Obtener la diferencia entre cantidad pedida y cantidad recibida de las lneas del
pedido 1.
select numlinea, cantrecibida-cantpedida diferencia
from linped
where numpedido = 1
2. Media de das de intervalo entre la fecha de envo del pedido 1 y de entrega de las
distintas piezas
solicitadas en ese pedido
select avg(abs(fecha-fecharecep)) mediarecep
from linped l, pedido pd
where pd.numpedido = 1 and l.numpedido = pd.numpedido
4. Mnima diferencia entre precio de compra y precio de suministro del vendedor al que
se le compr.
select min(preciocompra-preciounit) minimo
from preciosum ps, pedido pd, linped l
where ps.numvend = pd.numvend and pd.numpedido = l.numpedido and l.numpieza =
ps.numpieza
INFORMACIN
AGRUPADA
1. Obtener para cada pieza, nombre de la pieza, precio de venta, y la media de la
diferencia entre el
precio de venta y el de suministro.
select nompieza, preciovent, avg(preciovent-preciounit) media
from pieza p, preciosum ps
where p.numpieza=ps.numpieza
group by p.numpieza,nompieza,preciovent
order by nompieza
2. Obtener para cada nmero de pedido, el precio pagado en total por ese pedido, la
cantidad pedida
total as como la diferencia entre cantidad pedida total y cantidad recibida total.
select numpedido, sum(preciocompra*cantrecibida) precioPagado,
sum(cantpedida) cantidadPedida,
sum(cantpedida-cantrecibida) no_recibido
from linped
group by numpedido
order by numpedido
4. Obtener, por pieza solicitada, la mxima diferencia entre cantidad pedida y cantidad
recibida de
entre todas las veces en que fue servida.
select numpieza, max(cantpedida-cantrecibida) maximo
from linped
group by numpieza
order by numpieza
5. Obtener para cada pieza, el nmero de la pieza y el nmero total de vendedores que
nos pueden
suministrar esa pieza.
select numpieza, count(*) vendedores
from preciosum
group by numpieza
order by numpieza
13. Calcular para cada pieza, el tanto por ciento de beneficios del precio de venta al
pblico respecto
al precio medio de compra de todas las compras que se han realizado de la pieza
select p.numpieza, max(preciovent)/avg(preciocompra)*100
from linped l, pieza p
where l.numpieza=p.numpieza
group by p.numpieza
order by p.numpieza
SELECCIN DE
INFORMACIN
AGRUPADA
CONSULTAS GROUP BY - HAVING
1. Nombre de las empresas que tienen ms de dos vendedores.
select nombrecomer
from vendedor
group by nombrecomer
having count(*)>2
4. Obtener los nmeros de pedido donde el precio total sea superior a 1000.
select numpedido
from linped l
group by numpedido
having sum(cantrecibida*preciocompra)>1000
5. Para las piezas que se hayan ofertadoa un precio unitario medio mayor que 260
obtener el
nmero de pieza, el mximo precio unitario, y la cantidad de suministradores.
select numpieza, max(preciounit), count(*)
from preciosum
group by numpieza
having avg(preciounit)>260
6. Para las piezas que se ofrecen a un precio unitario medio mayor que 260 (sin tener
en cuenta
los suministros menores de 250) obtener el nmero de pieza, el mximo precio
unitario, y la
cantidad de suministradores.
select numpieza, max(preciounit) maximo, count(*) cuantos
from preciosum
where preciounit >= 250
group by numpieza
having avg(preciounit)>260
10. Obtener el nmero, el nombre y el precio mximo unitario de las piezas cuyo precio
de venta
sea mayor que 250 o menor que 170, su descuento medio oscile entre 10 y 17 y que
tengan un
precio unitario medio total superior a 150, ordenado por precio mximo.
select p.numpieza,nompieza,max(preciounit) maximo
from pieza p,preciosum ps
where ps.numpieza=p.numpieza and preciovent > 250 or preciovent < 170
group by p.numpieza,nompieza
having avg(descuento) between 10 and 17and avg(preciounit) > 150
order by maximo
Subselect
CONSULTAS ANIDADAS
CONSULTAS SUBSELECT
1. Obtener todos los datos de los vendedores a los que se les han solicitado ms
pedidos que a todos los dems.
select *
from vendedor
3. Nmero y nombre de los vendedores a los que se les ha solicitado algn pedido.
select v.numvend, nomvend
from vendedor v, pedido p
where v.numvend = p.numvend
order by nomvend
11. Calcular, por cada nmero de vendedor, la cantidad de piezas distintas que ha
vendido, para
aquellos vendedores pertenecientes a la empresa con ms proveedores.
select v.numvend,count(distinct numpieza) npiezas
from vendedor v, pedido p, linped l
where v.numvend=p.numvend
and p.numpedido=l.numpedido
and nombrecomer in
(select nombrecomer
from vendedor
group by nombrecomer
having count(*) >= all
(select count(*) from vendedor group by nombrecomer))
group by v.numvend
order by v.numvend
15. Nmero y descripcin de las piezas cuyo precio medio de suministro est por
encima del mayor
precio de compra pagado por ella.
select p.numpieza, nompieza,avg(preciounit),max(preciocompra)
from pieza p, preciosum ps, linped l
where p.numpieza=ps.numpieza and ps.numpieza=l.numpieza
group by p.numpieza, nompieza
subselect - exists
CONSULTAS ANIDADAS II
CONSULTAS SUBSELECT - EXISTS
1. Nombre de los vendedores que pueden suministrar todas las piezas.
select nomvend
from vendedor v
where not exists (select *from pieza pz where not exists(select *from preciosum where
numvend = v.numvend and numpieza = pz.numpieza))
3. Nmero y descripcin de las piezas que se han solicitado en todos los pedidos del
vendedor 1.
select numpieza, nompieza
from pieza pz
where not exists(select *from pedido pd where numvend=1 and not exists (select *from
linped l where pd.numpedido=l.numpedido and pz.numpieza=l.numpieza))
4. Nombre de las empresas que cumplen que todos sus vendedores son de la
Comunidad
Valenciana, ordenadas alfabticamente.
select distinct nombrecomer
from vendedor v
where not exists(select *from vendedor where nombrecomer = v.nombrecomer and
provincia not in ('ALICANTE','CASTELLON','VALENCIA'))
order by nombrecomer
Adicionales 1
CONSULTAS
EJERCICIOS
ADICIONALES
5. Nombre y numero de las piezas que se han solicitado en algn pedido ordenadas por
el nombre
select nompieza, p.numpieza
from pieza p, linped l
where p.numpieza = l.numpieza
order by nompieza
6. Para cada pieza comprada, nmero de pieza y diferencia en euros entre el precio de
compra y el
de suministro del vendedor al que se le compr, ordenado descendentemente por
dicha cantidad.
select ps.numpieza, preciounit - preciocompra
from linped l, pedido pd, preciosum ps
where l.numpedido = pd.numpedido
and pd.numvend = ps.numvend
and ps.numpieza = l.numpieza
order by diferencia
7. Numero de vendedor y empresa para la que trabaja de aquellos que han vendido
alguna pieza por un precio mayor que el estipulado por ellos en la lista de suministros
select distinct v.numvend, nombrecomer
from vendedor v, pedido pd, linped l, preciosum ps
where ps.numvend = v.numvend
and v.numvend = pd.numvend
and pd.numpedido = l.numpedido
and l.numpieza = ps.numpieza
and preciocompra > preciounit
Adicionales 2
EJERCICIOS
ADICIONALES
CONSULTAS
1. Obtener el nombre de los vendedores y la cantidad de piezas que pueden
suministrar, ordenado
alfabticamente por vendedor.
select nomvend,count(*) cantidad
from preciosum ps, vendedor v
where ps.numvend=v.numvend
group by v.numvend,nomvend
order by nomvend
4. Para cada pedido obtener el nmero de lneas que tiene, el nmero y nombre del
vendedor y la
fecha del pedido.
select p.numpedido, count(*), p.numvend, nomvend, fecha
from pedido p, linped l,vendedor v
where p.numvend = v.numvend and p.numpedido = l.numpedido group by p.numpedido,
p.numvend, nomvend, fecha
6. Obtener los nmeros y nombres de los vendedores que han servido algn pedido con
ms de
tres artculos diferentes.
select numvend, nomvend
from vendedor v, pedido p, linped lp
where v.numvend = p.numvend
and p.numpedido = lp.numpedido
group by p.numpedido,v.numvend, nomvend
having count(distinct numpieza)> 3
7. Obtener nmero y nombre de vendedores a los que les hayamos solicitado algn
pedido.
select v.numvend, nomvend
from vendedor v, pedido p
where v.numvend = p.numvend
8. Obtener el nombre de las piezas, la media del precio unitario de cada pieza y el
precio de venta
de todas las piezas de precio unitario medio mayor que 100 y que puedan ser
suministradas por
ms de dos proveedores.
select nompieza, avg(preciosum), preciovent
from preciosum ps, pieza p where
p.numpieza = ps.numpieza
group by nompieza, preciovent
having avg(preciosum) > 100 and count(*) > 2
9. Obtener para cada pieza, el nombre de las pieza, la media del precio unitario de
suministro y el
precio de venta, para las piezas de precio de venta mayor que 300, teniendo en cuenta
que la
media de los precios unitarios debe estar entre 100 y 280. Ordenar el resultado por el
nombre
de la pieza.
select nompieza, avg(preciounit) media, preciovent
from preciosum ps, pieza p
where ps.numpieza=p.numpieza and preciovent > 30000
group by p.numpieza,nompieza,preciovent
having count(*)>2 and avg(preciounit) between 100 and 280
order by p.nompieza
10. Obtener nmero y nombre de las piezas que tengan una diferencia entre precio de
venta y
media de precio de suministro (preciounit) menor del 20% del precio de venta.
select p.numpieza, nompieza
from pieza p, preciosum ps
where p.numpieza = ps.numpieza
group by p.numpieza, nompieza, preciovent
having preciovent*20/100 > avg(preciounit)
EJERCICIOS ADICIONALES
CONSULTAS
4. Para cada pieza que pueda ser suministrada a un precio medio unitario inferior a 10
euros, obtener el nmero de la pieza, su nombre, el precio mximo al que nos la han
ofrecido, el precio mnimo y la cantidad de vendedores que nos la pueden suministrar.
select p.numpieza, nompieza, max(preciounit) maxPrecio,
min(preciounit) minPrecio, count(*) totalVend
from preciosum ps, pieza p
where ps.numpieza=p.numpieza
group by p.numpieza, nompieza
having avg(preciounit)<10
5. Para los pedidos que nos han sido servidos en ms de un da, obtener el nmero de
pedido, el nmero del vendedor al que se le solicit, su nombre, y la cantidad de das
distintos en los que nos han servido las piezas solicitadas.
select p.numpedido, v.numvend, nomvend, count(distinct fecharecep)
from vendedor v, pedido p, linped lp
where v.numvend = p.numvend
and p.numpedido = lp.numpedido
group by p.numpedido, v.numvend, nomvend
having count(distinct fecharecep)> 1
Adicionales 4
CONSULTAS
1. Nmero y nombre de los vendedores a los que les hemos solicitado algn pedido en
el ao 1995 pero no les hemos solicitado ninguno en el ao 1992.
select v.numvend, nomvend
from pedido p, vendedor v
where p.numvend=v.numvend and to_char(fecha,'yyyy')=1995
minus
select v.numvend, nomvend
from pedido p, vendedor v
where p.numvend=v.numvend and to_char(fecha,'yyyy')=1992
5. Obtener el nmero de los vendedores (numvend) que nos hubiesen podido servir
todo lo que se
solicita en las lneas 1, 2 y 3 del pedido nmero 1.
select numvend
from preciosum ps, linped lp
where ps.numpieza=lp.numpieza and numpedido=1 and numlinea=1
intersect
select numvend
from preciosum ps, linped lp
where ps.numpieza=lp.numpieza and numpedido=1 and numlinea=2
intersect
select numvend
from preciosum ps, linped lp
where ps.numpieza=lp.numpieza and numpedido=1 and numlinea=3
importe total que les hemos pagado a travs de todos los pedidos que se les ha
solicitado.
select v.numvend, nomvend, sum(cantrecibida*preciocompra) Total
from vendedor v, pedido p, linped lp
where v.numvend=p.numvend and p.numpedido=lp.numpedido and provincia I
('ALICANTE', 'MADRID')
group by v.numvend, nomvend
Adicionales 5
CONSULTAS
1. Obtener para los pedidos con un importe total entre 400 y 600 euros, el nmero de
pedido, el nmero y nombre del vendedor al que se le solicit, y la fecha del pedido.
select p.numpedido, v.numvend, nomvend, fecha
from pedido p, linped lp, vendedor v
where p.numvend=v.numvend and p.numpedido=lp.numpedido
group by p.numpedido, fecha, v.numvend, nomvend
having sum(ctdpedida*preciocompra) between 400 and 600
4. Obtener para el nmero y nombre de los vendedores de Alicante a los que se les
haya solicitado
alguna pieza, de la que nos haban indicado que su plazo de suministro sera superior a
una semana, junto con el nmero y nombre de la pieza, y la cantidad de pedidos
distintos en los que se les ha solicitado. Ordena el resultado por la ltima columna.
select v.numvend, nomvend, p.numpieza, nompieza, count(distinct numpedido)
from vendedor v, preciosum ps, pedido pd, linped lp, pieza p
where v.numvend = pd.numvend and v.numvend=ps.numvend
and pd.numpedido = lp.numpedido and p.numpieza=lp.numpieza and
p.numpieza=ps.numpieza and diassum>7
group by v.numvend, nomvend, p.numpieza, nompieza
order by 5
Adicionales 6
CONSULTAS
2. Nombre del vendedor y media de todos sus precios de suministro para los
vendedores que
viven en la misma ciudad que algn vendedor de apellido Garca.
select nomvend, avg(preciounit) mediasumin
from vendedor v, preciosum ps
where v.numvend=ps.numvend and ciudad IN (select ciudad from vendedor where
nomvend like '%GARCIA%')
group by v.numvend, nomvend,ciudad
order by mediasumin
having count(*)>1)
group by ps.numpieza,nompieza
order by ps.numpieza
Adicionales 7
CONSULTAS
1. Nmero y nombre de los vendedores que oferten alguna de las piezas que pueden
ser suministradas por el vendedor nmero 1, pero que no oferten ninguna de las que
puedan
ser suministradas por el vendedor nmero 2.
select v.numvend, nomvend
from vendedor v, preciosum ps
where v.numvend=ps.numvend and
numpieza IN (select numpieza from preciosum where numvend=1)
and numvend NOT IN (
select v.numvend, nomvend
from vendedor v, preciosum ps
where v.numvend=ps.numvend and numpieza IN (select numpieza from preciosum where
numvend=2))
4. Obtener el nmero de pieza de los teclados que nos han sido servidos en el mayo de
cualquier ao.
select numpieza
from pieza p, linped lp
where p.numpieza=lp.numpieza and nompieza like %TECLADO%
and to_char(fecharecep, 'mm')=5
6. Obtener los nmeros y nombres de los vendedores que nos han servido ms de tres
artculos diferentes.
select v.numvend, nomvend
from vendedor v, pedido p, linped lp
where v.numvend=p.numvend and p.numpedido=lp.numpedido
group by v.numvend, nomvend
having count(distinct numpieza)>3