| Inner và outer |
|---|
| Chỉ những dòng thỏa điều kiện ON ở cả hai bảng. Dòng không khớp ở bất kỳ phía nào bị loại bỏ. | SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id; |
| Mọi dòng từ bảng bên trái. Cột bên phải là NULL ở nơi không có giá trị khớp. | SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id; |
| Mọi dòng từ bảng bên phải. Cột bên trái là NULL ở nơi không có giá trị khớp. | SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id; |
| Mọi dòng từ cả hai bảng. Phía không khớp được điền bằng NULL. | SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id; |
| Cross và self |
|---|
| Tích Descartes. Mỗi dòng bên trái ghép với mỗi dòng bên phải. Không có mệnh đề ON. | SELECT u.name, o.total FROM users u CROSS JOIN orders o; |
| Một bảng được join với chính nó qua alias. So sánh các dòng trong cùng một bảng. | SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id; |
| Nâng cao |
|---|
| Truy vấn con trong FROM được tính cho mỗi dòng ngoài. Truy vấn con có thể tham chiếu cột của bảng ngoài. | SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o; |
| Join trên các cột trùng tên. Không có mệnh đề ON. Cẩn thận va chạm khóa ngoài ý muốn. | SELECT u.name, o.total FROM users u NATURAL JOIN orders o; |