- INNER JOIN
JOIN interno, stabilisce che i dati che verranno restituiti sono soltanto quelli che corrispondono al critero formato dalla relazione dei due campi in due tabelle diverse
tutte le righe che non rientrano nella relazione sono escluse, sia dall'origine principale che da quelle coinvolte nelle relazioni
sintassi tabella:
SELECT seleziona i campi con gli alias da visualizzare
ALIAS1.campo1,
ALIAS2.campo2,
ALIAS1.campo3,
ALIAS2.campo4,
....
FROM NOME_TABELLA1 ALIAS1 indico la prima tabella principale do un alias (facolativo ma consigliato)
INNER JOIN NOME_TABELLA2 ALIAS2 relazione con la seconda tabelle do un alias
ON ALIAS1.campoconfronto operatore ALIAS2.campoconfronto tipo di relazione tra le due tabelle secondo il campo indicato
é possibile inserire più tipi di relazioni unendole con l'operatore logico AND
ON ALIAS1.campoconfronto1 operatore ALIAS2.campoconfronto1 AND campoconfronto1
ALIAS1.campoconfronto2 operatore ALIAS2.campoconfronto2 campoconfronto2
sintassi query SELECT:
SELECT seleziona i campi con gli alias da visualizzare
ALIAS1.campo1,
ALIAS2.campo2,
ALIAS1.campo3,
ALIAS2.campo4,
....
FROM indico la prima SELECT principale do un alias
(
SELECT
....
) ALIAS1 va sempre indicato un alias (senza comando AS)
INNER JOIN indico la seconda SELECT do un alias
(
SELECT
....
) ALIAS2
ON ALIAS1.campoconfronto operatore ALIAS2.campoconfronto relazione tra le due tabelle secondo il campo indicato
esempio: join tra tabella Personale e Dipendenti per nome e cognome (non uso alias)
SELECT
Personale.nome,
Personale.cognome
FROM
Personale
INNER JOIN Dipendenti
ON Personale.nome = Dipendenti.nome AND Personale.cognome = Dipendenti.cognome
é possssibile unire insieme più join anche di diverso tipo o creare una catena di join
sintassi mutipla/concatenata:
INNER JOIN NOME_TABELLA1
ON codizioni1 operatore codizioni2
LEFT OUTER JOIN NOME_TABELLA2
ON codizioni1 operatore codizioni3
........
esempio: INNER JOIN concatenato
SELECT
a.NomeA,
d.NomeD
FROM TableA a
INNER JOIN TableB b on b.aID = a.aID
INNER JOIN TableC c on c.cID = b.cID
INNER JOIN TableD d on d.dID = a.dID
WHERE DATE(c.`date`) = CURDATE()
- LEFT OUTER JOIN
aggiunge ai risultati del INNER JOIN anche quelle righe presenti nell'origine FROM (a sinistra (LEFT) della clausola JOIN)
le nuove righe formate da questi dati aggiuntivi sono riempiti con valori NULL
- RIGHT OUTER JOIN
aggiunge ai risultati del INNER JOIN anche quelle righe presenti nella JOIN (a detra (RIGHT) della clausola JOIN)
le nuove righe formate da questi dati aggiuntivi sono riempiti con valori NULL
- FULL OUTER JOIN
include tutte le righe presenti nella FROM e nella JOIN
i dati presenti in una delle tabelle ma non corrisponti nell'altra conterranno valori NULL
ATTENZIONE: non funzona con SQL Excel, si usa una LEFT UNION RIGHT
- CROSS JOIN
un JOIN non supportato direttamente da tutti i database, basato praticamente sull'assenza di una relazione che limiti i dati restituiti
comporta la permutazione di tutte le righe delle origini coinvolte nella relazione
ATTENZIONE: non funzona con SQL Excel, si usa una LEFT UNION RIGHT