Consultes SQL – Subconsultes

Una subconsulta és una consulta dins d’una altra consulta, utilitzada per filtrar, comparar o agregar dades segons condicions específiques.
En aquesta guia de DeGalaLab aprendràs com aplicar subconsultes SQL amb operadors com WHERE, HAVING, IN, EXISTS, BETWEEN i altres, amb exemples pràctics i explicacions pas a pas.

SQL - Subqueries

🧭 Rol: Exercice
🗂️ Àrea: Data Science
📅 Any: 2025
🧩 Stack: SQL
📝 Crèdits: deGalaLab

Resultats / Insights

| Operador | Ús principal | Retorna quan... |
| -------------- | ----------------------- | --------------------------------------- |
| **WHERE** | Filtrar segons condició | Coincideix amb el valor de subconsulta |
| **HAVING** | Filtrar grups agregats | La condició sobre l’agregació és certa |
| **BETWEEN** | Rang de valors | Valor dins del rang retornat |
| **IN** | Inclusió en conjunt | Valor pertany a la llista |
| **LIKE** | Patró de text | Coincideix amb el patró retornat |
| **IS NULL** | Valors nuls | Resultat nul o sense assignar |
| **ANY / SOME** | Comparació parcial | Condició certa per **almenys un** valor |
| **ALL** | Comparació total | Condició certa per **tots** els valors |
| **EXISTS** | Existència | Subconsulta retorna alguna fila |

Una subconsulta és una consulta dins d’una altra consulta.
S’utilitza per obtenir valors que després són comparats o filtrats en la consulta principal.

La subconsulta pot aparèixer en diferents parts de la instrucció SQL: al WHERE, HAVING, FROM, o SELECT.

WHERE

S’utilitza per filtrar resultats segons el valor retornat per una subconsulta.

SELECT Nom, Sou
FROM Empleats
WHERE Sou > (
    SELECT AVG(Sou)
    FROM Empleats
);

Retorna els empleats amb un sou superior al sou mitjà.


HAVING

Permet aplicar condicions sobre funcions d’agregació mitjançant subconsultes.

SELECT Departament, AVG(Sou) AS SouMig
FROM Empleats
GROUP BY Departament
HAVING AVG(Sou) > (
    SELECT AVG(Sou)
    FROM Empleats
);

Mostra els departaments amb sou mitjà superior al sou mitjà general.


SELECT Nom, Sou
FROM Empleats
WHERE Sou BETWEEN (
    SELECT MIN(Sou) FROM Empleats WHERE Departament = 'Vendes'
)
AND (
    SELECT MAX(Sou) FROM Empleats WHERE Departament = 'Vendes'
);

BETWEEN

Comprova si un valor està dins d’un rang retornat per una subconsulta.

Retorna els empleats amb un sou dins del rang dels sous del departament de Vendes.


SELECT Nom
FROM Empleats
WHERE Departament IN (
    SELECT NomDepartament
    FROM Departaments
    WHERE Ciutat = 'Barcelona'
);

IN

Comprova si un valor pertany a un conjunt de resultats retornat per una subconsulta.

Selecciona els empleats que treballen en departaments situats a Barcelona.


SELECT Nom
FROM Clients
WHERE Nom LIKE (
    SELECT CONCAT(Prefix, '%')
    FROM Configuracio
    WHERE Clau = 'prefix_clients'
);

LIKE

Tot i que normalment s’utilitza amb patrons de text, també pot combinar-se amb subconsultes.

Retorna els clients el nom dels quals comença amb el prefix definit a la taula Configuració.


SELECT Nom
FROM Empleats
WHERE Sou > ALL (
    SELECT Sou
    FROM Empleats
    WHERE Departament = 'Administració'
);

ANY, SOME, ALL

Permeten comparar un valor amb tots o algun dels resultats d’una subconsulta.

Retorna els empleats que cobren més que tots els empleats d’Administració.

SELECT Nom
FROM Empleats
WHERE Sou > ANY (
    SELECT Sou
    FROM Empleats
    WHERE Departament = 'Vendes'
);

Retorna els empleats que cobren més que almenys un treballador de Vendes.


SELECT Nom
FROM Clients c
WHERE EXISTS (
    SELECT *
    FROM Comandes o
    WHERE o.ID_Client = c.ID_Client
);

EXISTS

Comprova si la subconsulta retorna almenys una fila.

Mostra els clients que tenen com a mínim una comanda registrada.


OperadorÚs principalRetorna quan…
WHEREFiltrar segons condicióCoincideix amb el valor de subconsulta
HAVINGFiltrar grups agregatsLa condició sobre l’agregació és certa
BETWEENRang de valorsValor dins del rang retornat
INInclusió en conjuntValor pertany a la llista
LIKEPatró de textCoincideix amb el patró retornat
IS NULLValors nulsResultat nul o sense assignar
ANY / SOMEComparació parcialCondició certa per almenys un valor
ALLComparació totalCondició certa per tots els valors
EXISTSExistènciaSubconsulta retorna alguna fila

Pàgina de Referència

SQL: Structured Query Language