Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modelo entidad/relación
Base de datos para MySQL
DROP DATABASE IF EXISTS jardineria;
CREATE DATABASE jardineria CHARACTER SET utf8mb4;
USE jardineria;
1. Datos
Entrar al script SQL para la creación de la base de datos y la inserción de
datos: jardineria.sql, que se encuentra en el mismo folder de teams
FROM oficina;
3. Devuelve un listado con el nombre, apellidos y email de los empleados cuyo jefe
tiene un código de jefe igual a 7.
WHERE codigo_jefe = 7;
4. Devuelve el nombre del puesto, nombre, apellidos y email del jefe de la empresa.
FROM empleado
SELECT nombre_cliente
FROM cliente
WHERE pais = 'Spain';
7. Devuelve un listado con los distintos estados por los que puede pasar un pedido.
FROM pedido;
FROM pago
WHERE YEAR(fecha_pago) = 2008;
FROM pago
FROM pago p
FROM pedido
FROM pedido
FROM pedido
FROM pedido
11. Devuelve un listado de todos los pedidos que fueron rechazados en 2009.
SELECT *
FROM pedido
WHERE estado = 'Rechazado' AND YEAR(fecha_pedido) = 2009;
12. Devuelve un listado de todos los pedidos que han sido entregados en el mes de
enero de cualquier año.
SELECT *
FROM pedido
WHERE estado = 'Entregado' AND MONTH(fecha_entrega) = 1;
SELECT *
FROM pago
WHERE forma_pago = 'PayPal' AND YEAR(fecha_pago) = 2008
ORDER BY total DESC;
14. Devuelve un listado con todas las formas de pago que aparecen en la tabla pago.
Tenga en cuenta que no deben aparecer formas de pago repetidas.
SELECT DISTINCT forma_pago
FROM pago;
SELECT *
FROM producto
WHERE gama = 'Ornamentales' AND cantidad_en_stock > 100
ORDER BY precio_venta DESC;
16. Devuelve un listado con todos los clientes que sean de la ciudad de Madrid y cuyo
representante de ventas tenga el código de empleado 11 o 30.
SELECT *
FROM cliente
WHERE ciudad = 'Madrid'
AND codigo_empleado_rep_ventas IN (11, 30);
FROM cliente c
FROM cliente c
INNER JOIN empleado e ON c.codigo_empleado_rep_ventas =
e.codigo_empleado
3. Muestra el nombre de los clientes que no hayan realizado pagos junto con el
nombre de sus representantes de ventas.
FROM cliente c
4. Devuelve el nombre de los clientes que han hecho pagos y el nombre de sus
representantes junto con la ciudad de la oficina a la que pertenece el
representante.
FROM cliente c
FROM cliente c
FROM empleado e
FROM empleado e
SELECT c.nombre_cliente
FROM cliente c
FROM cliente c
SELECT *
FROM cliente c
SELECT 1
FROM pago p
);
2. Devuelve un listado que muestre solamente los clientes que no han realizado
ningún pedido.
SELECT *
FROM cliente c
SELECT 1
FROM pedido pe
);
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 *
FROM cliente c
SELECT 1
FROM pago p
SELECT 1
FROM pedido pe
);
4. Devuelve un listado que muestre solamente los empleados que no tienen una
oficina asociada.
SELECT *
FROM empleado e
SELECT *
FROM empleado e
SELECT 1
FROM cliente c
);
FROM empleado e
LEFT JOIN oficina o ON e.codigo_oficina = o.codigo_oficina
SELECT 1
FROM cliente c
);
7. Devuelve un listado que muestre los empleados que no tienen una oficina
asociada y los que no tienen un cliente asociado.
SELECT *
FROM empleado e
SELECT 1
FROM cliente c
);
SELECT *
FROM producto p
SELECT 1
FROM detalle_pedido dp
);
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.
FROM producto p
SELECT 1
FROM detalle_pedido dp
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 *
FROM oficina o
WHERE NOT EXISTS (
SELECT 1
FROM cliente c
INNER JOIN empleado e ON c.codigo_empleado_rep_ventas =
e.codigo_empleado
INNER JOIN pedido pe ON c.codigo_cliente = pe.codigo_cliente
INNER JOIN detalle_pedido dp ON pe.codigo_pedido = dp.codigo_pedido
INNER JOIN producto p ON dp.codigo_producto = p.codigo_producto
WHERE p.gama = 'Frutales' AND e.codigo_oficina = o.codigo_oficina
);
11. Devuelve un listado con los clientes que han realizado algún pedido, pero no han
realizado ningún pago.
SELECT *
FROM cliente c
WHERE EXISTS (
SELECT 1
FROM pedido pe
SELECT 1
FROM pago pa
);
12. Devuelve un listado con los datos de los empleados que no tienen clientes
asociados y el nombre de su jefe asociado.
FROM empleado e
SELECT 1
FROM cliente c
2. Consultas resumen
1. ¿Cuántos empleados hay en la compañía?
FROM empleado;
2. ¿Cuántos clientes tiene cada país?
FROM cliente
GROUP BY pais;
FROM pago
FROM pedido
GROUP BY estado
FROM producto;
FROM cliente;
FROM cliente
8. ¿Calcula cuántos clientes tiene cada una de las ciudades que empiezan por M?
SELECT ciudad, COUNT(*) AS total_clientes
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.
FROM empleado e
GROUP BY e.codigo_empleado;
10. Calcula el número de clientes que no tiene asignado representante de ventas.
FROM cliente
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.
MIN(p.fecha_pago) AS primer_pago,
MAX(p.fecha_pago) AS ultimo_pago
FROM cliente c
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.
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 dp.codigo_producto, p.nombre, SUM(dp.cantidad) AS
total_unidades_vendidas
FROM detalle_pedido dp
GROUP BY dp.codigo_producto
LIMIT 20;
16. La misma información que en la pregunta anterior, pero agrupada por código de
producto.
SELECT
dp.codigo_producto,
FROM detalle_pedido dp
GROUP BY dp.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
dp.codigo_producto,
SUM(dp.cantidad * p.precio_venta) AS base_imponible,
SUM(dp.cantidad * p.precio_venta) * 0.16 AS iva,
SUM(dp.cantidad * p.precio_venta) + (SUM(dp.cantidad * p.precio_venta) *
0.16) AS total_facturado
FROM detalle_pedido dp
JOIN producto p ON dp.codigo_producto = p.codigo_producto
WHERE dp.codigo_producto LIKE 'OR%'
GROUP BY dp.codigo_producto;
18. Lista las ventas totales de los productos que hayan facturado más de 3000.
SELECT
dp.codigo_producto,
p.nombre,
FROM detalle_pedido dp
SELECT
p.nombre,
SUM(dp.cantidad) AS unidades_vendidas,
FROM detalle_pedido dp
GROUP BY p.nombre;
20. 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 YEAR(fecha_pago) AS year, SUM(total) AS total_pagos
FROM pago
GROUP BY YEAR(fecha_pago);