Les subconsultes, també conegudes com a consultes niades, són consultes SQL que es troben dins d'altres consultes SQL. Aquestes subconsultes poden ser utilitzades en diverses parts d'una consulta principal, com ara les clàusules SELECT
, FROM
i WHERE
. En aquest tema, explorarem com utilitzar subconsultes en aquestes clàusules per realitzar consultes més complexes i potents.
Subconsultes en la clàusula SELECT
Les subconsultes en la clàusula SELECT
permeten calcular valors que es poden utilitzar com a columnes en la consulta principal. Aquestes subconsultes es coneixen com a subconsultes d'escala única perquè retornen un sol valor.
Exemple
SELECT employee_id, first_name, last_name, (SELECT department_name FROM departments WHERE departments.department_id = employees.department_id) AS department_name FROM employees;
Explicació
- La subconsulta
(SELECT department_name FROM departments WHERE departments.department_id = employees.department_id)
retorna el nom del departament per a cada empleat. - Aquest valor es mostra com una columna anomenada
department_name
en el resultat de la consulta principal.
Subconsultes en la clàusula FROM
Les subconsultes en la clàusula FROM
es coneixen com a subconsultes de taula derivada. Aquestes subconsultes creen una taula temporal que es pot utilitzar en la consulta principal.
Exemple
SELECT department_id, AVG(salary) AS average_salary FROM (SELECT department_id, salary FROM employees WHERE job_id = 'IT_PROG') AS it_programmers GROUP BY department_id;
Explicació
- La subconsulta
(SELECT department_id, salary FROM employees WHERE job_id = 'IT_PROG')
selecciona els empleats amb el treball 'IT_PROG'. - Aquesta subconsulta es tracta com una taula temporal anomenada
it_programmers
. - La consulta principal calcula el salari mitjà per departament per als programadors de TI.
Subconsultes en la clàusula WHERE
Les subconsultes en la clàusula WHERE
s'utilitzen per filtrar els resultats de la consulta principal basant-se en els valors retornats per la subconsulta.
Exemple
SELECT employee_id, first_name, last_name FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');
Explicació
- La subconsulta
(SELECT department_id FROM departments WHERE department_name = 'Sales')
retorna eldepartment_id
del departament de vendes. - La consulta principal selecciona els empleats que pertanyen a aquest departament.
Exercicis Pràctics
Exercici 1
Escriu una consulta que mostri els noms dels empleats i els seus salaris, juntament amb el salari mitjà del seu departament.
Solució
SELECT first_name, last_name, salary, (SELECT AVG(salary) FROM employees e2 WHERE e2.department_id = e1.department_id) AS average_salary FROM employees e1;
Exercici 2
Escriu una consulta que mostri el nom del departament i el nombre d'empleats en cada departament que tenen un salari superior a la mitjana del seu departament.
Solució
SELECT department_name, COUNT(*) AS num_employees FROM employees e JOIN departments d ON e.department_id = d.department_id WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id) GROUP BY department_name;
Resum
En aquest tema, hem après com utilitzar subconsultes en les clàusules SELECT
, FROM
i WHERE
per realitzar consultes més complexes i potents. Les subconsultes ens permeten calcular valors, crear taules temporals i filtrar resultats basant-se en altres consultes. Practicar amb subconsultes és essencial per dominar SQL i poder treballar amb dades de manera més eficient i efectiva.
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