Está en la página 1de 17

OPERACIONES DE

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

5. Nmero y nombre de las piezas que suministra el vendedor nmero 1, pero no el


vendedor
nmero 2.
select v.numvend, nomvend
from vendedor v, preciosum ps1, preciosum ps2
where v.numvend=ps1.numvend and
ps1.numpieza=ps2.numpieza and numvend=1
MINUS
select v.numvend, nomvend
from vendedor v, preciosum ps1, preciosum ps2
where v.numvend=ps1.numvend and ps1.numpieza=ps2.numpieza and numvend=2

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

3. Obtener la cantidad de provincias distintas de las que tenemos conocimiento de


algn proveedor.
select count(distinct provincia) provincias
from vendedor

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

5. Media de precios distintos de venta de piezas.


select avg(distinct preciovent) mediaventa
from pieza

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

3. Obtener la cantidad de vendedores de cada empresa, indicando cantidad y nombre


de la misma,
ordenado descendentemente por cantidad de empleados.
select count(*) vendedores, nombrecomer
from vendedor
group by nombrecomer
order by vendedores desc, nombrecomer

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

6. Obtener nmero de pieza y nmero total de vendedores que la pueden suministrar


para piezas de
ms de 250 de precio de venta.
select ps.numpieza, count(*) vendedores
from preciosum ps, pieza p
where ps.numpieza = p.numpieza
and preciovent >= 250
group by ps.numpieza
order by 2

7. De cada pieza obtener el precio unitario medio de suministro.


select numpieza,avg(preciounit) precio_Sum_Medio
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

2. Nmeros de pedido que tengan ms de tres lneas de pedido.


select numpedido
from linped
group by numpedido
having count(*)>3

3. Nmeros de pedido donde el total de piezas pedidas es mayor que 40.


select numpedido
from linped
group by numpedido
having sum(cantpedida)>40

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

7. Obtener aquellos nmeros de pedido y fecha en que se confeccionaron cuya


cantidad de
artculos pedidos sea superior a 30 y la recibida inferior a 10.
select p.numpedido, fecha
from pedido p, linped l
where p.numpedido=l.numpedido
group by p.numpedido,fecha
having sum(cantpedida)>30 and sum(cantrecibida)<10

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

where numvend in (select numvend from pedido


group by numvend
having count(*) >= all(select count(*)
from pedido
group by numvend))

2. Nmero y nombre de los vendedores que no ofertan ninguna pieza.


select numvend, nomvend
from vendedor
where numvend not in (select numvend from preciosum)
order by nomvend

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

4. Nmero y nombre de los vendedores a los que no se les ha solicitado pedidos.


select numvend, nomvend
from vendedor
where numvend not in (select numvend from pedido)
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

having avg(preciounit)>= (select max(preciocompra) from linped where


linped.numpieza=p.numpieza)

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))

2. Nombre de los vendedores que no pueden suministrar ninguna pieza, ordenados


alfabticamente.
select nomvend
from vendedor
where numvend not in (select numvend from preciosum)
order by nomvend

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

3. Vendedores que pueden suministrarnos piezas que se venden al pblico con un


precio de venta
entre 50 y 100 y que esa pieza ha sido solicitada en algn momento (no
necesariamente a ellos)
select distinct numvend
from preciosum ps, pieza p, linped l
where ps.numpieza = p.numpieza
and p.numpieza = l.numpieza
and preciovent between 50 and 100
order by numvend

4. Nombre de las empresas de Alicante a las que se ha comprado algn monitor


select nombrecomer
from vendedor v, pedido pd, linped l, pieza p
where v.numvend = pd.numvend
and pd.numpedido = l.numpedido
and l.numpieza = p.numpieza
and nompieza like '%MONITOR%'
and provincia = 'ALICANTE'

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

2. Obtener el nmero y el nombre de los vendedores y la cantidad de piezas que


