Está en la página 1de 7

REPASO DE CONSULTAS SQL SOBRE BD JARDINERÍA

Consultas sobre una tabla


1. Devuelve un listado con el código de oficina y la ciudad donde la ciudad no está
vacío.

SELECT CodigoOficina,Ciudad from Oficinas where ciudad is not null;

2. Devuelve un listado con la ciudad y el teléfono de las oficinas de España.

SELECT Ciudad, Telefono FROM Oficinas WHERE Pais IN ("Spain","España");

3. Devuelve un listado con el nombre, apellidos y email de los empleados cuyo jefe
tiene un código de jefe igual a 7.

select concat(Nombre,' ',Apellido1,' ',Apellido2)as nombre, Email from


empleados where Codigojefe=7

4. Devuelve el nombre del puesto, nombre, apellidos y email del jefe de la empresa.

select Puesto, Nombre,Apellido1,Apellido2,Email from empleados where


CodigoEmpleado="1";

5. Devuelve un listado con el nombre, apellidos y puesto de aquellos empleados que


no sean representantes de ventas.

select Nombre,Apellido1,Apellido2,Puesto from empleados where puesto <>


'Representante Ventas'

6. Devuelve un listado con el nombre de todos los clientes españoles.

SELECT NombreCliente,Pais FROM clientes WHERE Pais in ("España","Spain");

7. Devuelve un listado con los distintos estados por los que puede pasar un pedido.

→ SELECT DISTINCT Estado FROM Pedidos;

8. Devuelve un listado con el código de cliente de aquellos clientes que realizaron


algún pago en 2008.
select Codigocliente from pedidos where Fechapedido like '2008-%';

9. Devuelve un listado con el código de pedido, código de cliente, fecha esperada y


fecha de entrega de los pedidos que no han sido entregados a tiempo.

select CodigoPedido,CodigoCliente,FechaEsperada,FechaEntrega from pedidos where


FechaEntrega > FechaEsperada;

10. Devuelve un listado con el código de pedido, código de cliente, fecha esperada y
fecha de entrega de los pedidos cuya fecha de entrega ha sido al menos dos días
antes de la fecha esperada. (usa date_add)

SELECT CodigoPedido, CodigoCliente, FechaEsperada, FechaEntrega

FROM pedidos

WHERE FechaEntrega < DATE_ADD(FechaEsperada, interval -2 DAY);

11. Devuelve un listado de todos los pedidos que fueron rechazados en 2009.

SELECT * from pedidos WHERE estado="rechazado" and year(FechaPedido)=2009;

12. Devuelve un listado de todos los pedidos que han sido entregados en el mes de
enero de cualquier año.

SELECT * FROM Pedidos

WHERE MONTH(FechaEntrega) = 1 AND Estado = 'Entregado';

13. Devuelve un listado con todos los pagos que se realizaron en el año 2008 mediante
Paypal. Ordene el resultado de mayor a menor.

SELECT * FROM Pagos WHERE year(FechaPago) = 2008 AND FormaPago = "Paypal"


ORDER BY Cantidad 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 FormaPago FROM Pagos;

15. Devuelve un listado con todos los productos que pertenecen a la gama
Ornamentales y que tienen más de 100 unidades en stock. El listado deberá estar
ordenado por su precio de venta, mostrando en primer lugar los de mayor precio.

select * from Productos where Gama=”Ornamentales” and CantidadEnStock >100;

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 clientes WHERE ciudad="Madrid" and codigoempleadorepventas in ("11" ,
"30");

Manejando subconsultas
1. Devuelve el producto que más unidades tiene en stock.

SELECT * FROM Productos WHERE CantidadEnStock = (SELECT max(CantidadEnStock)


FROM Productos);

2. Obtén el nombre de los empleados que dirige María Solís Jerez.

select Nombre,Apellido1,Apellido2 from Empleados where CodigoJefe=(select


CodigoEmpleado from Empleados where Nombre=”Maria” and Apellido1=”Solís” and
Apellido2=”Jerez”);

