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 el department_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

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