pueden
suministrar ordenado alfabticamente por vendedor.
select v.numvend,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

1. Obtener para los vendedores de la provincia de Alicante, el nmero de vendedor, su


nombre y la
cantidad total de pedidos que se les ha solicitado.
select v.numvend, nomvend, count(*) cantidadPED
from vendedor v, pedido p
where v.numvend=p.numvend and provincia='ALICANTE'
group by v.numvend, nomvend

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

7. Para las piezas recibidas en domingo, obtener el nmero de la pieza, su nombre y el


nmero y nombre del vendedor al que se le solicitaron. Ordena el resultado por el
nombre de la pieza.

select p.numpieza, nompieza, v.numvend, nomvend


from pieza p, linped lp , pedido ped, vendedor v
where lp.numpieza=p.numpieza and lp.numpedido=ped.numpedido and
ped.numvend=v.numvend and to_char(fecharecep, 'd')=7
order by 2

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

4. Obtener el nmero y nombre de las piezas que nunca hemos solicitado.


select numpieza, nompieza
from pieza
minus
select p.numpieza, nompieza
from linped lp, pieza p
where lp.numpieza=p.numpieza

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

6. Obtener para los vendedores de Alicante o Madrid, el nmero y nombre de vendedor


junto con el

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

5. Obtener el nombre de la empresa que tiene ms de tres vendedores, y al menos dos


de ellos son de la provincia de Alicante.
select nombrecomer
from vendedor
group by nombrecomer
having count(*)>3
intersect
select nombrecomer
from vendedor
where provincia=AICANTE
group by nombrecomer
having count(*)>1

6. Obtener los nombres y empresas de los vendedores que no son de la Comunidad


Valenciana, de los que se desconoce el telfono.
select nomvend, nombrecomer
from vendedor
where provincia not in ('ALICANTE','CASTELLON','VALENCIA') and telefono is null

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

7. Nmero de pedido, y nmero y nombre de vendedor del pedido que no es el de


menor importe
de venta (preciocompra*cantrecibida) siendo el ao del pedido posterior al 1992
(>1992).
select numpedido, v.numvend, nomvend, fecha
from pedido p, vendedor v
where p.numvend=v.numvend
and to_char(fecha,'YYYY')>1992
and numpedido in (select numpedido
from linped
group by numpedido
having sum(preciocompra*cantrecibida) > and(select sum(preciocompra*cantrecibida)from
linped group by numpedido))

10. Nmero de pieza, descripcin, precio medio de suministro y descuento mximo de


las piezas
que proceden de la misma ciudad que la empresa Mecemsa y que se han solicitado 2
veces o
ms.
select ps.numpieza, nompieza, avg(preciounit) media,
max(descuento) descuento
from preciosum ps, pieza pz, vendedor v
where ps.numpieza=pz.numpieza and v.numvend=ps.numvend
and v.ciudad in (select ciudad
from vendedor
where nombrecomer='MECEMSA')
and ps.numpieza in (select numpieza from linped
group by numpieza

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))

3. Obtener, para el vendedor que cumple que la diferencia de precio al que le


compramos una
pieza y el precio que nos haba ofrecido por ella sea mxima, el nmero de vendedor,
su
nombre y la diferencia media entre el precio al que nos vende las piezas y el que nos
haba
ofrecido por las mismas.
select v.numvend, nomvend, avg(preciocompra-preciounit) DifMedia
from preciosum ps, pedido p, linped lp, vendedor v
where p.numpedido=lp.numpedido and ps.numvend=p.numvend
and lp.numpieza=ps.numpieza and p.numvend=v.numvend
group by v.numvend, nomvend
having max(precicompra-preciounit) =
(Select max(preciocomprapreciounit)
from preciosum ps, pedido p, linped lp
where p.numpedido=lp.numpedido and ps.numvend=p.numvend
and lp.numpieza=ps.numpieza

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

También podría gustarte