0% encontró este documento útil (0 votos)
151 vistas4 páginas

SQL Subconsultas

El documento presenta 11 ejercicios relacionados con consultas SQL. Los ejercicios piden calcular métricas como importes totales, precios medios y fechas. También solicitan listados que incluyan información de empleados, productos, clientes y oficinas.

Cargado por

Moni Moni
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
151 vistas4 páginas

SQL Subconsultas

El documento presenta 11 ejercicios relacionados con consultas SQL. Los ejercicios piden calcular métricas como importes totales, precios medios y fechas. También solicitan listados que incluyan información de empleados, productos, clientes y oficinas.

Cargado por

Moni Moni
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

1 ¿Cuál es la cuota media y las ventas medias de todos los empleados?

2 Hallar el importe medio de pedidos, el importe total de pedidos y el precio medio de


venta (el precio de venta es el precio unitario en cada pedido).

3 Hallar el precio medio de los productos del fabricante ACI.

4 ¿Cuál es el importe total de los pedidos realizados por el empleado Vicente Pantalla?

5 Hallar en qué fecha se realizó el primer pedido (suponiendo que en la tabla de


pedidos tenemos todos los pedidos realizados hasta la fecha).

6 Hallar cuántos pedidos hay de más de 25000 euros.

7 Listar cuántos empleados están asignados a cada oficina, indicar el número de oficina
y cuántos hay asignados.

8 Para cada empleado, obtener su número, nombre, e importe vendido por ese
empleado a cada cliente indicando el número de cliente.

9 Para cada empleado cuyos pedidos suman más de 30.000 euros, hallar su importe
medio de pedidos. En el resultado indicar el número de empleado y su importe medio de
pedidos.

10 Listar de cada producto, su descripción, precio y cantidad total pedida, incluyendo


sólo los productos cuya cantidad total pedida sea superior al 75% del stock; y ordenado
por cantidad total pedida.

11 Saber cuántas oficinas tienen empleados con ventas superiores a su cuota, no


queremos saber cuales sino cuántas hay.

Ejercicio 1
SELECT nombre Hemos supuesto que no pueden haber dos
FROM clientes empleados con el mismo nombre, de lo
WHERE repclie = (SELECT numemp contrario habría que añadir ANY antes de la
FROM empleados WHERE nombre = subconsulta.
'Alvaro Jaumes' );

Ejercicio 2
Solución 1 Con esta solución buscamos que la oficina del
SELECT numemp, nombre, oficina empleado esté en la lista de oficinas que tienen
FROM empleados ventas superiores a su objetivo.
WHERE oficina IN ( SELECT oficina
FROM oficinas WHERE ventas >
objetivo );

Solución 2 Con esta solución buscamos que exista una


SELECT numemp, nombre, oficina oficina igual al del empleado y que tenga
FROM empleados ventas superiores a su objetivo. El resultado
WHERE EXISTS ( SELECT * FROM será el mismo que con la solución 1.
oficinas WHERE empleados.oficina =
oficinas.oficina AND ventas >
objetivo );

Solución 3 Con esta otra comparamos la oficina del


SELECT numemp, nombre, oficina empleado con cada una de las oficinas que
FROM empleados tengan ventas superiores a su objetivo, si la
WHERE oficina = ANY ( SELECT oficina del empleado es igual a alguna de esas
oficina FROM oficinas WHERE oficinas aparece el empleado en el resultado.
ventas > objetivo ); El resultado será el mismo que con la solución
1.

Ejercicio 3
Solución 1 Obtenemos los empleados tales que no exista
SELECT numemp, nombre, oficina una oficina igual a la suya que además esté
FROM empleados dirigida por el empleado 108, con esta solución
WHERE NOT EXISTS ( SELECT * sí aparecen los empleados que no tienen
FROM oficinas WHERE oficina.
empleados.oficina = oficinas.oficina
AND dir = 108);

SELECT numemp, nombre, oficina Con la subconsulta obtenemos la lista de las


FROM empleados oficinas dirigidas por el empleado 108. Al final
WHERE oficina NOT IN ( SELECT se obtienen los empleados cuya oficina no esté
oficina FROM oficinas WHERE dir = en esa lista. Pero no salen los empleados que
108); no tienen oficina asignada ya que su campo
oficina es nulo por lo que el resultado de la
comparación es nulo, no es verdadero y no se
seleccionan. El problema se puede arreglar
indicando que también se tienen que
seleccionar los empleados con oficina nula:

Solución 2 Con la subconsulta obtenemos la lista de las


SELECT numemp, nombre, oficina oficinas dirigidas por el empleado 108. Al final
FROM empleados se obtienen los empleados cuya oficina no esté
WHERE ( oficina NOT IN ( SELECT en esa lista. Pero no salen los empleados que
oficina FROM oficinas WHERE dir = no tienen oficina asignada ya que su campo
108) ) OR ( oficina IS NULL); oficina es nulo por lo que el resultado de la
comparación es nulo, no es verdadero y no se
seleccionan.
SELECT numemp, nombre, oficina Con esta solución tenemos el mismo problema
FROM empleados que con NOT IN , cuando la oficina del
WHERE oficina <> ALL ( SELECT empleado es nula todos los resultados de las
oficina FROM oficinas WHERE dir = comparaciones individuales son nulos por los
108); que el test ALL da nulo y no se seleccionan los
empleados con oficina nula.

Ejercicio 4
SELECT idfab, idproducto, En este caso es más cómodo utilizar NOT
descripcion EXISTS ya que hay que preguntar por
FROM productos el idfab e idproducto a la vez.
WHERE NOT EXISTS (SELECT *
FROM pedidos WHERE fab = idfab
AND producto = idproducto AND
importe >= 25000);

Ejercicio 5
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);

Ejercicio 6
SELECT * En una subconsulta todos los campos no
FROM oficinas cualificados se presuponen de la tabla origen
WHERE EXISTS ( SELECT * FROM de la subconsulta y sólo si no existe ninguna
empleados WHERE ventas > objetivo columna con ese nombre, la considera como
* 0.55); referencia externa, por eso no es necesario
cualificar ventas porque interpreta que es el
campo ventas de la tabla empleados.

Ejercicio 7
SELECT * Esta solución no vale porque salen las oficinas
FROM oficinas que no tienen empleados.
WHERE (objetivo * 0.5) <= ALL ( Hay que añadir una condición para que se
SELECT ventas FROM empleados consideren sólo las oficinas con empleados
WHERE empleados.oficina = como muestra la solución 1.
oficinas.oficina );

Solución 1
SELECT *
FROM oficinas
WHERE ((objetivo * 0.5) <= ALL (
SELECT ventas FROM empleados
WHERE empleados.oficina =
oficinas.oficina ) )
AND ( EXISTS ( SELECT * FROM
empleados WHERE
empleados.oficina = oficinas.oficina )
);

Solución 2 Esta es otra posible solución, calculamos la


SELECT * menor venta de los empleados de la oficina y si
FROM oficinas esta es mayor que el 50% del ojetivo de la
WHERE (objetivo * .5) <= (SELECT oficina quiere decir que todos los empleados
MIN(ventas) FROM empleados de esa oficina tienen ventas iguales o
WHERE empleados.oficina = superiores. Si la oficina no tiene empleados, la
oficinas.oficina); subconsulta no devuelve ninguna fila y como
estamos utilizando una comparación simple el
resultado es nulo, luego no salen las oficinas
que no tienen empleados.

Ejercicio 8
SELECT *
FROM oficinas
WHERE objetivo > ( SELECT SUM(cuota) FROM empleados WHERE empleados.oficina =
oficinas.oficina);

También podría gustarte