Semantik RIGHT dan FULL OUTER JOIN
Pelajari kapan masing-masing diperlukan dan cara menulis ulang RIGHT menjadi LEFT.
Semantik RIGHT dan FULL OUTER JOIN adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.
Di Luar LEFT JOIN
Setelah memahami LEFT JOIN, pewawancara menguji kebalikan dan gabungan keduanya: RIGHT JOIN dan FULL OUTER JOIN.
- RIGHT JOIN mempertahankan setiap baris dari tabel kanan.
- FULL OUTER JOIN mempertahankan baris yang tidak cocok dari kedua tabel.
Pelajaran ini mendefinisikan masing-masing dengan tepat dan menunjukkan trik penulisan ulang yang disukai pewawancara: RIGHT JOIN apa pun dapat diubah menjadi LEFT JOIN.
Definisi RIGHT JOIN
RIGHT JOIN (atau RIGHT OUTER JOIN) mempertahankan setiap baris dari tabel kanan, yaitu tabel yang ditulis setelah kata kunci JOIN. Baris kanan yang tidak cocok muncul dengan NULL pada kolom tabel kiri.
Ini adalah kebalikan tepat dari LEFT JOIN. Jika LEFT mempertahankan tabel yang disebut pertama, RIGHT mempertahankan tabel yang disebut kedua.
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c
ON o.customer_id = c.id;
-- keeps ALL customers, even those
-- with no order (Carol -> amount NULL)Tabel-Tabel Lagi
Data yang sama seperti sebelumnya. Carol (pelanggan 3) tidak memiliki pesanan. Semua baris pesanan di sini merujuk ke pelanggan yang ada, sehingga ketika pelanggan menjadi sisi yang dipertahankan, tidak ada pesanan yang tidak memiliki pelanggan.
-- customers orders
-- 1 | Alice 10 | 1 | 50
-- 2 | Bob 11 | 1 | 75
-- 3 | Carol 12 | 2 | 20Menulis Ulang RIGHT sebagai LEFT
Inti jawabannya dalam wawancara: RIGHT JOIN jarang digunakan dalam praktik karena Anda selalu dapat menukar urutan tabel dan menggunakan LEFT JOIN. Kedua kueri di bawah ini secara logis identik.
Banyak panduan gaya melarang RIGHT JOIN sepenuhnya karena membaca dari kiri ke kanan dan selalu mempertahankan tabel kiri lebih mudah dianalisis.
-- RIGHT JOIN
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c ON o.customer_id = c.id;
-- Equivalent LEFT JOIN (preferred)
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;Definisi FULL OUTER JOIN
FULL OUTER JOIN mempertahankan baris yang tidak cocok dari kedua tabel. Anggaplah ini sebagai gabungan LEFT JOIN dan RIGHT JOIN:
- Pasangan yang cocok muncul seperti biasa.
- Baris kiri tanpa kecocokan: kolom kanan bernilai NULL.
- Baris kanan tanpa kecocokan: kolom kiri bernilai NULL.
Ini menjawab permintaan "tampilkan semuanya dari kedua sisi dan sejajarkan yang cocok."
SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o
ON o.customer_id = c.id;Saat FULL OUTER Paling Berguna
FULL OUTER JOIN merupakan pilihan utama untuk rekonsiliasi: membandingkan dua set data yang seharusnya cocok, tetapi mungkin tidak.
Bayangkan tabel orders dan tabel payments yang terpisah. FULL OUTER JOIN berdasarkan id pesanan menampilkan pesanan tanpa pembayaran dan pembayaran tanpa pesanan yang cocok dalam satu hasil, masing-masing ditandai oleh NULL pada sisi yang tidak ada.
SELECT o.id AS order_id, p.id AS payment_id
FROM orders o
FULL OUTER JOIN payments p
ON p.order_id = o.id
WHERE o.id IS NULL OR p.id IS NULL;
-- rows where one side is missingKesadaran Dialek
Pewawancara mungkin menguji portabilitas. MySQL tidak memiliki kata kunci FULL OUTER JOIN (hingga versi 8). Postgres, SQL Server, dan Oracle mendukungnya.
Di MySQL, Anda dapat menirunya dengan menggabungkan LEFT JOIN dan RIGHT JOIN menggunakan UNION (yang menghapus baris cocok yang terduplikasi). Mengetahui perbedaan ini menunjukkan pengalaman dunia nyata.
-- FULL OUTER JOIN emulated in MySQL
SELECT c.name, o.id FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.name, o.id FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;Sekilas Empat Jenis JOIN
Simpan tabel ini dalam ingatan Anda. "Dipertahankan" berarti baris yang tidak cocok tetap ada dengan NULL.
- INNER JOIN: hanya baris yang cocok. Tidak ada yang dipertahankan.
- LEFT JOIN: semua baris kiri dipertahankan.
- RIGHT JOIN: semua baris kanan dipertahankan.
- FULL OUTER JOIN: kedua sisi dipertahankan.
Setiap pertanyaan wawancara tentang penggabungan luar pada akhirnya hanya menentukan sisi mana yang harus dipertahankan.
Memilih di Antaranya
Pilih penggabungan dengan bertanya, "Baris yang tidak cocok mana yang harus saya pertahankan?"
- Hanya pertahankan baris tabel utama: LEFT JOIN (letakkan tabel utama terlebih dahulu).
- Memerlukan kedua kumpulan baris yang tidak cocok untuk rekonsiliasi: FULL OUTER JOIN.
- Hanya kecocokan yang penting: INNER JOIN.
Anda hampir tidak pernah memilih RIGHT JOIN secara langsung; Anda dapat menyusunnya ulang sebagai LEFT JOIN.
Contoh Rekonsiliasi
Gunakan FULL OUTER JOIN untuk memberi label status setiap baris. CASE berdasarkan pola NULL memberi tahu Anda sisi mana yang tidak ada—ini adalah kueri audit klasik.
SELECT
COALESCE(o.id, p.order_id) AS ord,
CASE
WHEN p.id IS NULL THEN 'no payment'
WHEN o.id IS NULL THEN 'orphan payment'
ELSE 'matched'
END AS status
FROM orders o
FULL OUTER JOIN payments p ON p.order_id = o.id;Kesalahpahaman Umum
Kandidat sering mengira FULL OUTER JOIN mengembalikan produk Kartesius dari baris-baris yang tidak cocok. Itu tidak benar. Baris yang tidak cocok di masing-masing sisi muncul tepat sekali, dipasangkan dengan NULL, dan tidak pernah dikalikan satu sama lain.
Baris yang cocok tetap mengikuti penggandaan penggabungan normal (satu baris keluaran untuk setiap pasangan yang cocok), aturan perluasan yang sama seperti penggabungan apa pun.
Pemeriksaan Singkat
Pewawancara meminta Anda menulis ulang kueri untuk tim yang melarang RIGHT JOIN.
Rangkuman
RIGHT JOIN mempertahankan tabel kanan; FULL OUTER JOIN mempertahankan kedua tabel. RIGHT JOIN apa pun dapat ditulis ulang sebagai LEFT JOIN dengan menukar urutan tabel, sehingga tim lebih memilih LEFT.
- FULL OUTER ideal untuk merekonsiliasi dua kumpulan data.
- MySQL tidak memiliki FULL OUTER; tiru dengan LEFT + RIGHT +
UNION. - Pilih penggabungan dengan menentukan baris yang tidak cocok mana yang ingin dipertahankan.
- Baris yang tidak cocok muncul sekali dengan NULL, tidak pernah sebagai produk Kartesius.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Semantik RIGHT dan FULL OUTER JOIN” gratis?
Ya — teks lengkap “Semantik RIGHT dan FULL OUTER JOIN” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Semantik RIGHT dan FULL OUTER JOIN”?
Pelajari kapan masing-masing diperlukan dan cara menulis ulang RIGHT menjadi LEFT. Kamu berlatih Coding Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Coding Interview Prep?
Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Semantik RIGHT dan FULL OUTER JOIN” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Coding Interview Prep ini?
Ya. Setiap pelajaran Coding Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- LEFT JOIN dan Mempertahankan Baris Tanpa Pasangan
- Semantik RIGHT dan FULL OUTER JOIN
- Menemukan Baris Tanpa Kecocokan (Anti-JOIN)
- Jebakan WHERE pada OUTER JOIN