📘 Guia SQL
1. JOIN (Unir taules)
🔍 Permet combinar dades de dues taules que tenen una relació entre elles.
▶ INNER JOIN
🎯 Mostra només les files amb coincidència a les dues taules.
projecte p: Taula que conté els projectesambit a: Taula que conté els àmbitsp.id_ambit = a.id_ambit: Uneix cada projecte amb el seu àmbit
Consulta SQL (Input):
SELECT p.nom, a.nom AS ambit
FROM projecte p
INNER JOIN ambit a ON p.id_ambit = a.id_ambit;
Resultat esperat (Output):
+------------------+------------------+
| nom | ambit |
+------------------+------------------+
| Projecte Alpha | Salut |
| Projecte Beta | Educació |
+------------------+------------------+
▶ LEFT JOIN
🎯 Mostra tots els projectes, encara que no tinguin àmbit assignat (sortirà NULL).
Consulta SQL (Input):
SELECT p.nom, a.nom AS ambit
FROM projecte p
LEFT JOIN ambit a ON p.id_ambit = a.id_ambit;
Resultat esperat (Output):
+------------------+------------------+
| nom | ambit |
+------------------+------------------+
| Projecte Alpha | Salut |
| Sense Ambit | NULL |
+------------------+------------------+
2. GROUP BY (Agrupar per camp)
🔍 Agrupa les files per una columna i permet fer càlculs per grup.
▶ GROUP BY amb COUNT()
🎯 Agrupa els projectes segons el seu àmbit i compta quants projectes hi ha a cada grup.
a.nom: Nom de l’àmbitCOUNT(*): Comptador de quants projectes té cada àmbit
Consulta SQL (Input):
SELECT a.nom AS ambit, COUNT(*) AS num_projectes
FROM ambit a
INNER JOIN projecte p ON a.id_ambit = p.id_ambit
GROUP BY a.nom;
Resultat esperat (Output):
+------------------+------------------+
| ambit | num_projectes |
+------------------+------------------+
| Salut | 3 |
| Educació | 2 |
+------------------+------------------+
3. HAVING (Filtrar agrupacions)
🔍 Filtra resultats després d’un GROUP BY (no es pot fer amb WHERE).
▶ Filtrar per COUNT()
🎯 Mostra només els àmbits amb més de 3 projectes.
HAVING COUNT(*) > 3: Només mostra àmbits amb més de 3 projectes
Consulta SQL (Input):
SELECT a.nom AS ambit, COUNT(*) AS num_projectes
FROM ambit a
INNER JOIN projecte p ON a.id_ambit = p.id_ambit
GROUP BY a.nom
HAVING COUNT(*) > 3;
Resultat esperat (Output):
+------------------+------------------+
| ambit | num_projectes |
+------------------+------------------+
| Tecnologia | 4 |
+------------------+------------------+
4. SUBCONSULTES (Consultes dins d’altres consultes)
🔍 S’utilitzen per calcular valors que es comparen dins d’una altra consulta.
▶ Filtrar amb una mitjana
🎯 Filtra els projectes amb una durada superior a la mitjana de durada de tots els projectes.
AVG(durada): Mitjana de durades de tots els projectesdurada > (...): Filtra els projectes més llargs que la mitjana
Consulta SQL (Input):
SELECT nom, durada
FROM projecte
WHERE durada > (
SELECT AVG(durada)
FROM projecte
);
Resultat esperat (Output):
+------------------+---------+
| nom | durada |
+------------------+---------+
| Projecte Alpha | 14 |
+------------------+---------+
5. COUNT() (Comptar files)
🔍 Retorna quantes files compleixen una condició (o total si no hi ha condició).
▶ Comptar investigadors
🎯 Mostra el nombre total d'investigadors.
investigador: Taula amb investigadors
Consulta SQL (Input):
SELECT COUNT(*) AS total_investigadors
FROM investigador;
Resultat esperat (Output):
+-----------------------+
| total_investigadors |
+-----------------------+
| 12 |
+-----------------------+
6. DISTINCT (Eliminar duplicats)
🔍 Evita repeticions mostrant valors únics.
▶ Eliminar duplicats d'investigadors
🎯 Mostra els noms i cognoms dels investigadors sense repeticions.
i.nom, i.cognom: Dades dels investigadors
Consulta SQL (Input):
SELECT DISTINCT i.nom, i.cognom
FROM investigador i
INNER JOIN participacio ip ON i.id_investigador = ip.id_investigador;
Resultat esperat (Output):
+-----------+------------+
| nom | cognom |
+-----------+------------+
| Anna | Riera |
| Marc | Prats |
+-----------+------------+
7. LIKE (Filtrar per patró)
🔍 Cerca textos que compleixin un patró. % vol dir qualsevol caràcter.
▶ Filtrar noms que comencen per A
🎯 Filtra els investigadors que tenen un nom que comença per "A".
'A%': Noms que comencen per A
Consulta SQL (Input):
SELECT nom, cognom
FROM investigador
WHERE nom LIKE 'A%';
Resultat esperat (Output):
+-----------+------------+
| nom | cognom |
+-----------+------------+
| Anna | Riera |
| Aina | Costa |
+-----------+------------+
8. ORDER BY (Ordenar resultats)
🔍 Organitza les files segons una o més columnes (ASC per defecte, DESC per descendent).
▶ Ordenar projectes per durada
🎯 Ordena els projectes per durada de més a menys.
ORDER BY durada DESC: Ordena projectes per durada de més a menys
Consulta SQL (Input):
SELECT nom, durada
FROM projecte
ORDER BY durada DESC;
Resultat esperat (Output):
+------------------+---------+
| nom | durada |
+------------------+---------+
| Projecte Zeta | 15 |
| Projecte Alpha | 12 |
+------------------+---------+
6. ALTRES FUNCIONS
- AVG(): Calcula el promig d’un conjunt de valors.
- SUM(): Suma els valors d'una columna.
- MIN(): Retorna el valor mínim.
- MAX(): Retorna el valor màxim.