BETWEEN, IN, dan Batas Inklusif
Pelajari kasus tepi batas dan cara BETWEEN memperlakukan titik akhir.
BETWEEN, IN, dan Batas Inklusif adalah pelajaran SQL 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 SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Mengapa Batas Membuat Kandidat Kehilangan Poin
Penyaring rentang dan himpunan tampak sepele, jadi pewawancara menjadikan kasus tepinya sebagai jebakan. BETWEEN mencakup kedua titik batas, IN menyembunyikan jebakan NULL yang halus, dan rentang tanggal merupakan tempat kesalahan selisih satu secara diam-diam merusak laporan.
Pelajaran ini membahas tepat bagaimana BETWEEN memperlakukan titik batasnya, kapan IN lebih rapi daripada rangkaian OR, serta pola rentang setengah terbuka yang digunakan para profesional untuk tanggal.
BETWEEN Mencakup Kedua Batas
col BETWEEN a AND b adalah bentuk singkat dari col >= a AND col <= b. Kedua titik batas disertakan.
Jadi, price BETWEEN 10 AND 20 mengembalikan baris yang harganya tepat 10 atau tepat 20, serta semua harga di antaranya. Jawaban yang paling sering keliru dalam wawancara adalah menyatakan bahwa batas atas tidak disertakan.
SELECT *
FROM products
WHERE price BETWEEN 10 AND 20;
-- equivalent to: price >= 10 AND price <= 20Urutan Argumen Itu Penting
BETWEEN mengharuskan nilai yang lebih rendah ditulis terlebih dahulu. col BETWEEN 20 AND 10 dikembangkan menjadi col >= 20 AND col <= 10, yang tidak mungkin benar, sehingga mengembalikan nol baris, bukan kesalahan.
Ini adalah jebakan favorit: kueri berjalan lancar, tidak menghasilkan apa pun, dan kandidat mengira datanya kosong. Selalu letakkan batas yang lebih kecil terlebih dahulu.
SELECT *
FROM products
WHERE price BETWEEN 20 AND 10;
-- returns NOTHING, not an errorKesalahan Selisih Satu pada Rentang Tanggal
Ketika diminta mengambil seluruh bulan Januari, banyak kandidat menulis order_date BETWEEN '2024-01-01' AND '2024-01-31'. Jika order_date adalah stempel waktu, ini menghilangkan semua data setelah tengah malam pada tanggal 31, karena 2024-01-31 berarti 2024-01-31 00:00:00.
Pesanan pada pukul 14.00 tanggal 31 Januari tidak disertakan. Dengan kolom DATE murni, cara ini berhasil, tetapi Anda tidak dapat mengasumsikan jenis datanya.
SELECT *
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
-- silently excludes Jan 31 afternoon if order_date is a timestampPerbaikan dengan Rentang Setengah Terbuka
Pola profesional untuk tanggal adalah interval setengah terbuka: lebih besar atau sama dengan waktu mulai dan lebih kecil dari periode berikutnya. Cara ini benar untuk DATE maupun TIMESTAMP dan tidak memerlukan pengetahuan tentang resolusi waktu kolom.
Perhatikan bahwa batas atasnya adalah hari pertama Februari, bukan hari terakhir Januari. Dengan begitu, setiap waktu pada bulan Januari dapat tercakup.
SELECT *
FROM orders
WHERE order_date >= '2024-01-01'
AND order_date < '2024-02-01';NOT BETWEEN
col NOT BETWEEN a AND b dikembangkan menjadi col < a OR col > b. Cara ini mengecualikan kedua titik batas dan segala sesuatu di antaranya.
Perhatikan: jika col adalah NULL, NOT BETWEEN bernilai UNKNOWN, sehingga baris NULL dikecualikan seperti pada BETWEEN biasa. Nilai NULL tidak pernah memenuhi pengujian rentang ke arah mana pun.
SELECT *
FROM products
WHERE price NOT BETWEEN 10 AND 20;
-- price < 10 OR price > 20IN sebagai Keanggotaan Himpunan
col IN (a, b, c) adalah bentuk singkat dari col = a OR col = b OR col = c. Ini adalah cara yang rapi untuk menguji keanggotaan dalam himpunan kecil yang tetap.
Cara ini lebih mudah dibaca daripada rangkaian OR dan sepenuhnya menghindari masalah pemberian tanda kurung pada prioritas, karena seluruh pengujian himpunan merupakan satu predikat.
SELECT *
FROM orders
WHERE status IN ('pending', 'shipped', 'delivered');Jebakan NULL pada NOT IN
Ini adalah pertanyaan IN yang paling ditakuti. Jika daftar (atau subkueri) yang menjadi sumber NOT IN berisi satu saja NULL, seluruh predikat dapat bernilai UNKNOWN dan mengembalikan nol baris.
Alasannya: x NOT IN (1, NULL) menjadi x <> 1 AND x <> NULL, dan x <> NULL tidak pernah benar, melainkan bernilai UNKNOWN. Keseluruhan AND tidak mungkin benar.
SELECT *
FROM employees
WHERE manager_id NOT IN (SELECT id FROM managers);
-- returns NOTHING if any managers.id is NULLMemperbaiki NOT IN
Dua perbaikan andal untuk jebakan NULL pada NOT IN:
- Saring nilai NULL dari subkueri dengan
WHERE id IS NOT NULL - Lebih baik lagi, tulis ulang sebagai
NOT EXISTS, yang menangani NULL dengan benar sejak awal
Pewawancara menganggap NOT EXISTS sebagai jawaban kandidat tingkat senior karena sepenuhnya menghindari jebakan tersebut dan sering menghasilkan rencana eksekusi yang lebih baik.
SELECT e.*
FROM employees e
WHERE NOT EXISTS (
SELECT 1 FROM managers m WHERE m.id = e.manager_id
);IN dengan Subkueri
IN menerima subkueri yang menghasilkan satu kolom. WHERE customer_id IN (SELECT customer_id FROM vip) mempertahankan baris yang pelanggannya berada dalam himpunan VIP.
IN biasa, bukan NOT IN, aman jika terdapat NULL dalam subkueri: nilai NULL dalam daftar hanya tidak pernah cocok, tetapi tidak merusak baris yang memang cocok. Jebakan tersebut khusus berlaku untuk NOT IN.
SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM vip_customers);IN dengan Beberapa Kolom melalui Konstruktor Baris
Tindak lanjut yang umum: bagaimana Anda mencocokkan lebih dari satu kolom sekaligus? Teruskan tupel ke IN menggunakan konstruktor baris—ini membandingkan kolom berdasarkan posisi dan jauh lebih bersih daripada merangkai OR (a = .. AND b = ..).
- Mudah dibaca dan dapat diperluas untuk daftar izin yang panjang.
- Setiap tupel harus mencantumkan kolom dalam urutan yang sama.
SELECT *
FROM orders
WHERE (customer_id, status) IN ((101, 'paid'), (102, 'shipped'));Pemeriksaan Singkat
Ingat cara BETWEEN memperlakukan titik batasnya.
Rangkuman
Poin penting:
BETWEEN a AND bmencakup kedua titik batas; batas bawah harus ditulis terlebih dahulu atau Anda mendapatkan nol baris- Untuk rentang stempel waktu, gunakan interval setengah terbuka:
>= start AND < next_period INmenyatakan keanggotaan himpunan dengan rapi dan aman jika terdapat NULLNOT INdengan NULL apa pun dalam daftarnya tidak mengembalikan apa pun; tulis ulang sebagaiNOT EXISTS
Tema yang terus berulang: penyaring dapat berjalan sempurna, tetapi tetap secara diam-diam mengembalikan baris yang salah.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “BETWEEN, IN, dan Batas Inklusif” gratis?
Ya — teks lengkap “BETWEEN, IN, dan Batas Inklusif” 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 “BETWEEN, IN, dan Batas Inklusif”?
Pelajari kasus tepi batas dan cara BETWEEN memperlakukan titik akhir. 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 2 dari 4.
Berapa lama pelajaran “BETWEEN, IN, dan Batas Inklusif” 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
- Prioritas AND/OR dan Penggunaan Tanda Kurung
- BETWEEN, IN, dan Batas Inklusif
- LIKE, Karakter Pengganti, dan Escape
- Memfilter Nilai yang Dihitung