Skip to content

Join SQL diterangkan

Perbandingan jenis JOIN SQL: inner, outer, cross, self, lateral, natural — apa yang dikembalikan setiap satu, dengan contoh satu baris.

Join menggabungkan baris daripada dua jadual berasaskan kunci berkongsi. Jenis join menentukan baris mana yang kekal apabila kunci sepadan, tiada padanan atau berulang.

Jadual rujukan · 8 entri
8 of 8 rows
Inner dan outer
Hanya baris yang keadaan ON-nya sepadan dalam kedua-dua jadual. Baris yang tidak sepadan di kedua-dua sisi dibuang.SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Semua baris daripada jadual kiri. Lajur kanan bernilai NULL apabila tiada padanan.SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Semua baris daripada jadual kanan. Lajur kiri bernilai NULL apabila tiada padanan.SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Semua baris daripada kedua-dua jadual. Sisi yang tidak sepadan diisi dengan NULL.SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Cross dan self
Hasil darab Kartesius. Setiap baris kiri dipasangkan dengan setiap baris kanan. Tiada klausa ON.SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Jadual digabungkan dengan dirinya sendiri melalui alias. Membandingkan baris dalam satu jadual.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;
Lanjutan
Subquery dalam FROM yang dinilai bagi setiap baris luar. Subquery boleh merujuk lajur jadual luar.SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Menggabungkan pada lajur yang berkongsi nama. Tiada klausa ON. Berhati-hati dengan perlanggaran kunci yang tidak disengajakan.SELECT u.name, o.total FROM users u NATURAL JOIN orders o;