Introducció

Les subconsultes correlacionades són un tipus especial de subconsulta on la subconsulta depèn de la consulta principal per a la seva execució. Això significa que la subconsulta s'executa una vegada per cada fila processada per la consulta principal. Aquest tipus de subconsulta pot ser molt potent, però també pot ser més complex i menys eficient que les subconsultes no correlacionades.

Conceptes clau

  • Subconsulta: Una consulta dins d'una altra consulta.
  • Subconsulta correlacionada: Una subconsulta que fa referència a una o més columnes de la consulta principal.
  • Consulta principal: La consulta que conté la subconsulta.

Sintaxi bàsica

La sintaxi d'una subconsulta correlacionada és similar a la d'una subconsulta no correlacionada, però amb la diferència que la subconsulta fa referència a columnes de la consulta principal.

SELECT columna1, columna2
FROM taula1 AS alias1
WHERE columna3 operador (SELECT columna4
                         FROM taula2 AS alias2
                         WHERE alias1.columna5 = alias2.columna6);

Exemple pràctic

Suposem que tenim dues taules: empleats i departaments.

Taula empleats

id nom departament_id salari
1 Anna 1 50000
2 Bernat 2 60000
3 Carla 1 55000
4 David 3 45000
5 Eva 2 70000

Taula departaments

id nom
1 Recursos Humans
2 IT
3 Finances

Objectiu

Volem trobar els empleats que tenen un salari superior a la mitjana del seu departament.

Consulta SQL

SELECT e.nom, e.salari
FROM empleats e
WHERE e.salari > (SELECT AVG(e2.salari)
                  FROM empleats e2
                  WHERE e2.departament_id = e.departament_id);

Explicació

  1. Consulta principal: Selecciona el nom i el salari dels empleats.
  2. Subconsulta correlacionada: Calcula el salari mitjà dels empleats dins del mateix departament que l'empleat actual de la consulta principal.
  3. Condició: La consulta principal només retorna els empleats el salari dels quals és superior a la mitjana del seu departament.

Exercici pràctic

Enunciat

Utilitzant les taules empleats i departaments, escriu una consulta per trobar els departaments on almenys un empleat té un salari superior a 60000.

Solució

SELECT d.nom
FROM departaments d
WHERE EXISTS (SELECT 1
              FROM empleats e
              WHERE e.departament_id = d.id
              AND e.salari > 60000);

Explicació

  1. Consulta principal: Selecciona el nom dels departaments.
  2. Subconsulta correlacionada: Verifica si existeix almenys un empleat en el departament actual de la consulta principal amb un salari superior a 60000.
  3. Condició: La consulta principal només retorna els departaments que compleixen la condició de la subconsulta.

Errors comuns

  • No correlacionar correctament: Assegura't que la subconsulta fa referència a la consulta principal de manera adequada.
  • Ineficàcia: Les subconsultes correlacionades poden ser lentes. Considera alternatives com les unions (JOIN) si el rendiment és un problema.
  • Confusió amb subconsultes no correlacionades: Recorda que les subconsultes correlacionades depenen de la consulta principal, mentre que les no correlacionades no.

Consells addicionals

  • Optimització: Utilitza índexs adequats per millorar el rendiment de les subconsultes correlacionades.
  • Claredat: Mantén les subconsultes simples i clares per facilitar la comprensió i el manteniment del codi.

Conclusió

Les subconsultes correlacionades són una eina poderosa en SQL que permeten realitzar consultes complexes que depenen de la consulta principal. Tot i que poden ser menys eficients que altres mètodes, la seva flexibilitat les fa molt útils en moltes situacions. Practicar amb exemples reals i comprendre els seus mecanismes interns és clau per dominar aquesta tècnica.

Curs de SQL

Mòdul 1: Introducció a SQL

Mòdul 2: Consultes bàsiques de SQL

Mòdul 3: Treballar amb múltiples taules

Mòdul 4: Filtratge avançat de dades

Mòdul 5: Manipulació de dades

Mòdul 6: Funcions avançades de SQL

Mòdul 7: Subconsultes i consultes niades

Mòdul 8: Índexs i optimització del rendiment

Mòdul 9: Transaccions i concurrència

Mòdul 10: Temes avançats

Mòdul 11: SQL en la pràctica

Mòdul 12: Projecte final

© Copyright 2024. Tots els drets reservats