Mysql
 sql >> Database >  >> RDS >> Mysql

Quando usare LEFT JOIN e quando usare INNER JOIN?

C'è qualche presa? Sì, c'è:i left join sono una forma di outer join, mentre i inner join sono una forma di, beh, inner join.

Ecco degli esempi che mostrano la differenza. Inizieremo con i dati di base:

mysql> select * from j1;
+----+------------+
| id | thing      |
+----+------------+
|  1 | hi         |
|  2 | hello      |
|  3 | guten tag  |
|  4 | ciao       |
|  5 | buongiorno |
+----+------------+

mysql> select * from j2;
+----+-----------+
| id | thing     |
+----+-----------+
|  1 | bye       |
|  3 | tschau    |
|  4 | au revoir |
|  6 | so long   |
|  7 | tschuessi |
+----+-----------+

E qui vedremo la differenza tra un join interno e un join sinistro:

mysql> select * from j1 inner join j2 on j1.id = j2.id;
+----+-----------+----+-----------+
| id | thing     | id | thing     |
+----+-----------+----+-----------+
|  1 | hi        |  1 | bye       |
|  3 | guten tag |  3 | tschau    |
|  4 | ciao      |  4 | au revoir |
+----+-----------+----+-----------+

Hmm, 3 righe.

mysql> select * from j1 left join j2 on j1.id = j2.id;
+----+------------+------+-----------+
| id | thing      | id   | thing     |
+----+------------+------+-----------+
|  1 | hi         |    1 | bye       |
|  2 | hello      | NULL | NULL      |
|  3 | guten tag  |    3 | tschau    |
|  4 | ciao       |    4 | au revoir |
|  5 | buongiorno | NULL | NULL      |
+----+------------+------+-----------+

Wow, 5 righe! Cosa è successo?

Join esterni come left join conserva le righe che non corrispondono, quindi le righe con ID 2 e 5 vengono conservate dalla query di join sinistro. Le restanti colonne sono riempite con NULL.

In altre parole, i join sinistro e interno non sono intercambiabili.