INNER JOIN LA PIÙ USATA
Restituisce solo le righe con valori corrispondenti in entrambe le tabelle. È il tipo di JOIN predefinito e il più usato.
SELECT orders.id, customers.name, orders.amount
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id
Punti chiave:
- Restituisce solo i record corrispondenti di entrambe le tabelle
- Esclude automaticamente le righe senza corrispondenza
- La JOIN più efficiente in termini di prestazioni
- Si può scrivere semplicemente
JOIN (INNER è implicito)
📚 Approfondisci: JOIN SQL per principianti, Guida alle JOIN in MySQL, Guida alle JOIN in SQL Server
LEFT JOIN
Restituisce tutte le righe della tabella di sinistra e le righe corrispondenti della tabella di destra. Se non c'è corrispondenza, le colonne della tabella di destra restituiscono valori NULL.
SELECT customers.name, orders.amount
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
Punti chiave:
- Mantiene tutti i record della tabella di sinistra (la prima)
- Compaiono valori NULL nelle colonne della tabella di destra senza corrispondenza
- Nota anche come LEFT OUTER JOIN
- Utile per trovare record senza dati correlati
📚 Approfondisci: JOIN SQL per principianti, Guida alle JOIN in MySQL, Guida alle JOIN in SQL Server
RIGHT JOIN
Restituisce tutte le righe della tabella di destra e le righe corrispondenti della tabella di sinistra. È l'opposto della LEFT JOIN.
SELECT orders.amount, customers.name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.id
Punti chiave:
- Mantiene tutti i record della tabella di destra (la seconda)
- Compaiono valori NULL nelle colonne della tabella di sinistra senza corrispondenza
- Nota anche come RIGHT OUTER JOIN
- Si può sempre riscrivere come LEFT JOIN
📚 Approfondisci: JOIN SQL per principianti, Guida alle JOIN in MySQL, Guida alle JOIN in SQL Server
FULL OUTER JOIN
Restituisce tutte le righe di entrambe le tabelle, con valori NULL dove non ci sono corrispondenze in nessuna delle due direzioni.
SELECT customers.name, orders.amount
FROM customers
FULL OUTER JOIN orders
ON customers.id = orders.customer_id
Punti chiave:
- Combina i risultati di LEFT JOIN e RIGHT JOIN
- Mostra tutti i record di entrambe le tabelle
- Non supportata in MySQL (usa UNION al suo posto)
- Utile per trovare tutte le relazioni e le lacune
📚 Approfondisci: JOIN SQL per principianti, Full Outer Join in MySQL, Guida alle JOIN in SQL Server
CROSS JOIN USALA CON CAUTELA
Restituisce il prodotto cartesiano delle due tabelle: ogni riga della prima tabella combinata con ogni riga della seconda.
SELECT sizes.name, colors.name
FROM sizes
CROSS JOIN colors
SELECT sizes.name, colors.name
FROM sizes, colors
Punti chiave:
- Nessuna clausola ON necessaria (nessuna condizione di join)
- Righe del risultato = (righe tabella sinistra × righe tabella destra)
- Può generare rapidamente result set enormi
- Utile per generare combinazioni o dati di test
📚 Approfondisci: JOIN SQL per principianti, Cross Join in PostgreSQL
LEFT ANTI JOIN
Restituisce le righe della tabella di sinistra che non hanno righe corrispondenti nella tabella di destra. Utile per trovare record senza relazioni.
SELECT customers.name
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
WHERE orders.id IS NULL
SELECT customers.name
FROM customers
WHERE NOT EXISTS (
SELECT 1 FROM orders
WHERE orders.customer_id = customers.id
)
Punti chiave:
- Si implementa con LEFT JOIN + WHERE IS NULL
- Trova i record senza dati correlati
- Chiamata anche "LEFT EXCLUDING JOIN"
- Esempio: clienti che non hanno mai effettuato un ordine
RIGHT ANTI JOIN
Restituisce le righe della tabella di destra che non hanno righe corrispondenti nella tabella di sinistra. È l'opposto della LEFT ANTI JOIN.
SELECT orders.id
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id
WHERE customers.id IS NULL
SELECT orders.id
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.id
WHERE customers.id IS NULL
Punti chiave:
- Si implementa con RIGHT JOIN + WHERE IS NULL
- Trova i record orfani nella tabella di destra
- Si può sempre riscrivere come LEFT ANTI JOIN
- Esempio: ordini senza un cliente valido