0Pricing
SQL Interview Prep · Pelajaran

Membandingkan Baris dalam Satu Tabel

Pola SELF JOIN untuk menemukan pasangan, duplikat, dan rekaman yang berdekatan.

Membandingkan Baris dalam Satu Tabel adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 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.

Penggabungan Mandiri untuk Perbandingan Baris

Selain hierarki, penggunaan utama lain penggabungan mandiri adalah membandingkan baris dari tabel yang sama satu sama lain. Alih-alih hubungan induk-anak, Anda memasangkan baris sembarang untuk menemukan duplikat, kecocokan hampir sama, atau rekaman bersebelahan.

Polanya sama: beri alias pada tabel dua kali dan tulis kondisi ON yang menyatakan hubungan antara dua baris yang ingin Anda pasangkan.

Menemukan Pasangan dalam Kelompok yang Sama

Pertanyaan klasik: temukan semua pasangan karyawan yang bekerja di departemen yang sama. Gabungkan tabel dengan dirinya sendiri berdasarkan departemen yang sama, tetapi pertahankan kedua baris tetap berbeda.

Penggabungan naif juga akan memasangkan setiap karyawan dengan dirinya sendiri dan menghasilkan setiap pasangan dua kali. Kita memperbaikinya berikutnya.

SELECT a.name, b.name, a.department
FROM employees a
JOIN employees b ON a.department = b.department;

Menghapus Pasangan dengan Diri Sendiri dan Duplikat Cermin

Dua masalah dalam memasangkan kelompok yang sama: sebuah baris cocok dengan dirinya sendiri (Alice dengan Alice), dan setiap pasangan muncul dua kali (Alice-Bob dan Bob-Alice).

Perbaiki keduanya dengan satu ketaksamaan: a.id < b.id. Ini menjamin kedua baris berbeda dan hanya mempertahankan satu urutan untuk setiap pasangan.

SELECT a.name, b.name, a.department
FROM employees a
JOIN employees b
  ON a.department = b.department
 AND a.id < b.id;

Mengapa a.id < b.id, Bukan a.id <> b.id

Menggunakan a.id <> b.id menghapus pasangan dengan dirinya sendiri tetapi tetap mengembalikan kedua urutan, sehingga hasil Anda menjadi dua kali lipat. Menggunakan a.id < b.id menghapus pasangan dengan dirinya sendiri dan menghilangkan duplikat cermin sekaligus.

Pewawancara secara khusus memperhatikan pilihan < versus <>; ini menunjukkan bahwa Anda memahami kombinatorika penggabungan mandiri.

-- <>  keeps Alice-Bob AND Bob-Alice (duplicated)
-- <   keeps only Alice-Bob (correct unique pairs)

Menemukan Baris Duplikat

Untuk menemukan rekaman yang saling menduplikasi pada kolom kunci, lakukan penggabungan mandiri berdasarkan kolom tersebut dan wajibkan kunci utama berbeda.

Di sini, kita menampilkan pelanggan yang berbagi alamat email. a.id < b.id mempertahankan setiap pasangan duplikat satu kali. Sering kali GROUP BY ... HAVING COUNT(*) > 1 lebih rapi, tetapi penggabungan mandiri menampilkan pasangan yang benar-benar bermasalah secara berdampingan.

SELECT a.id, b.id, a.email
FROM customers a
JOIN customers b
  ON a.email = b.email
 AND a.id < b.id;

Membandingkan Rekaman Bersebelahan

Tugas analis yang sering dilakukan: bandingkan setiap baris dengan baris berikutnya dalam urutan, misalnya penjualan setiap hari dengan hari sebelumnya. Penggabungan mandiri dapat memasangkan baris berurutan.

Di sini kita menggabungkan setiap hari dengan baris tepat satu hari sebelumnya untuk menghitung selisih. Ini berfungsi ketika urutannya tidak memiliki celah.

SELECT t.day, t.amount,
       t.amount - y.amount AS change_vs_prev
FROM daily_sales t
JOIN daily_sales y
  ON y.day = t.day - INTERVAL '1 day';

Masalah Celah pada Penggabungan Mandiri Berdasarkan Kedekatan

Kueri sebelumnya rusak jika ada hari yang hilang: tidak ada baris tepat satu hari sebelumnya, sehingga baris tersebut hilang (penggabungan dalam) atau Anda harus menangani nilai NULL.

