Salta el contingut

Jardineria - Consultes sobre una tabla

  1. Retorna una llista amb el codi d'oficina i la ciutat on hi ha oficines.

    Possible solució
    SELECT codigo_oficina, ciudad 
    FROM oficina;
    
  2. Retorna una llista amb la ciutat i el telèfon de les oficines d'España.

    Possible solució
    SELECT ciudad, telefono 
    FROM oficina
    WHERE pais = 'España';
    
  3. Retorna una llista amb el nom, cognoms i email dels empleats amb un cap amb un codi igual a 7.

    Possible solució
    SELECT nombre, apellido1, apellido2, email
    FROM empleado
    WHERE codigo_jefe = 7;
    
  4. Retorna el nom del lloc de treball (puesto), nom, cognoms i email del Director General.

    Possible solució
    SELECT puesto, nombre, apellido1, apellido2, email
    FROM empleado
    WHERE puesto = 'Director General';
    
  5. Retorna una llista amb el nom, cognoms i lloc de treball d'aquells empleats que no siguin Representante Ventas.

    Possible solució
    SELECT nombre, apellido1, apellido2, puesto
    FROM empleado
    WHERE puesto <> 'Representante Ventas';
    
  6. Retorna una llista amb el nom dels clients i el nom i cognom del contacte, de tots els clients de España.

    Possible solució
    SELECT nombre_cliente, nombre_contacto, apellido_contacto
    FROM cliente
    WHERE pais = 'España';
    
  7. Retorna una llista amb los diferents estats pels que pot passar una comanda.

    Possible solució
    SELECT DISTINCT estado
    FROM pedido; 
    
  8. Retorna una llista amb el codi de client d'aquells clients que varen fer algun pagament el 2008. Tingues es compte que hauràs d'eliminar aquells codis de client que apareguin repetits. Resol la consulta:

    1. Utilitzant la funció YEAR de MySQL.

      Possible solució
      SELECT codigo_cliente, fecha_pago
      FROM pago
      WHERE YEAR(fecha_pago) = 2008;
      
    2. Utilitzant la funció DATE_FORMAT de MySQL.

      Possible solució
      SELECT codigo_cliente, fecha_pago
      FROM pago
      WHERE DATE_FORMAT(fecha_pago, '%Y') = 2008;
      
    3. Sense utilitzar cap de les funcions anteriors.

      Possible solució
      SELECT codigo_cliente, fecha_pago
      FROM pago
      WHERE fecha_pago BETWEEN '2008-01-01' AND '2008-12-31';
      
  9. Retorna una llista amb el codi de comanda, codi de client, data esperada i data d'entrega de les comandes que no han estat entregades a temps.

    Possible solució
    SELECT codigo_pedido, codigo_cliente, fecha_esperada, fecha_entrega
    FROM pedido
    WHERE fecha_esperada < fecha_entrega;
    
  10. Retorna una llista amb el codi de comanda, codi de client, data esperada i data d'entrega de les comandes amb data d'entrega almenys dos dies abans de la data esperada.

    1. Utilitzant la funció ADDDATE de MySQL.

      Possible solució
      SELECT codigo_pedido, codigo_cliente, fecha_esperada, fecha_entrega
      FROM pedido
      WHERE ADDDATE(fecha_entrega, INTERVAL 2 DAY) <= fecha_esperada;
      

      o bé

      SELECT codigo_pedido, codigo_cliente, fecha_esperada, fecha_entrega
      FROM pedido
      WHERE fecha_esperada >= ADDDATE(fecha_entrega, INTERVAL 2 DAY);
      
    2. Utilitzant la funció DATEDIFF de MySQL.

      Possible solució
      SELECT codigo_pedido, codigo_cliente, fecha_esperada, fecha_entrega
      FROM pedido
      WHERE DATEDIFF(fecha_esperada, fecha_entrega) >= 2;
      
    3. Seria possible resoldre aquesta consulta utilitzant l'operador de suma + o resta -?

      Possible solució

      No podem restar dates amb l'operador + o - sols, però sí amb + INTERVAL...

      SELECT codigo_pedido, codigo_cliente, fecha_esperada, fecha_entrega
      FROM pedido
      WHERE fecha_entrega + INTERVAL 2 DAY <= fecha_esperada;
      

      o bé

      SELECT codigo_pedido, codigo_cliente, fecha_esperada, fecha_entrega
      FROM pedido
      WHERE fecha_esperada >= fecha_entrega + INTERVAL 2 DAY;
      
  11. Retorna una llista de totes les comandes que rebutjades, Rechazado, el 2009.

    Possible solució
    SELECT *
    FROM pedido
    WHERE estado = 'Rechazado' AND
          YEAR(fecha_pedido) = 2009;
    
  12. Retorna una llista de totes les comandes entregades el mes de gener de qualsevol any.

    Possible solució
    SELECT *
    FROM pedido
    WHERE MONTH(fecha_entrega) = 1;
    
  13. Retorna una llista amb tots els pagaments que es varen fer l'any 2008 amb Paypal. Ordena el resultat de major a menor import total.

    Possible solució
    SELECT *
    FROM pago
    WHERE forma_pago = 'PayPal' AND 
        YEAR(fecha_pago) = 2008
    ORDER BY total DESC;        
    
  14. Retorna una llista amb totes las formes de pagament que apareixen a la taula pago. Tingues en compte que no han d'aparèixer formes de pagament repetides.

    Possible solució
    SELECT DISTINCT forma_pago
    FROM pago;
    
  15. Retorna una llista amb tots els productes que pertanyen a la gama Ornamentales i que tenen més de 100 unitats en stock. La llista ha d'estar ordenada pel preu de venta, mostrant en primer lloc els de preu més elevat.

    Possible solució
    SELECT *
    FROM producto
    WHERE gama = 'Ornamentales' AND 
        cantidad_en_stock > 100
    ORDER BY precio_venta DESC;
    
  16. Retorna una llista amb tots els clients que siguin de la ciutat de Madrid i que tinguin un representant de vendes amb codi d'empleat 11 o 30.

    Possible solució
    SELECT * 
    FROM cliente
    WHERE ciudad = 'Madrid' AND
          codigo_empleado_rep_ventas IN (11, 30);
    

    o bé

    SELECT * 
    FROM cliente
    WHERE ciudad = 'Madrid' AND
          (codigo_empleado_rep_ventas = 11 OR  codigo_empleado_rep_ventas = 30);
    

    Compte: Calen parèntesis en l'OR

    Degut a la prioritat de AND sobre l'OR, si no posem parèntesis, el resultat no serà l'esperat.

    En SQL, sempre que puguem, utilitzarem IN.