Có bất kỳ bắt? Có đấy - các phép nối bên trái là một dạng của phép nối bên ngoài, trong khi phép nối bên trong là một dạng phép nối bên trong.
Dưới đây là các ví dụ cho thấy sự khác biệt. Chúng tôi sẽ bắt đầu với dữ liệu cơ sở:
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 |
+----+-----------+
Và ở đây chúng ta sẽ thấy sự khác biệt giữa phép nối bên trong và phép nối bên trái:
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 |
+----+-----------+----+-----------+
Rất tiếc, 3 hàng.
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 |
+----+------------+------+-----------+
Chà, 5 hàng! Điều gì đã xảy ra?
Các phép nối bên ngoài chẳng hạn như left join
giữ nguyên các hàng không khớp - vì vậy các hàng có id 2 và 5 được giữ nguyên bằng truy vấn nối bên trái. Các cột còn lại được điền bằng NULL.
Nói cách khác, các phép nối bên trái và bên trong không thể hoán đổi cho nhau.