SUBCONSULTAS. EJERCICIOS: 
Tablas utilizadas: EMPLEADOS
, DEPARTAMENTOS, PEDIDOS, PRODUCTOS y CLIENTES. 
1. Listar los nombres y
códigos de los departamentos en los que haya empleados. 
Mi solución:
select
d1.dep_no, dnombre
from
departamentos d1
where d1.DEP_NO = ANY (select d2.DEP_NO from empleados
d2);
Solución del profesor:
select
dep_no, dnombre
from
departamentos
where dep_no in (
     select
distinct DEP_NO
     from
empleados
);
2. Obtener los datos del
pedido más reciente.
Mi solución:
select
* 
from
productos
where
PRODUCTO_NO = (select producto_no from pedidos order by FECHA_PEDIDO limit 1);
Solución del profesor:
select
* 
from
productos
where
PRODUCTO_NO = (select max(fecha_pedido) from pedidos);
3. Pare el departamento de
VENTAS, visualizar para cada oficio, la suma de los salarios de los empleados 
Mi solución:
select
OFICIO, sum(salario)
from
empleados
where
dep_no = (
select
dep_no
from
departamentos
where
dnombre like 'ventas')
group
by oficio;
Solución del profesor:
select
oficio, sum(salario)
from empleados
where dep_no = (
     select DEP_NO
     from departamentos
     where dnombre='VENTAS'
)
group
by oficio;
4. Obtener los datos del
producto con más unidades en los pedidos de los clientes. 
select *
from productos
where producto_no = (
     select
PRODUCTO_NO
     from pedidos
     group by
PRODUCTO_NO
         having
sum(unidades) = (
         select
sum(UNIDADES)
         from
pedidos  
         group by
producto_no
         order by 1 desc
         limit 1
     )
);
5. Seleccionar los datos de
los pedidos correspondientes al realizado con mayor cantidad de unidades del
mismo producto, visualizándolo para cada producto. 
select
*
from
pedidos
where
(PRODUCTO_NO, unidades) in (
     select producto_no, max(unidades)
     from pedidos
     group by 1
)
order
by PRODUCTO_NO;
6.
Seleccionar los empleados de la empresa que tengan igual comisión que la media
de su oficio
Mi
solución:
select *
from
empleados
where
(oficio,salario) = ANY (
     select
oficio, avg(salario)
     from
empleados
     group
by oficio
);
Solución
del profesor:
select *
from
empleados e1
where
COMISION = (
     select
avg(ifcomision)
     from
empleados e2
     where
e1.oficio=oficio
);
Tablas utilizadas: EMPLEADOS
, DEPARTAMENTOS, PEDIDOS, PRODUCTOS y CLIENTES. 
1. Obtener un listado con el
número y nombre de los clientes atendidos por el vendedor con nombre 'CALVO'.
select
CLIENTE_NO, NOMBRE
from
clientes
where
VENDEDOR_NO = (
     select EMP_NO
     from empleados
     where apellido like 'CALVO'
);
2. Obtener un listado con
los números de pedido, números de producto y fecha de los pedidos realizados
por el cliente con nombre 'EDICIONES SANZ'. 
select
PEDIDO_NO, PRODUCTO_NO, FECHA_PEDIDO
from
pedidos
where
CLIENTE_NO = (
     select CLIENTE_NO
     from clientes
     where nombre like 'EDICIONES SANZ'
);
3. Obtener el número, nombre
y límite crédito de los clientes con crédito inferior a la media de los
créditos. 
select
CLIENTE_NO, NOMBRE, ifnull(LIMITE_CREDITO,0)
from clientes
where LIMITE_CREDITO < (
     select
avg(ifnull(LIMITE_CREDITO,0))
     from clientes
);
4. Visualizar los datos del
producto más caro. 
select *
from productos
where PRECIO_ACTUAL = (
     select max(precio_actual)
     from productos
);
5. Listar los clientes que
han hecho algún pedido de 'DESTRUCTORA DE PAPEL A3'. 
select
* 
from clientes
where CLIENTE_NO = ANY (
     select CLIENTE_NO
     from pedidos
     where PRODUCTO_NO = (
         select PRODUCTO_NO
         from productos
         where DESCRIPCION like 'DESTRUCTORA DE
PAPEL A3'
     )
);
6. Obtener los vendedores
con más de dos clientes. 
select *
from empleados
where emp_no in (
     select VENDEDOR_NO
     from clientes 
     group by 1
     having count(*)>2
);
7. Conseguir los apellidos y
oficios de los empleados del departamento 10 cuyo oficio sea idéntico al de
cualquiera de los empleados del departamento de VENTAS. 
select
APELLIDO, oficio
from
empleados
where DEP_NO = 10 AND OFICIO in (
     select
distinct OFICIO  
     from
empleados
     where DEP_NO
= (
         select dep_no
         from departamentos
         where dnombre like 'VENTAS'
     )
);
8. Visualizar los vendedores
con clientes que no tengan ningún pedido. 
select *
from empleados
where emp_no in (
     select
vendedor_no
     from clientes
     where
cliente_no not in (
         select distinct cliente_no
         from pedidos
     )
);
9. Seleccionar el
departamento en el que trabaja el empleado con mayor salario, visualizando el
nombre del departamento.
select DNOMBRE
from departamentos
where DEP_NO in (
     select
DEP_NO
     from
empleados
     where
salario =(
         select
max(SALARIO)
         from empleados
     )
);
10. Seleccionar aquellos
empleados cuyo salario sea menor a la media de los salarios de su departamento.
select *
from empleados e1
where SALARIO < (
     select avg(salario)
     from empleados e2
     where e1.dep_no=e2.dep_no
);
11. Obtener los nombres y
las localidades de los clientes que tengan pedidos.
select
nombre, localidad
from
clientes
where
CLIENTE_NO in (
     select distinct CLIENTE_NO
     from pedidos
);
12. Seleccionar el departamento con menos suma salarial total (salario+comision) de la empresa, visualizando el nombre del departamento.
select dnombre
from departamentos
where dep_no in (
select DEP_NO
from empleados
group by dep_no
having sum(salario + ifnull(comision,0)) = (
select sum(salario + ifnull(comision,0))
from empleados
group by dep_no
order by 1
limit 1
)
);
MMMMMM
ResponderEliminarMe lo dicen mucho
Eliminar