BDL 4

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

ESCUELA INDUSTRIAL PEDRO DOMINGO MURILLO

INFORMÁTICA INDUSTRIAL

CONSULTAS

UNIVERSITARIO: Juan Brayan Montes Chura

Docente: Ing. Peregrina Carazas

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;

-- 3. Cuáles son los productos con máximo precio por gama


SELECT gama, MAX(precio_venta)
FROM producto
GROUP BY gama;

-- 4. Cuál es el nombre del cliente con mayor límite de crédito.


SELECT nombre_cliente
FROM cliente
WHERE limite_credito = (SELECT MAX(limite_credito) FROM cliente);

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

-- 6. Devuelve el producto que más unidades tiene en stock.


SELECT nombre
FROM producto
WHERE cantidad_en_stock = (SELECT MAX(cantidad_en_stock) FROM producto);

-- 7. Devuelve el producto que menos unidades tiene en stock.


SELECT nombre
FROM producto
WHERE cantidad_en_stock = (SELECT MIN(cantidad_en_stock) FROM producto);

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

-- SUBCONSULTAS CON IN Y NOT IN

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

-- 13. Devuelve el nombre, apellidos, puesto y teléfono de la oficina de aquellos


empleados que no sean representante de ventas de ningún cliente.
SELECT e.nombre, e.apellido1, e.apellido2, e.puesto, o.telefono
FROM empleado e
JOIN oficina o ON e.codigo_oficina = o.codigo_oficina
WHERE e.codigo_empleado NOT IN (SELECT codigo_empleado_rep_ventas FROM cliente);
-- 14. 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.codigo_oficina, o.ciudad
FROM oficina o
WHERE o.codigo_oficina NOT IN (
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'
);

-- 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.*, o.*


FROM empleado e
LEFT JOIN cliente c ON e.codigo_empleado = c.codigo_empleado_rep_ventas
JOIN oficina o ON e.codigo_oficina = o.codigo_oficina
WHERE c.codigo_empleado_rep_ventas IS NULL;
-- 7. Devuelve un listado que muestre los empleados que no tienen una oficina asociada y los que no
tienen un cliente asociado.

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;

-- 8. Devuelve un listado de los productos que nunca han aparecido en un pedido.

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.

SELECT p.nombre, p.descripcion, gp.imagen


FROM producto p
JOIN gama_producto gp ON p.gama = gp.gama
LEFT JOIN detalle_pedido dp ON p.codigo_producto = dp.codigo_producto
WHERE dp.codigo_producto IS NULL;

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

SELECT e.*, ej.nombre AS nombre_jefe


FROM empleado e
LEFT JOIN cliente c ON e.codigo_empleado = c.codigo_empleado_rep_ventas
JOIN empleado ej ON e.codigo_jefe = ej.codigo_empleado
WHERE c.codigo_empleado_rep_ventas IS NULL;

PARTE 3
-- Consultas resumen
-- Base de datos JARDINERIA

-- 1. ¿Cuántos empleados hay en la compañía?

SELECT COUNT(*)
FROM empleado;

-- 2. ¿Cuántos clientes tiene cada país?

SELECT pais, COUNT(*)


FROM cliente
GROUP BY pais;

-- 3. ¿Cuál fue el pago medio en 2009?

SELECT AVG(total)
FROM pago
WHERE YEAR(fecha_pago) = 2009;

-- 4. ¿Cuántos pedidos hay en cada estado? Ordena el resultado de


forma descendente por el número de pedidos.

SELECT estado, COUNT(*) AS total_pedidos


FROM pedido
GROUP BY estado
ORDER BY total_pedidos DESC;

-- 5. Calcula el precio de venta del producto más caro y más barato en una misma consulta.

SELECT MAX(precio_venta) AS precio_maximo,


MIN(precio_venta) AS precio_minimo
FROM producto;

-- 6. Calcula el número de clientes que tiene la empresa.

SELECT COUNT(*)
FROM cliente;

-- 7. ¿Cuántos clientes existen con domicilio en la ciudad de Madrid?

SELECT COUNT(*)
FROM cliente
WHERE ciudad = 'Madrid';

-- 8. ¿Calcula cuántos clientes tiene cada una de las ciudades que empiezan por M?

SELECT ciudad, COUNT(*) AS total


FROM cliente
WHERE ciudad LIKE 'M%'
GROUP BY ciudad;

-- 9. Devuelve el nombre de los representantes de ventas y el número de clientes al que atiende cada
uno.

SELECT e.nombre, COUNT(c.codigo_cliente)


FROM empleado e
LEFT JOIN cliente c ON e.codigo_empleado = c.codigo_empleado_rep_ventas
GROUP BY e.nombre;

-- 10. Calcula el número de clientes que no tiene asignado representante de ventas.


SELECT COUNT(*)
FROM cliente
WHERE codigo_empleado_rep_ventas IS NULL;

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

SELECT codigo_pedido, SUM(cantidad) AS total


FROM detalle_pedido
GROUP BY codigo_pedido;

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

SELECT TOP 20 p.nombre,


SUM(dp.cantidad) AS unidades_vendidas
FROM producto p
JOIN detalle_pedido dp ON p.codigo_producto = dp.codigo_producto
GROUP BY p.nombre
ORDER BY unidades_vendidas DESC;

-- 15. La facturación que ha tenido la empresa en toda la historia, indicando la base imponible, el IVA
y el total facturado.

SELECT 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;

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

SELECT DATEPART(YEAR, fecha_pago) AS year, SUM(total)


FROM pago
GROUP BY DATEPART(YEAR, fecha_pago);

También podría gustarte