Qual è la differenza tra INNER JOIN
, LEFT JOIN
, RIGHT JOIN
e FULL JOIN
?
in MySQL?
Leggere questo articolo originale su The Code Project vi aiuterà molto: Rappresentazione visiva delle giunzioni SQL.
Controlla anche questo post: SQL SERVER - Migliori prestazioni - LEFT JOIN o NOT IN?.
Trova quello originale a: Differenza tra JOIN e OUTER JOIN in MySQL.
INNER JOIN ottiene tutti i record che sono comuni tra le due tabelle in base alla clausola ON fornita.
LEFT JOIN ottiene tutti i record dalla tabella LEFT collegata, ma se avete selezionato alcune colonne dalla tabella RIGHT, se non ci sono record correlati, queste colonne conterranno NULL.
RIGHT JOIN è come la precedente ma ottiene tutti i record della tabella RIGHT.
FULL JOIN prende tutti i record da entrambe le tabelle e mette NULL nelle colonne dove non esistono record correlati nella tabella opposta.
Una clausola SQL JOIN è usata per combinare righe da due o più tabelle, sulla base di un campo comune tra loro.
Ci sono diversi tipi di join disponibili in SQL:
INNER JOIN: restituisce le righe quando c'è una corrispondenza in entrambe le tabelle.
LEFT JOIN: restituisce tutte le righe della tabella di sinistra, anche se non ci sono corrispondenze nella tabella di destra.
RIGHT JOIN: restituisce tutte le righe della tabella di destra, anche se non ci sono corrispondenze nella tabella di sinistra.
FULL JOIN: Combina i risultati di entrambe le outer join di sinistra e di destra.
La tabella unita conterrà tutti i record di entrambe le tabelle e riempirà i NULL per le corrispondenze mancanti su entrambi i lati.
SELF JOIN: si usa per unire una tabella a se stessa come se la tabella fosse due tabelle, rinominando temporaneamente almeno una tabella nell'istruzione SQL.
CARTESIAN JOIN: restituisce il prodotto cartesiano degli insiemi di record delle due o più tabelle unite.
Possiamo prendere ogni prima quattro join in Dettagli :
Abbiamo due tabelle con i seguenti valori.
TabellaA
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
TabellaB
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
RIUNIONE DI UN PARTECIPANTE
Nota :dà l'intersezione delle due tabelle, cioè le righe che hanno in comune nella tabella A e nella tabella B
Sintassi
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Applicala nella nostra tabella di esempio:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
Il risultato sarà
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
LEFT JOIN
Nota : darà tutte le righe selezionate nella tabella A, più tutte le righe comuni selezionate nella tabella B.
Sintassi
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Applicala nella nostra tabella di esempio:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Risultato
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
GIUNZIONE A DESTRA
Nota : darà tutte le righe selezionate in TableB, più tutte le righe comuni selezionate in TableA.
Sintassi
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Applicala nella nostra tabella di esempio:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Risultato
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
FULL JOIN
Nota :Restituirà tutti i valori selezionati da entrambe le tabelle.
Sintassi
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Applicala nella nostra tabella di esempio:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Risultato
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
Fatto interessante
Per gli INNER join l'ordine non ha importanza
Per le giunzioni OUTER (SINISTRA, DESTRA o COMPLETA), l'ordine è importante
Meglio andare a controllare questo Link che vi darà dettagli interessanti sull'ordine di unione