Inilah sebabnya pewawancara sering mengarahkan Anda ke fungsi jendela seperti LAG untuk 'membandingkan dengan baris sebelumnya', yang menggunakan posisi ordinal, bukan pencocokan nilai, dan menangani celah dengan baik.

-- LAG handles gaps; the self join assumed contiguous days
SELECT day, amount,
       amount - LAG(amount) OVER (ORDER BY day) AS change_vs_prev
FROM daily_sales;

SELF JOIN vs Fungsi Jendela

Pahami komprominya:

  • SELF JOIN membandingkan baris berdasarkan hubungan nilai (departemen yang sama, tanggal sebelumnya). Fleksibel, tetapi dapat menggandakan baris dan menangani celah dengan keliru.
  • Fungsi jendela membandingkan berdasarkan posisi urutan dalam partisi yang terurut. Lebih bersih untuk logika baris sebelumnya/berikutnya.

Untuk 'membandingkan dengan baris yang berdekatan,' pilih LAG/LEAD. Untuk 'menemukan semua pasangan yang memenuhi suatu kondisi,' SELF JOIN adalah alat yang paling sesuai.

Menemukan Baris yang Mengungguli Rekan-rekannya

Berikut pola lainnya: temukan karyawan yang berpenghasilan lebih tinggi daripada setidaknya satu rekan kerja di departemennya. SELF JOIN menyatakan hal ini secara langsung.

Kita menggabungkan setiap karyawan dengan karyawan lain di departemen yang sama yang berpenghasilan lebih rendah, lalu mempertahankan karyawan unik yang muncul. Hasilnya hampir seperti membaca kalimat dalam bahasa Inggris.

SELECT DISTINCT a.name, a.department, a.salary
FROM employees a
JOIN employees b
  ON a.department = b.department
 AND a.salary > b.salary;

Waspadai Penggandaan Baris

SELF JOIN pada kolom yang tidak unik akan menggandakan baris. Memasangkan orang dalam departemen yang beranggotakan 100 orang menghasilkan sekitar 100 x 100 pasangan kandidat sebelum pemfilteran.

Selalu sertakan predikat deduplikasi (a.id < b.id) dan tambahkan DISTINCT atau pengelompokan jika Anda hanya memerlukan baris yang berpartisipasi, bukan setiap pasangan. Sampaikan pemahaman tentang penggandaan baris ini dalam wawancara.

Memilih Alat Perbandingan

Panduan keputusan untuk perbandingan dalam satu tabel:

  • Semua pasangan yang cocok (duplikat, kombinasi dalam kelompok yang sama): SELF JOIN dengan a.id < b.id.
  • Baris sebelumnya/berikutnya dalam suatu urutan: fungsi jendela (LAG/LEAD).
  • Membandingkan setiap baris dengan agregat kelompok: subkueri berkorelasi atau agregat jendela.

Pemeriksaan Singkat

Anda menginginkan setiap pasangan produk unik yang memiliki kategori sama, tanpa produk yang dipasangkan dengan dirinya sendiri dan tanpa urutan duplikat.

Ringkasan: Membandingkan Baris dalam Satu Tabel

Hal-hal penting:

  • Gunakan SELF JOIN pada tabel untuk memasangkan barisnya sendiri saat mencari duplikat dan kombinasi dalam kelompok yang sama.
  • Gunakan a.id < b.id untuk menghapus pasangan dengan dirinya sendiri dan duplikat cermin dalam satu predikat.
  • Perbandingan kedekatan dengan SELF JOIN bermasalah jika ada celah; pilih LAG/LEAD untuk logika baris sebelumnya/berikutnya.
  • Selalu perhitungkan penggandaan baris saat menggabungkan berdasarkan kolom yang tidak unik.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membandingkan Baris dalam Satu Tabel” gratis?

Ya — teks lengkap “Membandingkan Baris dalam Satu Tabel” 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 “Membandingkan Baris dalam Satu Tabel”?

Pola SELF JOIN untuk menemukan pasangan, duplikat, dan rekaman yang berdekatan. 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 3 dari 4.

Berapa lama pelajaran “Membandingkan Baris dalam Satu Tabel” 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

  1. CROSS JOIN dan Produk Kartesius
  2. SELF JOIN untuk Hierarki
  3. Membandingkan Baris dalam Satu Tabel
  4. Memilih Jenis JOIN yang Tepat
← Kembali ke SQL Interview Prep