Czy jest jakiś haczyk? Tak, jest -- lewe sprzężenia są formą sprzężenia zewnętrznego, podczas gdy sprzężenia wewnętrzne są formą, cóż, sprzężenia wewnętrznego.
Oto przykłady, które pokazują różnicę. Zaczniemy od danych podstawowych:
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 |
+----+-----------+
I tutaj zobaczymy różnicę między sprzężeniem wewnętrznym a sprzężeniem lewym:
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 rzędy.
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 rzędów! Co się stało?
Złącza zewnętrzne, takie jak left join
zachowaj wiersze, które nie pasują — tak więc wiersze o identyfikatorach 2 i 5 są zachowywane przez zapytanie ze sprzężeniem lewym. Pozostałe kolumny są wypełnione NULL.
Innymi słowy, sprzężenia lewe i wewnętrzne nie są wymienne.