Sie sind auf Seite 1von 3

1 Listar los nombres de los clientes que tienen asignado el representante Alvaro Jaumes

(suponiendo que no pueden haber representantes con el mismo nombre).


SELECT nombre
FROM clientes
WHERE repclie = (SELECT numemp FROM empleados WHERE nombre = 'Alvaro
Jaumes' );
2 Listar los vendedores (numemp, nombre, y n de oficina) que trabajan en oficinas "buenas" (las
que tienen ventas superiores a su objetivo).
Solucin 1

Con esta solucin buscamos que la oficina del empleado est

SELECT numemp, nombre, oficina

en la lista de oficinas que tienen ventas superiores a su

FROM empleados

objetivo.

WHERE oficina IN ( SELECT oficina FROM


oficinas WHERE ventas > objetivo );
Solucin 2

Con esta solucin buscamos que exista una oficina igual al del

SELECT numemp, nombre, oficina

empleado y que tenga ventas superiores a su objetivo. El

FROM empleados

resultado ser el mismo que con la solucin 1.

WHERE EXISTS ( SELECT * FROM


oficinas WHERE empleados.oficina =
oficinas.oficina AND ventas > objetivo );
Solucin 3
SELECT numemp, nombre, oficina
FROM empleados
WHERE oficina = ANY ( SELECT oficina FROM oficinas WHERE ventas > objetivo );

3 Listar los vendedores que no trabajan en oficinas dirigidas por el empleado 108.
Solucin 1

Obtenemos los empleados tales que no exista una oficina igual

SELECT numemp, nombre, oficina

a la suya que adems est dirigida por el empleado 108, con

FROM empleados

esta solucin s aparecen los empleados que no tienen oficina.

WHERE NOT EXISTS ( SELECT * FROM


oficinas WHERE empleados.oficina =
oficinas.oficina AND dir = 108);
SELECT numemp, nombre, oficina

Con la subconsulta obtenemos la lista de las oficinas dirigidas

FROM empleados

por el empleado 108. Al final se obtienen los empleados cuya

WHERE oficina NOT IN ( SELECT oficina

oficina no est en esa lista, es decir salen los empleados

FROM oficinas WHERE dir = 108);

asignados a una oficina no dirigida por el 108. Pero no salen


los empleados que no tienen oficina asignada ya que su campo
oficina es nulo por lo que el resultado de la comparacin es
nulo, no es verdadero y no se seleccionan. El problema se

puede arreglar indicando que tambin se tienen que


seleccionar los empleados con oficina nula:

Solucin 2

Con la subconsulta obtenemos la lista de las oficinas dirigidas

SELECT numemp, nombre, oficina

por el empleado 108. Al final se obtienen los empleados cuya

FROM empleados

oficina no est en esa lista. Pero no salen los empleados que no

WHERE ( oficina NOT IN ( SELECT oficina

tienen oficina asignada ya que su campo oficina es nulo por lo

FROM oficinas WHERE dir = 108) ) OR

que el resultado de la comparacin es nulo, no es verdadero y

( oficina IS NULL);

no se seleccionan.

SELECT numemp, nombre, oficina


FROM empleados
WHERE oficina <> ALL ( SELECT oficina FROM oficinas WHERE dir = 108);

4 Listar los productos (idfab, idproducto y descripcin) para los cuales no se ha recibido ningn
pedido de 25000 o ms.
SELECT idfab, idproducto, descripcion
FROM productos
WHERE NOT EXISTS (SELECT * FROM pedidos WHERE fab = idfab AND producto =
idproducto AND importe >= 25000);
5 Listar los clientes asignados a Ana Bustamante que no han remitido un pedido superior a 3000 pts.
SELECT numclie, nombre
FROM clientes
WHERE repclie IN ( SELECT numemp FROM empleados WHERE nombre = 'Ana
Bustamante' )
AND numclie NOT IN ( SELECT clie FROM pedidos WHERE importe > 3000 AND clie
IS NOT NULL);
6 Listar las oficinas en donde haya un vendedor cuyas ventas representen ms del 55% del objetivo
de su oficina.
SELECT *
FROM oficinas
WHERE EXISTS ( SELECT * FROM empleados WHERE
empleados.oficina=oficinas.oficina AND ventas > objetivo * 0.55);
7 Listar las oficinas en donde todos los vendedores tienen ventas que superan al 50% del objetivo
de la oficina.

SELECT *

Si un empleado no tiene ventas queremos que no sea tomado

FROM oficinas

en cuenta, por eso aadimos AND ventas IS NOT NULL.

WHERE (objetivo * 0.5) <= ALL ( SELECT

Adems esta solucin no vale porque salen las oficinas que no

ventas FROM empleados WHERE

tienen empleados.

empleados.oficina = oficinas.oficina AND

Hay que aadir una condicin para que se consideren slo las

ventas IS NOT NULL);

oficinas con empleados como muestra la solucin 1.

Solucin 1
SELECT *
FROM oficinas
WHERE ((objetivo * 0.5) <= ALL ( SELECT
ventas FROM empleados WHERE
empleados.oficina = oficinas.oficina AND
ventas IS NOT NULL) )
AND ( EXISTS ( SELECT * FROM
empleados WHERE empleados.oficina =
oficinas.oficina ) );
Solucin 2
SELECT *
FROM oficinas
WHERE (objetivo * .5) <= (SELECT MIN(ventas) FROM empleados WHERE empleados.oficina =
oficinas.oficina);

8 Listar las oficinas que tengan un objetivo mayor que la suma de las cuotas de sus vendedores.
SELECT *
FROM oficinas
WHERE objetivo > ( SELECT SUM(cuota) FROM empleados WHERE
empleados.oficina = oficinas.oficina);

Das könnte Ihnen auch gefallen