0Pricing
Coding Interview Prep · Pelajaran

Kinerja EXISTS vs IN

Pelajari kapan EXISTS berhenti lebih awal dan mengungguli IN, pertanyaan yang sering muncul dalam penyaringan kandidat senior.

Kinerja EXISTS vs IN adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 4 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.

Apa yang Sebenarnya Diuji EXISTS

EXISTS menerima subkueri dan mengembalikan benar tepat saat subkueri tersebut menghasilkan setidaknya satu baris. EXISTS tidak memperhatikan nilai yang dikembalikan — hanya apakah ada baris.

  • Ini adalah pengujian benar/salah yang digunakan dalam WHERE.
  • EXISTS hampir selalu berkorelasi: kueri dalam mereferensikan baris dari kueri luar.

Pertanyaan singkat ini muncul dalam hampir setiap wawancara SQL tingkat menengah hingga senior.

Kueri EXISTS Dasar

Cari pelanggan yang telah membuat setidaknya satu pesanan. Kueri dalam berkorelasi melalui o.customer_id = c.id; EXISTS mengembalikan benar segera setelah satu pesanan yang cocok ditemukan.

Perhatikan SELECT 1 — nilai yang diproyeksikan tidak relevan, jadi sebagian besar engineer menulis 1 atau *. Pewawancara menerima keduanya; pengoptimal mengabaikan daftar SELECT di dalam EXISTS.

SELECT c.name
FROM customers c
WHERE EXISTS (
  SELECT 1 FROM orders o
  WHERE o.customer_id = c.id
);

Perilaku Pemutusan Dini

Kata kunci yang ingin didengar pewawancara adalah pemutusan dini. EXISTS berhenti memindai kueri dalam tepat saat menemukan satu baris yang cocok. EXISTS tidak perlu membentuk atau menghapus duplikat dari seluruh daftar kecocokan.

Sebaliknya, IN secara konseptual membentuk himpunan nilai dari subkueri, lalu memeriksa keanggotaannya. Untuk himpunan dalam yang besar atau memiliki banyak duplikat, perbedaan ini penting.

Kueri yang Sama dengan IN

Berikut padanan IN dari kueri pelanggan yang memiliki pesanan. Hasilnya identik secara logis, tetapi mekanismenya berbeda: subkueri tidak berkorelasi dan menghasilkan daftar id pelanggan yang diperiksa oleh kueri luar.

Pada pengoptimal modern, keduanya sering menghasilkan rencana yang sama — tetapi pada orders yang besar dan memiliki banyak duplikat, EXISTS dapat lebih unggul karena berhenti pada kecocokan pertama.

SELECT c.name
FROM customers c
WHERE c.id IN (
  SELECT o.customer_id FROM orders o
);

NOT EXISTS Lebih Baik daripada NOT IN

Inilah inti dari seluruh pelajaran. NOT EXISTS adalah cara yang aman untuk menyatakan anti-JOIN. Tidak seperti NOT IN, NOT EXISTS tidak rusak karena NULL dalam kueri dalam.

Ini secara andal menemukan setiap pelanggan tanpa pesanan, bahkan jika orders.customer_id berisi NULL.

SELECT c.name
FROM customers c
WHERE NOT EXISTS (
  SELECT 1 FROM orders o
  WHERE o.customer_id = c.id
);

Mengapa NOT EXISTS Aman terhadap NULL

NOT EXISTS hanya menanyakan apakah subkueri yang berkorelasi menemukan baris yang cocok? — jawaban ya/tidak yang jelas. customer_id yang bernilai NULL tidak pernah memenuhi o.customer_id = c.id, sehingga tidak cocok dan tidak merusak logika.

Bandingkan dengan NOT IN, ketika NULL dalam daftar memaksa hasil menjadi UNKNOWN dan menghapus semua baris. Inilah alasan pewawancara senior lebih memilih NOT EXISTS untuk anti-JOIN.

Saat IN Justru Lebih Baik

Bersikaplah seimbang — IN tidak selalu lebih buruk. Ketika subkueri mengembalikan daftar yang kecil, statis, dan tanpa duplikat, IN jelas dan cepat:

  • Beberapa nilai harfiah, atau tabel pencarian yang sangat kecil.
  • Kueri yang tidak berkorelasi dan dapat dijalankan sekali lalu disimpan oleh pengoptimal.

