BDL 4
BDL 4
BDL 4
INFORMÁTICA INDUSTRIAL
CONSULTAS
La Paz -Bolivia
2023
Parte 1
-- 1. CUANTOS PRODUCTOS ESTAN POR DEBAJO DEL PROMEDIO DE CANTIDAD DE STOCK DE LOS PRODUCTOS
SELECT COUNT(*)
FROM producto
WHERE cantidad_en_stock < (SELECT AVG(cantidad_en_stock) FROM producto);
-- 2. LISTAR LOS NOMBRES DE LOS PRODUCTOS QUE ESTAN POR DEBAJO DEL PROMEDIO DE CANTIDAD DE STOCK DE LOS
PRODUCTOS ORDENADO POR NOMBRE*/
SELECT nombre
FROM producto
WHERE cantidad_en_stock < (SELECT AVG(cantidad_en_stock) FROM producto)
ORDER BY nombre;
-- 5. Cuál o cuáles son los productos que tengan el precio de venta más caro de la gama herramientas
SELECT nombre
FROM producto
WHERE gama = 'herramientas' AND precio_venta = (SELECT MAX(precio_venta)
FROM producto WHERE gama = 'herramientas');
-- 8. Devuelve el nombre, los apellidos y el email de los empleados que están a cargo
de Alberto Soria Carrasco.
SELECT nombre, apellido1, apellido2, email
FROM empleado
WHERE codigo_empleado = (SELECT codigo_jefe FROM empleado
WHERE nombre = 'Alberto' AND apellido1 = 'Soria' AND
apellido2 = 'Carrasco');
-- 9. Devuelve el nombre, apellido1 y cargo de los empleados que no representen a ningún cliente.
SELECT nombre, apellido1, puesto
FROM empleado
WHERE codigo_empleado NOT IN (SELECT codigo_empleado_rep_ventas FROM cliente);
-- 10. Devuelve un listado que muestre solamente los clientes que no han
realizado ningún pago.
SELECT nombre_cliente
FROM cliente
WHERE codigo_cliente NOT IN (SELECT codigo_cliente FROM pago);
-- 11. Devuelve un listado que muestre solamente los clientes que sí han realizado algún pago.
SELECT nombre_cliente
FROM cliente
WHERE codigo_cliente IN (SELECT codigo_cliente FROM pago);
-- 12. Devuelve un listado de los productos que nunca han aparecido en un pedido.
SELECT nombre
FROM producto
WHERE codigo_producto NOT IN (SELECT codigo_producto FROM detalle_pedido);
-- 15. Devuelve un listado con los clientes que han realizado algún pedido pero no han realizado ningún
pago
SELECT nombre_cliente
FROM cliente
WHERE codigo_cliente IN (SELECT codigo_cliente FROM pedido)
AND codigo_cliente NOT IN (SELECT codigo_cliente FROM pago);
PARTE 2
-- Consultas multitabla (Composición externa)
-- Base de datos JARDINERIA
-- 1. Devuelve un listado que muestre solamente los clientes que no han realizado ningún pago.
SELECT c.*
FROM cliente c
LEFT JOIN pago p ON c.codigo_cliente = p.codigo_cliente
WHERE p.codigo_cliente IS NULL;
-- 2. Devuelve un listado que muestre solamente los clientes que no han realizado ningún pedido.
SELECT c.*
FROM cliente c
LEFT JOIN pedido p ON c.codigo_cliente = p.codigo_cliente
WHERE p.codigo_cliente IS NULL;
-- 3. Devuelve un listado que muestre los clientes que no han realizado ningún pago y los que no han
realizado ningún pedido.
SELECT c.*
FROM cliente c
LEFT JOIN pago p ON c.codigo_cliente = p.codigo_cliente
LEFT JOIN pedido pe ON c.codigo_cliente = pe.codigo_cliente
WHERE p.codigo_cliente IS NULL AND pe.codigo_cliente IS NULL;
-- 4. Devuelve un listado que muestre solamente los empleados que no tienen una oficina asociada.
SELECT e.*
FROM empleado e
LEFT JOIN oficina o ON e.codigo_oficina = o.codigo_oficina
WHERE o.codigo_oficina IS NULL;
-- 5. Devuelve un listado que muestre solamente los empleados que no tienen un cliente asociado.
SELECT e.*
FROM empleado e
LEFT JOIN cliente c ON e.codigo_empleado = c.codigo_empleado_rep_ventas
WHERE c.codigo_empleado_rep_ventas IS NULL;
-- 6. Devuelve un listado que muestre solamente los empleados que no tienen un cliente asociado junto
con los datos de la oficina donde trabajan.
SELECT e.*
FROM empleado e
LEFT JOIN oficina o ON e.codigo_oficina = o.codigo_oficina
LEFT JOIN cliente c ON e.codigo_empleado = c.codigo_empleado_rep_ventas
WHERE o.codigo_oficina IS NULL AND c.codigo_empleado_rep_ventas IS NULL;
SELECT p.*
FROM producto p
LEFT JOIN detalle_pedido dp ON p.codigo_producto = dp.codigo_producto
WHERE dp.codigo_producto IS NULL;
-- 9. Devuelve un listado de los productos que nunca han aparecido en un pedido. El resultado debe
mostrar el nombre, la descripción y la imagen del producto.
-- 10. Devuelve las oficinas donde no trabajan ninguno de los empleados que hayan sido los
representantes de ventas de algún cliente que haya realizado la compra de algún producto de la gama
Frutales.
SELECT o.*
FROM oficina o
LEFT JOIN (
SELECT e.codigo_oficina
FROM empleado e
JOIN cliente c ON e.codigo_empleado = c.codigo_empleado_rep_ventas
JOIN pedido p ON c.codigo_cliente = p.codigo_cliente
JOIN detalle_pedido dp ON p.codigo_pedido = dp.codigo_pedido
JOIN producto pr ON dp.codigo_producto = pr.codigo_producto
WHERE pr.gama = 'Frutales'
) sub ON o.codigo_oficina =
sub.codigo_oficina
WHERE sub.codigo_oficina IS NULL;
-- 11. Devuelve un listado con los clientes que han realizado algún pedido pero no han realizado ningún
pago.
SELECT c.*
FROM cliente c
JOIN pedido p ON c.codigo_cliente =
p.codigo_cliente
LEFT JOIN pago pa ON c.codigo_cliente = pa.codigo_cliente
WHERE pa.codigo_cliente IS NULL;
-- 12. Devuelve un listado con los datos de los empleados que no tienen clientes asociados y el nombre
de su jefe asociado.
PARTE 3
-- Consultas resumen
-- Base de datos JARDINERIA
SELECT COUNT(*)
FROM empleado;
SELECT AVG(total)
FROM pago
WHERE YEAR(fecha_pago) = 2009;
-- 5. Calcula el precio de venta del producto más caro y más barato en una misma consulta.
SELECT COUNT(*)
FROM cliente;
SELECT COUNT(*)
FROM cliente
WHERE ciudad = 'Madrid';
-- 8. ¿Calcula cuántos clientes tiene cada una de las ciudades que empiezan por M?
-- 9. Devuelve el nombre de los representantes de ventas y el número de clientes al que atiende cada
uno.
-- 11. Calcula la fecha del primer y último pago realizado por cada uno de los
clientes. El listado deberá mostrar el nombre y los apellidos de cada cliente.
SELECT c.nombre_cliente, MIN(p.fecha_pago), MAX(p.fecha_pago)
FROM cliente c
JOIN pago p ON c.codigo_cliente = p.codigo_cliente
GROUP BY c.nombre_cliente;
-- 12. Calcula el número de productos diferentes que hay en cada uno de los pedidos.
SELECT codigo_pedido,
COUNT(DISTINCT codigo_producto) AS productos_diferentes
FROM detalle_pedido
GROUP BY codigo_pedido;
-- 13. Calcula la suma de la cantidad total de todos los productos que aparecen en
cada uno de los pedidos.
-- 14. Devuelve un listado de los 20 productos más vendidos y el número total de unidades
que se han vendido de cada uno. El listado deberá estar ordenado por el número total de
unidades vendidas.
-- 15. La facturación que ha tenido la empresa en toda la historia, indicando la base imponible, el IVA
y el total facturado.
-- 16. La misma información que en la pregunta anterior, pero agrupada por código de producto.
SELECT codigo_producto,
SUM(precio_unidad * cantidad) AS base_imponible,
SUM(precio_unidad * cantidad) * 0.21 AS IVA,
SUM(precio_unidad * cantidad) * 1.21 AS total_facturado
FROM detalle_pedido
GROUP BY codigo_producto;
-- 17. La misma información que en la pregunta anterior, pero agrupada por código de producto filtrada
por los códigos que empiecen por OR.
SELECT codigo_producto,
SUM(precio_unidad * cantidad) AS base_imponible,
SUM(precio_unidad * cantidad) * 0.21 AS IVA,
SUM(precio_unidad * cantidad) * 1.21 AS total_facturado
FROM detalle_pedido
WHERE codigo_producto LIKE 'OR%'
GROUP BY codigo_producto;
-- 18. Lista las ventas totales de los productos que hayan facturado más de 3000 euros.
SELECT p.nombre,
SUM(dp.cantidad) AS unidades_vendidas,
SUM(dp.precio_unidad * dp.cantidad) AS total_facturado,
SUM(dp.precio_unidad * dp.cantidad) * 1.21 AS total_facturado_con_impuestos
FROM producto p
JOIN detalle_pedido dp ON p.codigo_producto = dp.codigo_producto
GROUP BY p.nombre
HAVING SUM(dp.precio_unidad * dp.cantidad) > 3000;
-- 19. Muestre la suma total de todos los pagos que se realizaron para cada uno de los años que
aparecen en la tabla pagos