Què és una subconsulta?
Una subconsulta és una consulta SQL que es troba dins d'una altra consulta SQL. Les subconsultes es poden utilitzar per a diverses finalitats, com ara filtrar dades, calcular valors agregats o fins i tot per a la creació de taules temporals. Les subconsultes es poden col·locar dins de les clàusules SELECT
, FROM
, WHERE
, HAVING
i altres.
Tipus de subconsultes
- Subconsultes simples: Retornen un sol valor.
- Subconsultes de múltiples valors: Retornen més d'un valor.
- Subconsultes correlacionades: Depenen de la consulta externa per a cada fila processada.
Sintaxi bàsica de les subconsultes
La sintaxi general d'una subconsulta és la següent:
SELECT column1, column2, ... FROM table1 WHERE column_name operator (SELECT column_name FROM table2 WHERE condition);
Exemple bàsic
Suposem que tenim dues taules: employees
i departments
. Volem trobar els empleats que treballen en el departament de 'Sales'.
SELECT employee_name FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');
Subconsultes en la clàusula SELECT
Les subconsultes es poden utilitzar dins de la clàusula SELECT
per calcular valors derivats.
Exemple
SELECT employee_name, (SELECT department_name FROM departments WHERE departments.department_id = employees.department_id) AS department_name FROM employees;
Subconsultes en la clàusula FROM
Les subconsultes en la clàusula FROM
es poden utilitzar per crear taules temporals.
Exemple
SELECT sub.employee_name, sub.department_name FROM (SELECT employee_name, department_id FROM employees) AS sub JOIN departments ON sub.department_id = departments.department_id;
Subconsultes en la clàusula WHERE
Les subconsultes en la clàusula WHERE
es poden utilitzar per filtrar dades basades en els resultats d'una altra consulta.
Exemple
SELECT employee_name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');
Exercicis pràctics
Exercici 1
Troba els noms dels empleats que treballen en el departament amb el nom 'HR'.
SELECT employee_name FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'HR');
Exercici 2
Troba els noms dels empleats i els noms dels seus departaments.
SELECT employee_name, (SELECT department_name FROM departments WHERE departments.department_id = employees.department_id) AS department_name FROM employees;
Exercici 3
Troba els noms dels empleats que treballen en qualsevol departament situat a 'San Francisco'.
SELECT employee_name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'San Francisco');
Solucions dels exercicis
Solució 1
SELECT employee_name FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'HR');
Solució 2
SELECT employee_name, (SELECT department_name FROM departments WHERE departments.department_id = employees.department_id) AS department_name FROM employees;
Solució 3
SELECT employee_name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'San Francisco');
Resum
En aquesta secció, hem après què són les subconsultes i com es poden utilitzar dins de diverses clàusules SQL. Hem vist exemples pràctics de subconsultes en les clàusules SELECT
, FROM
i WHERE
, i hem practicat amb exercicis per reforçar els conceptes apresos. Les subconsultes són una eina poderosa per a la manipulació i l'anàlisi de dades en SQL, i comprendre com utilitzar-les eficientment és essencial per a qualsevol programador SQL.
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