Jardineria - Consultes multitaula - Composició externa
Resol totes les consultes utilitzant la sintaxis SQL. Utilitza LEFT i RIGHT combinant-lo amb el NATURAL JOIN, JOIN USING o JOIN ON al que millor s'adapti a cada consulta.
-
Retorna una llista que mostri només els clients que no han realitzat cap pagament.
Possible solució
SELECT c.* FROM cliente c NATURAL LEFT JOIN pago p WHERE forma_pago IS NULL; -
Retorna una llista que mostri només els clients que no han realitzat cap comanda.
Possible solució
SELECT c.* FROM cliente c NATURAL LEFT JOIN pedido p WHERE codigo_pedido IS NULL; -
Mostra el nom dels clients que no hagin realitzat pagaments, amb el nom dels seus representants de vendes.
Possible solució
Amb LEFT JOINSELECT c.nombre_cliente, CONCAT_WS(' ', e.nombre, e.apellido1, e.apellido2) nombre_representante FROM cliente c NATURAL LEFT JOIN pago p JOIN empleado e ON (c.codigo_empleado_rep_ventas = e.codigo_empleado) WHERE forma_pago IS NULL; -
Retorna una llista que mostri els clients que no hagin realitzat cap pagament o que no hagin realitzat cap comanda.
Possible solució
SELECT DISTINCT nombre_cliente FROM cliente c NATURAL LEFT JOIN pago g LEFT JOIN pedido p ON (c.codigo_cliente = p.codigo_cliente) WHERE forma_pago IS NULL OR codigo_pedido IS NULL; -
Retorna una llista que mostri només els empleats que no tenen cap oficina associada.
Possible solució
SELECT * FROM empleado NATURAL LEFT JOIN oficina WHERE codigo_oficina IS NULL; -
Retorna una llista que mostri només els empleats que no tenen cap client associat.
Possible solució
SELECT e.* FROM empleado e LEFT JOIN cliente c ON (e.codigo_empleado = c.codigo_empleado_rep_ventas) WHERE codigo_cliente IS NULL; -
Retorna una llista que mostri només els empleats que no tenen cap client associat juntament amb les dades de l'oficina on treballen.
Possible solució
SELECT e.nombre, e.apellido1, e.apellido2, o.telefono FROM empleado e LEFT JOIN cliente c ON (e.codigo_empleado = c.codigo_empleado_rep_ventas) JOIN oficina o USING (codigo_oficina) WHERE codigo_cliente IS NULL; -
Retorna una llista que mostri els empleats que no tenen cap oficina associada o bé que no tinguin cap client associat.
Possible solució
SELECT e.nombre, e.apellido1, e.apellido2 FROM empleado e LEFT JOIN cliente c ON (e.codigo_empleado = c.codigo_empleado_rep_ventas) WHERE codigo_oficina IS NULL OR codigo_cliente IS NULL;Per saber que no té cap oficina associada només cal mirar si el codi d'oficina de l'empleat
IS NULLNo calia el JOIN oficinaSELECT DISTINCT e.nombre, e.apellido1, e.apellido2 FROM empleado e LEFT JOIN oficina o USING (codigo_oficina) LEFT JOIN cliente c ON (e.codigo_empleado = c.codigo_empleado_rep_ventas) WHERE codigo_oficina IS NULL OR codigo_cliente IS NULL; -
Retorna una llista dels productes que mai hagin aparegut en una comanda.
Possible solució
SELECT p.* FROM producto p NATURAL LEFT JOIN detalle_pedido dp WHERE codigo_pedido IS NULL; -
Retorna el nom dels clients que no hagin fet pagaments i el nom dels seus representants, amb la ciudad de l'oficina a la que pertany el representant.
Possible solució
SELECT c.nombre_cliente, e.nombre, apellido1, apellido2, o.ciudad FROM cliente c NATURAL LEFT JOIN pago p JOIN empleado e ON (c.codigo_empleado_rep_ventas = e.codigo_empleado) JOIN oficina o USING (codigo_oficina) WHERE forma_pago IS NULL; -
Retorna una llista dels productes que mai hagin aparegut en una comanda. El resultat ha de mostrar el nom del producte i la descripció i la imatge de la gama del producto.
Possible solució
SELECT p.nombre, gp.descripcion_texto, gp.imagen FROM producto p NATURAL LEFT JOIN gama_producto gp NATURAL LEFT JOIN detalle_pedido dp WHERE codigo_pedido IS NULL; -
Retorna les oficines on no hi treballi cap dels empleats que hagi estat representants de vendes d'algún client que hagi realitzat la compra d'algún producte de la gama
Frutales. (SUBCONSULTA)Possible solució
Amb condicio dins el JOIN ... ONSELECT o.*, oa.ciudad FROM gama_producto gp JOIN producto p ON (gp.gama = p.gama AND gp.gama = 'Aromaticas') NATURAL JOIN detalle_pedido NATURAL JOIN pedido NATURAL JOIN cliente JOIN empleado ON (codigo_empleado_rep_ventas = codigo_empleado) JOIN oficina oa USING (codigo_oficina) RIGHT JOIN oficina o USING (codigo_oficina) WHERE oa.ciudad IS NULLAmb JOIN i SELECT en FROMSELECT o.*, oa.ciudad FROM oficina o LEFT JOIN ( SELECT DISTINCT codigo_oficina, oficina.ciudad FROM gama_producto NATURAL JOIN producto NATURAL JOIN detalle_pedido NATURAL JOIN pedido NATURAL JOIN cliente JOIN empleado ON (codigo_empleado_rep_ventas = codigo_empleado) JOIN oficina USING (codigo_oficina) WHERE gama = "Aromaticas" ) oa USING (codigo_oficina) WHERE oa.ciudad IS NULLAmb subconsultaSELECT o.* FROM oficina o WHERE codigo_oficina NOT IN ( SELECT codigo_oficina FROM producto pr JOIN detalle_pedido dp ON (dp.codigo_producto = pr.codigo_producto AND pr.gama = 'Frutales') JOIN pedido p ON (p.codigo_pedido = dp.codigo_pedido) JOIN cliente c ON (c.codigo_cliente = p.codigo_cliente) JOIN empleado e ON (c.codigo_empleado_rep_ventas = e.codigo_empleado) ); -
Retorna una llista amb el codi i nom dels clients que han realitzat alguna comanda però no han realitzat cap pagament.
Possible solució
SELECT DISTINCT codigo_cliente, nombre_cliente FROM cliente c NATURAL JOIN pedido NATURAL LEFT JOIN pago WHERE forma_pago IS NULL; -
Retorna una llista amb les dades dels empleats que no tenen clients associats i el nom del seu cap associat.
Possible solució
SELECT e.nombre, e.apellido1, e.apellido2, j.nombre, j.apellido1, j.apellido2 FROM empleado e LEFT JOIN cliente c ON (c.codigo_empleado_rep_ventas = e.codigo_empleado) JOIN empleado j ON (e.codigo_jefe = j.codigo_empleado) WHERE c.codigo_cliente IS NULL ;