Kueri di bawah sangat lazim; memilih EXISTS dalam kasus ini justru merupakan rekayasa berlebihan.

SELECT name
FROM products
WHERE category_id IN (
  SELECT id FROM categories WHERE active = true
);

Jawaban Modern yang Jujur

Pengoptimal yang matang (Postgres, SQL Server versi terbaru, dan MySQL) sering menulis ulang IN dan EXISTS menjadi rencana semi-JOIN yang sama. Jadi, untuk keanggotaan positif biasa, kinerjanya sering identik.

Perbedaan yang masih penting:

  • NOT IN versus NOT EXISTS — ketepatan hasil dengan NULL (perbedaan nyata, bukan sekadar kecepatan).
  • Tabel dalam yang sangat besar atau tidak memiliki indeks — EXISTS melakukan pemutusan dini.

EXISTS versus JOIN untuk Keberadaan

Sudut pandang lain yang sering diajukan pewawancara: mengapa tidak menggunakan JOIN saja? JOIN yang hanya memeriksa keberadaan dapat menggandakan baris jika sisi kanan memiliki duplikat, sehingga memerlukan DISTINCT. EXISTS tidak pernah menggandakan baris luar.

Jadi, untuk pemeriksaan keberadaan murni, EXISTS lebih bersih daripada JOIN ... DISTINCT. Gunakan JOIN jika Anda benar-benar memerlukan kolom dari tabel lain.

SELECT DISTINCT c.name
FROM customers c
JOIN orders o ON o.customer_id = c.id;

Pengindeksan Menentukan Keberhasilannya

Jawaban tentang kinerja tidak lengkap tanpa indeks. EXISTS yang berkorelasi menjalankan pencarian dalam untuk setiap baris luar, jadi indeks pada kolom korelasi — dalam hal ini orders(customer_id) — adalah hal yang membuatnya cepat.

Menyebutkan "Saya akan membuat indeks pada kolom JOIN yang digunakan subkueri untuk berkorelasi" mengubah jawaban teoretis menjadi jawaban praktis yang dihargai pewawancara.

CREATE INDEX idx_orders_customer_id
  ON orders (customer_id);

Cuplikan Jawaban Wawancara

Katakan: "EXISTS adalah pengujian benar/salah yang berkorelasi dan melakukan pemutusan dini pada baris yang cocok pertama, sedangkan IN memeriksa keanggotaan dalam daftar nilai. Untuk pemeriksaan positif, pengoptimal modern sering menghasilkan rencana semi-JOIN yang sama. Perbedaan sebenarnya adalah NOT EXISTS versus NOT IN: NOT EXISTS aman terhadap NULL, jadi saya lebih memilihnya untuk anti-JOIN — dan saya memastikan kolom korelasi memiliki indeks."

Pemeriksaan Singkat

Inti pembahasan EXISTS versus IN.

Ringkasan

EXISTS versus IN, sudah jelas:

  • EXISTS adalah nilai benar/salah yang berkorelasi dan melakukan pemutusan dini pada baris yang cocok pertama; daftar pilihan di dalamnya tidak relevan.
  • IN memeriksa keanggotaan dalam himpunan nilai dan sangat baik untuk daftar kecil, tanpa duplikat, dan tidak berkorelasi.
  • Untuk pemeriksaan positif, pengoptimal modern sering memilih rencana semi-JOIN yang sama.
  • Utamakan NOT EXISTS daripada NOT IN untuk anti-JOIN — operasi ini aman terhadap NULL. Beri indeks pada kolom korelasi.

Dengan demikian, kursus Pendalaman Subkueri selesai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kinerja EXISTS vs IN” gratis?

Ya — teks lengkap “Kinerja EXISTS vs IN” 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 “Kinerja EXISTS vs IN”?

Pelajari kapan EXISTS berhenti lebih awal dan mengungguli IN, pertanyaan yang sering muncul dalam penyaringan kandidat senior. 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 4 dari 4.

Berapa lama pelajaran “Kinerja EXISTS vs IN” 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

  1. Subkueri Skalar dalam SELECT dan WHERE
  2. Subkueri dalam Klausa FROM (Tabel Turunan)
  3. Subkueri IN, ANY, dan ALL
  4. Kinerja EXISTS vs IN
← Kembali ke Coding Interview Prep