Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quand utiliser LEFT JOIN et quand utiliser INNER JOIN ?

Y a-t-il un piège? Oui, il y en a - les jointures gauches sont une forme de jointure externe, tandis que les jointures internes sont une forme de, eh bien, de jointure interne.

Voici des exemples qui montrent la différence. Commençons par les données de 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 |
+----+-----------+

Et ici, nous verrons la différence entre une jointure interne et une jointure gauche :

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 |
+----+-----------+----+-----------+

Hum, 3 lignes.

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 rangées! Que s'est-il passé ?

Jointures externes telles que left join conserver les lignes qui ne correspondent pas -- ainsi les lignes avec les identifiants 2 et 5 sont préservées par la requête de jointure gauche. Les colonnes restantes sont remplies avec NULL.

En d'autres termes, les jointures gauche et interne ne sont pas interchangeables.