IN dan NOT IN untuk Himpunan
Saring berdasarkan daftar nilai dengan IN dan NOT IN, pelajari jebakan NULL pada NOT IN, dan ubahnya menjadi EXISTS untuk semantik yang aman.
IN dan NOT IN untuk Himpunan adalah pelajaran SQL Academy 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 SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
IN: Mencocokkan dengan Daftar
IN adalah singkatan untuk banyak OR:
SELECT * FROM users WHERE country IN ('US', 'CA', 'GB');
-- Equivalent to:
SELECT * FROM users
WHERE country = 'US' OR country = 'CA' OR country = 'GB';IN dengan Subkueri
Anda dapat menggunakan subkueri di sisi kanan:
SELECT * FROM orders
WHERE user_id IN (
SELECT id FROM users WHERE country = 'US'
);NOT IN: Mengecualikan Daftar
Saring baris yang cocok:
SELECT * FROM users WHERE status NOT IN ('banned', 'deleted');Jebakan NULL pada NOT IN
Jika sisi kanan berisi NULL, NOT IN mengembalikan NULL — dan baris dengan predikat NULL dibuang. Hasilnya: nol baris.
-- Suppose blocked_names contains NULL:
SELECT name FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocked_names);
-- → 0 rows, silently
-- Safer: filter out NULLs explicitly, or use NOT EXISTS:
SELECT name FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM blocked_names b WHERE b.excluded_name = u.name
);Mengapa NOT EXISTS Lebih Aman
NOT EXISTS menggunakan semantik subkueri berkorelasi standar dan aman terhadap NULL. Sebagian besar perencana mengoptimalkannya secara identik dengan NOT IN yang dibentuk dengan benar.
IN vs OR — Keterbacaan
IN lebih jelas daripada rangkaian OR yang panjang, dan perencana sering mengoptimalkannya secara identik:
-- Hard to read:
WHERE country = 'US' OR country = 'CA' OR country = 'GB' OR ...
-- Clear:
WHERE country IN ('US', 'CA', 'GB', ...)IN dengan Tuple (Konstruktor Baris)
Cocokkan pasangan kolom:
SELECT * FROM order_items
WHERE (order_id, product_id) IN (
(1, 42), (2, 99), (3, 17)
);Penggunaan Indeks
Daftar IN pada kolom yang diindeks dapat dieksekusi sebagai beberapa pencarian indeks (Bitmap Index Scan). Secara umum, cara ini cepat.
-- Plan: Bitmap Index Scan + Bitmap Heap Scan
SELECT * FROM products WHERE id IN (1, 5, 99, 121, 4421);Daftar IN Besar
Daftar yang berisi ribuan nilai dapat menjadi lambat. Sebaiknya gunakan:
- JOIN dengan tabel nyata atau tabel sementara
= ANY(array)untuk meneruskan parameter array
SELECT * FROM products WHERE id = ANY(ARRAY[1,2,3,...]);IN dengan Daftar Kosong
Daftar IN kosong tidak sah dalam SQL standar. Beberapa klien meneruskan nilai penanda; lebih aman jika kondisi SQL dibuat secara kondisional.
-- Use empty array trick in PostgreSQL:
SELECT * FROM products WHERE id = ANY($1::bigint[]);
-- Pass {} to get zero matches without rewriting the SQL.IN vs JOIN
Terkadang JOIN lebih jelas daripada subkueri IN:
-- With IN:
SELECT * FROM orders
WHERE user_id IN (SELECT id FROM users WHERE pro);
-- With JOIN:
SELECT o.*
FROM orders o
JOIN users u ON u.id = o.user_id
WHERE u.pro;Ringkasan
IN adalah bentuk yang mudah dipahami untuk keanggotaan dalam suatu himpunan.
- Gunakan IN daripada OR demi keterbacaan
- NOT IN berbahaya jika terdapat NULL — lebih baik gunakan NOT EXISTS
- Untuk himpunan besar, gunakan JOIN atau teruskan array
Pemeriksaan Singkat
Apa pengganti paling aman untuk NOT IN (subquery) jika subkueri mungkin berisi NULL?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “IN dan NOT IN untuk Himpunan” gratis?
Ya — teks lengkap “IN dan NOT IN untuk Himpunan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “IN dan NOT IN untuk Himpunan”?
Saring berdasarkan daftar nilai dengan IN dan NOT IN, pelajari jebakan NULL pada NOT IN, dan ubahnya menjadi EXISTS untuk semantik yang aman. Kamu berlatih SQL Academy 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 Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy 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 “IN dan NOT IN untuk Himpunan” 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 Academy ini?
Ya. Setiap pelajaran SQL Academy 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
- Pola LIKE dan Karakter Wildcard
- IN dan NOT IN untuk Himpunan
- BETWEEN untuk Rentang
- IS NULL, IS NOT NULL, dan COALESCE