Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wann verwendet man LEFT JOIN und wann INNER JOIN?

Gibt es einen Haken? Ja, das gibt es -- Left Joins sind eine Form von Outer Joins, während Inner Joins eine Form von, nun ja, Inner Joins sind.

Hier sind Beispiele, die den Unterschied zeigen. Wir beginnen mit den Basisdaten:

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

Und hier sehen wir den Unterschied zwischen einem Inner Join und einem Left Join:

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 Zeilen.

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 Reihen! Was ist passiert?

Äußere Joins wie left join Zeilen beibehalten, die nicht übereinstimmen – daher werden Zeilen mit den IDs 2 und 5 von der Left-Join-Abfrage beibehalten. Die restlichen Spalten werden mit NULL gefüllt.

Mit anderen Worten, linke und innere Verknüpfungen sind nicht austauschbar.