Is er een vangst? Ja, dat is zo -- left joins zijn een vorm van outer join, terwijl inner joins een vorm zijn van, nou ja, inner join.
Hier zijn voorbeelden die het verschil aantonen. We beginnen met de basisgegevens:
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 |
+----+-----------+
En hier zien we het verschil tussen een inner join en een 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 rijen.
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 |
+----+------------+------+-----------+
Wauw, 5 rijen! Wat is er gebeurd?
Outer joins zoals left join
bewaar rijen die niet overeenkomen -- dus rijen met id 2 en 5 worden bewaard door de linker join-query. De overige kolommen zijn ingevuld met NULL.
Met andere woorden, left en inner joins zijn niet uitwisselbaar.