LEFT JOIN dan Mempertahankan Baris Tanpa Pasangan
Pahami apa yang dipertahankan LEFT JOIN dan bagaimana NULL muncul pada baris yang tidak cocok.
LEFT JOIN dan Mempertahankan Baris Tanpa Pasangan adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 1 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 SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Skenario Wawancara
Pewawancara berkata: "Tampilkan setiap pelanggan dan pesanannya, termasuk pelanggan yang belum pernah melakukan pemesanan." INNER JOIN menghapus pelanggan tanpa pesanan, sehingga tidak memenuhi persyaratan ini. Solusinya adalah LEFT JOIN.
LEFT JOIN mempertahankan setiap baris dari tabel kiri (tabel yang disebut pertama), lalu menambahkan baris yang cocok dari tabel kanan jika ada. Pelajaran ini membangun model mental yang tepat seperti yang diharapkan pewawancara.
Jaminan LEFT JOIN
Jaminan utamanya: setiap baris dari tabel kiri muncul dalam keluaran setidaknya sekali, baik memiliki kecocokan maupun tidak.
- Jika suatu baris kiri menemukan kecocokan di kanan, Anda mendapatkan satu baris keluaran untuk setiap kecocokan.
- Jika suatu baris kiri tidak menemukan kecocokan, Anda tetap mendapatkan satu baris keluaran, dengan semua kolom tabel kanan ditetapkan ke
NULL.
Inilah alasan pewawancara menyebutnya penggabungan luar: baris yang berada di luar himpunan kecocokan dipertahankan, bukan dibuang.
Dua Tabel
Sepanjang pelajaran ini kita menggunakan dua tabel sederhana. customers berisi setiap pelanggan; orders mencatat pembelian dan merujuk ke pelanggan melalui customer_id.
Perhatikan bahwa pelanggan 3 (Carol) tidak memiliki baris dalam orders. Pelanggan yang tidak cocok inilah yang harus dipertahankan oleh LEFT JOIN.
-- customers
-- id | name
-- 1 | Alice
-- 2 | Bob
-- 3 | Carol
-- orders
-- id | customer_id | amount
-- 10 | 1 | 50
-- 11 | 1 | 75
-- 12 | 2 | 20Menulis LEFT JOIN
Sintaksnya menyerupai penggabungan dalam, dengan mengganti INNER menjadi LEFT (kata OUTER bersifat opsional: LEFT JOIN dan LEFT OUTER JOIN identik).
Tabel yang ditulis sebelum kata kunci tersebut adalah sisi kiri yang dipertahankan. Urutan penting: customers LEFT JOIN orders mempertahankan semua pelanggan, bukan semua pesanan.
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id;Membaca Hasil
Berikut adalah keluaran kueri tersebut. Alice memiliki dua kecocokan, jadi ia muncul dua kali. Bob memiliki satu kecocokan. Carol tidak memiliki kecocokan sama sekali, tetapi tetap muncul dengan NULL pada kolom amount.
Satu baris Carol dengan NULL tersebut adalah ciri khas LEFT JOIN. Pewawancara yang mengamati penalaran Anda dengan lantang ingin mendengar: "baris kiri yang tidak cocok tetap ada, dengan NULL di sisi kanan."
-- name | amount
-- Alice | 50
-- Alice | 75
-- Bob | 20
-- Carol | NULL <-- preserved, no matchAsal NULL
NULL tidak disimpan di mana pun. Basis data menghasilkannya karena tidak ada baris dari tabel kanan yang dapat menyediakan amount.
Setiap kolom yang diambil dari tabel kanan menjadi NULL untuk baris kiri yang tidak cocok: o.id, o.customer_id, dan o.amount semuanya NULL pada baris Carol. Hal ini penting karena o.customer_id yang bernilai NULL tidak berarti pelanggan tersebut tidak memiliki id; itu berarti sama sekali tidak ada pesanan yang cocok.
Menghitung Pesanan per Pelanggan
Pertanyaan lanjutan yang umum: "Berapa banyak pesanan yang dimiliki setiap pelanggan, termasuk yang jumlahnya nol?" LEFT JOIN ditambah COUNT memberikan hasil yang tepat, tetapi Anda harus menghitung kolom dari tabel kanan, bukan *.
COUNT(o.id) mengabaikan NULL, sehingga hasil Carol adalah 0. COUNT(*) akan keliru mengembalikan 1 untuk Carol karena baris NULL yang dihasilkan tetap dihitung sebagai satu baris.
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Alice | 2
-- Bob | 1
-- Carol | 0Jebakan COUNT(*) versus COUNT(kolom)
Ini adalah jebakan klasik dalam wawancara. Setelah LEFT JOIN, baris kiri yang tidak cocok tetap ada secara fisik dalam hasil, dengan kolom-kolom kanan bernilai NULL.
COUNT(*)menghitung baris tersebut, sehingga menghasilkan 1 untuk pelanggan tanpa pesanan.COUNT(o.id)melewati NULL, sehingga dengan tepat menghasilkan 0.
Selalu hitung kolom yang bernilai NULL pada sisi tanpa kecocokan jika Anda memerlukan nilai nol yang sebenarnya.
-- WRONG: Carol shows 1
SELECT c.name, COUNT(*) AS n
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;Menjumlahkan dengan LEFT JOIN
Agregat selain COUNT menangani NULL yang dihasilkan dengan baik. SUM mengabaikan NULL, sehingga pelanggan yang tidak cocok menghasilkan NULL (bukan kesalahan).
Pewawancara sering menginginkan nol, bukan NULL, untuk pelaporan. Bungkus agregat tersebut dengan COALESCE untuk menggantinya dengan nilai bawaan.
SELECT c.name,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Alice | 125
-- Bob | 20
-- Carol | 0Tabel Kiri versus Tabel Kanan, Dijelaskan dengan Jelas
Ketika pewawancara bertanya "tabel mana yang dipertahankan?", jawablah dengan yakin: tabel yang berada di sebelah kiri kata kunci JOIN. Bacalah dari kiri ke kanan.
A LEFT JOIN B = pertahankan semua baris A. Untuk mempertahankan semua baris B, Anda dapat menukar menjadi B LEFT JOIN A atau menggunakan RIGHT JOIN. Sebagian besar tim lebih memilih LEFT JOIN secara eksklusif demi keterbacaan, cukup dengan menukar urutan tabel.
Daftar Periksa dalam Pikiran
Ketika melihat LEFT JOIN dalam wawancara, sebutkan daftar periksa berikut dengan lantang:
- Sisi yang dipertahankan? Tabel kiri; semua baris dipertahankan.
- Baris yang tidak cocok? Muncul sekali dengan NULL dari sisi kanan.
- Menghitung? Gunakan
COUNT(right_col)untuk memperoleh nilai nol yang sebenarnya. - Menjumlahkan? Bungkus dengan
COALESCEjika Anda memerlukan 0, bukan NULL.
Mengucapkan daftar periksa ini menunjukkan ketelitian tingkat senior.
Pemeriksaan Singkat
Ujilah intuisi Anda tentang LEFT JOIN dalam penghitungan.
Ringkasan
LEFT JOIN mempertahankan setiap baris dari tabel kiri. Baris kiri yang cocok dipasangkan dengan kecocokan di kanan; baris kiri yang tidak cocok tetap ada satu kali dengan NULL pada semua kolom tabel kanan.
- Tabel kiri adalah tabel yang berada sebelum kata kunci
JOIN. - NULL yang dihasilkan menandai baris tanpa kecocokan.
COUNT(right_col)memberikan nilai nol yang sebenarnya;COUNT(*)tidak.COALESCE(SUM(...), 0)mengubah total NULL menjadi nol.
Ini adalah dasar untuk menemukan data yang hilang dan penggabungan anti pada pelajaran-pelajaran berikutnya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “LEFT JOIN dan Mempertahankan Baris Tanpa Pasangan” gratis?
Ya — teks lengkap “LEFT JOIN dan Mempertahankan Baris Tanpa Pasangan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “LEFT JOIN dan Mempertahankan Baris Tanpa Pasangan”?
Pahami apa yang dipertahankan LEFT JOIN dan bagaimana NULL muncul pada baris yang tidak cocok. Kamu berlatih SQL 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 SQL Interview Prep?
Tidak diperlukan pengalaman sebelumnya. SQL 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 1 dari 4.
Berapa lama pelajaran “LEFT JOIN dan Mempertahankan Baris Tanpa Pasangan” 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 SQL Interview Prep ini?
Ya. Setiap pelajaran SQL 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