3. Muestra el nombre de los clientes que hayan realizado pagos superiores a


3000€.

select NombreCliente from Clientes where CodigoCliente in (select distinct CodigoCliente


from Pagos where Cantidad >3000);

4. Muestra el nombre de los clientes que no hayan realizado pagos en el año 2009.

select NombreCliente from Clientes where CodigoCliente not in (select distinct


CodigoCliente from Pagos where year(FechaPago)=2009);

5. Devuelve el nombre de los productos que se vendieron en los pedidos 1 a 6

SELECT p.Nombre FROM Productos p NATURAL JOIN Pedidos pd

WHERE pd.CodigoPedido BETWEEN 1 AND 6

group by p.Nombre;

select nombre from Productos where CodigoProducto in (select CodigoProducto from


DetallePedidos where CodigoPedido between 1 and 6);

6. Devuelve los empleados que trabajan en una oficina situada en Fuenlabrada

select * from empleados where CodigoOficina in (select CodigoOficina from oficinas

where Ciudad='Fuenlabrada');
7. Lista la dirección de las oficinas que tengan clientes en Fuenlabrada.

→ SELECT CodigoOficina, LineaDireccion1, LineaDireccion2 FROM Oficinas

WHERE CodigoOficina IN

(SELECT CodigoOficina FROM Empleados

WHERE CodigoEmpleado IN

(SELECT CodigoEmpleadoRepVentas FROM Clientes

WHERE Ciudad = 'Fuenlabrada'));

8. Obtén el listado de productos que en su gama tienen que ver con plantas

select * from productos where gama in(select gama from gamasproductos where
descripcion like '%_lantas%');

9. Devuelve el listado de productos y la cantidad total de aquellos pedidos que no se


entregaron

select CodigoProducto, sum(Cantidad) as total from DetallePedidos where CodigoPedido in


(select CodigoPedido from Pedidos where Estado=”Entregado”);

10. Calcula el importe de los pedidos entregados (pedido, total y total+IVA)

select CodigoPedido,sum(Cantidad*PrecioUnidad) as total,


sum(Cantidad*PrecioUnidad*1.21) as totalIVA from DetallePedidos where CodigoPedido in
(select CodigoPedido from Pedidos where Estado = "Entregado") group by CodigoPedido;

11. Devuelve el nombre de los clientes a los que no se les ha entregado a tiempo un
pedido.

→ SELECT NombreCliente FROM Clientes

WHERE CodigoCliente IN

(SELECT CodigoCliente FROM Pedidos

WHERE FechaEntrega > FechaEsperada);

12. Devuelve los productos que son de la gama relacionada con plantas

SELECT * from productos where Gama in (SELECT Gama from gamasproductos where
Descripciontexto like '%_lantas%');

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

select CodigoProducto,Nombre from Productos where CodigoProducto not in (select distinct


CodigoProducto from DetallePedidos);

14. Devuelve el nombre, los apellidos y el email de los empleados que están a cargo de
Alberto Soria.
SELECT nombre , apellido1, apellido2, email from empleados where CodigoJefe =
( SELECT codigoempleado from empleados where nombre="Alberto" and Apellido1=”Soria”)

15. Devuelve el nombre del producto que tenga el precio de venta más caro.

SELECT Nombre FROM Productos where PrecioVenta =


(SELECT MAX(PrecioVenta) FROM productos);

Consultas multitabla
1. Devuelve un listado que muestre solamente los clientes que no han realizado ningún
pago. (usa left join)

select * from Clientes left join Pagos

on Clientes.CodigoCliente=Pagos.CodigoCliente

where FormaPago is null; (o cualquier campo de Pagos que estará Null)

2. Devuelve un listado que muestre solamente los clientes que no han realizado ningún
pedido.

select * from Clientes left join Pedidos on Clientes.CodigoCliente=Pedidos.CodigoCliente

