Qual è la differenza tra INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN?

Qual è la differenza tra INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN? in MySQL?

Soluzione

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.

Commentari (34)

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.

Commentari (6)

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

Commentari (10)