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ó
- Consulta principal: Selecciona el nom i el salari dels empleats.
- Subconsulta correlacionada: Calcula el salari mitjà dels empleats dins del mateix departament que l'empleat actual de la consulta principal.
- 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ó
- Consulta principal: Selecciona el nom dels departaments.
- Subconsulta correlacionada: Verifica si existeix almenys un empleat en el departament actual de la consulta principal amb un salari superior a 60000.
- 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
- Utilitzar LIKE per a coincidències de patrons
- Operadors IN i BETWEEN
- Valors NULL i IS NULL
- Agrupar dades amb GROUP BY
- Clàusula HAVING
Mòdul 5: Manipulació de dades
Mòdul 6: Funcions avançades de SQL
Mòdul 7: Subconsultes i consultes niades
- Introducció a les subconsultes
- Subconsultes correlacionades
- EXISTS i NOT EXISTS
- Utilitzar subconsultes en les clàusules SELECT, FROM i WHERE
Mòdul 8: Índexs i optimització del rendiment
- Comprendre els índexs
- Crear i gestionar índexs
- Tècniques d'optimització de consultes
- Analitzar el rendiment de les consultes
Mòdul 9: Transaccions i concurrència
- Introducció a les transaccions
- Propietats ACID
- Instruccions de control de transaccions
- Gestionar la concurrència
Mòdul 10: Temes avançats
Mòdul 11: SQL en la pràctica
- Casos d'ús del món real
- Millors pràctiques
- SQL per a l'anàlisi de dades
- SQL en el desenvolupament web