where FechaPedido 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.CodigoCliente, c.NombreCliente, 'No ha realizado pagos' AS Estado FROM


Clientes c LEFT JOIN Pagos p

ON c.CodigoCliente = p.CodigoCliente WHERE p.FormaPago IS NULL

UNION

SELECT c.CodigoCliente, c.NombreCliente, 'No ha realizado pedidos' AS Estado FROM


Clientes c LEFT JOIN Pedidos pd

ON c.CodigoCliente = pd.CodigoCliente WHERE pd.CodigoPedido IS NULL;

4. Devuelve un listado que muestre solamente los empleados que no tienen una oficina
asociada.

SELECT Empleados.CodigoEmpleado,Empleados.Nombre,Empleados.CodigoOficina
FROM Empleados,Oficinas WHERE Empleados.CodigoOficina=Oficinas.CodigoOficina and
Oficinas.CodigoOficina is null;

5. Devuelve un listado que muestre solamente los empleados que no tienen un cliente
asociado.

SELECT
Empleados.CodigoEmpleado,Empleados.Nombre,Empleados.CodigoOficina,Oficinas.
* FROM Empleados

LEFT JOIN Clientes ON Empleados.CodigoEmpleado =


Clientes.CodigoEmpleadoRepVentas

inner join Oficinas on Empleados.CodigoOficina=Oficinas.CodigoOficina

WHERE Clientes.CodigoCliente 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 distinct e.*,o.* from Empleados e left join Clientes c on


e.CodigoEmpleado=c.CodigoEmpleadoRepVentas

inner join Oficinas o on e.CodigoOficina= o.CodigoOficina where c.NombreCliente 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 Empleados e left join Oficinas o on e.CodigoOficina=o.CodigoOficina

left join Clientes c on c.CodigoEmpleadoRepVentas=e.CodigoEmpleado where


o.CodigoOficina is NULL and c.CodigoCliente is NULL;

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

USE jardineria;

SELECT DISTINCT P.CodigoProducto, P.* FROM Productos P

LEFT JOIN DetallePedidos DP ON P.CodigoProducto = DP.CodigoProducto

WHERE DP.CodigoProducto 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 dimensión del producto.

SELECT p.Nombre, p.Descripcion, p.Dimensiones FROM Productos p LEFT JOIN


DetallePedidos ON p.CodigoProducto = DetallePedidos.CodigoProducto WHERE
DetallePedidos.CodigoProducto IS NULL;

10. Devuelve las oficinas donde no trabajan los representantes de clientes que no
tienen región indicada
select o.* from Oficinas o where o.CodigoOficina NOT IN (

(SELECT DISTINCT O.CodigoOficina FROM Oficinas O

NATURAL JOIN Empleados E

LEFT JOIN Clientes C ON C.CodigoEmpleadoRepVentas = E.CodigoEmpleado

WHERE C.Region IS NULL)

);

11. Devuelve un listado con los clientes que han realizado algún pedido pero no han
realizado ningún pago.

USE jardineria;

SELECT DISTINCT CL.* FROM Clientes CL

INNER JOIN Pedidos PE ON PE.CodigoCliente = CL.CodigoCliente

WHERE PE.CodigoCliente NOT IN (SELECT CodigoCliente FROM Pagos);

SELECT DISTINCT CL.* FROM Clientes CL

INNER JOIN Pedidos PE ON PE.CodigoCliente = CL.CodigoCliente

left join Pagos on PE.CodigoCliente=Pagos.CodigoCliente

where Pagos.CodigoCliente 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
e1.Nombre,e1.Apellido1,e1.CodigoJefe,e2.CodigoEmpleado,e2.Nombre,e2.Apellido1,e2.Ap
ellido2
from empleados e1,empleados e2
where e1.CodigoJefe=e2.CodigoEmpleado
AND e1.Codigoempleado not in
( SELECT CodigoEmpleadoRepVentas from clientes);

También podría gustarte