| Inner และ outer |
|---|
| เฉพาะแถวที่เงื่อนไข ON ตรงกันในทั้งสองตาราง แถวที่ไม่ตรงในฝั่งใดฝั่งหนึ่งจะถูกตัดทิ้ง | SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id; |
| ทุกแถวจากตารางฝั่งซ้าย คอลัมน์ฝั่งขวาเป็น NULL ในตำแหน่งที่ไม่มีค่าตรงกัน | SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id; |
| ทุกแถวจากตารางฝั่งขวา คอลัมน์ฝั่งซ้ายเป็น NULL ในตำแหน่งที่ไม่มีค่าตรงกัน | SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id; |
| ทุกแถวจากทั้งสองตาราง ฝั่งที่ไม่ตรงกันจะถูกเติมด้วย NULL | SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id; |
| Cross และ self |
|---|
| ผลคูณคาร์ทีเซียน ทุกแถวฝั่งซ้ายจับคู่กับทุกแถวฝั่งขวา ไม่มีเงื่อนไข ON | SELECT u.name, o.total FROM users u CROSS JOIN orders o; |
| ตารางถูก join กับตัวเองผ่าน alias ใช้เปรียบเทียบแถวภายในตารางเดียว | 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; |
| ขั้นสูง |
|---|
| ซับคิวรีใน FROM ที่ประเมินต่อแถวนอกหนึ่งครั้ง ซับคิวรีอ้างถึงคอลัมน์ของตารางนอกได้ | SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o; |
| join บนคอลัมน์ที่มีชื่อเหมือนกัน ไม่มีเงื่อนไข ON ระวังการชนกันของคีย์ที่ไม่ได้ตั้งใจ | SELECT u.name, o.total FROM users u NATURAL JOIN orders o; |