📘 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.

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.

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.

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.

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.

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.

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".

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.

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