Soal 1Mana yang menggambarkan SELECT * FROM staff WHERE salary BETWEEN 5000000 AND 6000000; dengan benar?
WHERE Deep Dive ② — BETWEEN dan LIKE untuk Filter Rentang dan Pola
Artikel kedua dari deep-dive WHERE. Mencakup rentang dengan BETWEEN, NOT BETWEEN, dan pencocokan prefix / suffix / contains dengan LIKE — dikombinasikan dengan ORDER BY / LIMIT, semua berjalan di dataset staff yang dimuat dari CSV.
Data yang akan kita pakai — tabel staff
Artikel kedua dari deep-dive WHERE membahas filter rentang (BETWEEN) dan pencocokan pola (LIKE). Kalau kamu menggabungkan kondisi compound yang dibangun dengan AND / OR / NOT di artikel sebelumnya dengan BETWEEN / LIKE di artikel ini, kamu bisa menulis kondisi praktis seperti "gaji antara 5.000.000 dan 6.000.000 dan namanya berakhir dengan Tanaka" hanya dengan WHERE saja.
BETWEEN — filter berdasarkan rentang nilai
Saat kamu ingin menguji apakah sebuah nilai jatuh di dalam rentang — "gaji antara 5.000.000 dan 6.000.000," "birthday antara April 2020 dan Maret 2025" — BETWEEN adalah operatornya.
Menulis kolom BETWEEN nilai1 AND nilai2 mengembalikan baris di mana kolom paling tidak nilai1 dan paling banyak nilai2. Catatan: kedua endpoint dimasukkan. Artinya sama dengan kolom >= nilai1 AND kolom <= nilai2; orang sering memilih BETWEEN cuma untuk keterbacaan.
Menambahkan NOT BETWEEN mengembalikan baris di luar rentangnya (kurang dari nilai1 atau lebih dari nilai2).
-- Staff dengan salary antara 5.000.000 dan 6.000.000 (endpoint dimasukkan)
SELECT name, salary FROM staff
WHERE salary BETWEEN 5000000 AND 6000000;
-- Arti yang sama, ditulis dengan >= dan <= digabung AND
SELECT name, salary FROM staff
WHERE salary >= 5000000 AND salary <= 6000000;
-- Di luar rentangnya (di bawah 5.000.000 ATAU di atas 6.000.000)
SELECT name, salary FROM staff
WHERE salary NOT BETWEEN 5000000 AND 6000000;
BETWEEN memasukkan kedua endpoint
BETWEEN 5000000 AND 6000000 memasukkan tepat 5.000.000 dan tepat 6.000.000. Kalau kamu ingin mengecualikan endpoint, tulis > 5000000 AND < 6000000.
Dengan tanggal, kamu bisa menulis BETWEEN '2020-04-01' AND '2025-03-31' — literalnya dibandingkan sebagai string. Untuk memasukkan "seluruh Maret 2025," mendefinisikan kedua endpoint dengan tanggal akhir bulan yang sebenarnya adalah pendekatan yang aman. BETWEEN '2020-04-01' AND '2025-04-01' akan juga memasukkan `2025-04-01` itu sendiri, yang biasanya bukan yang kamu inginkan.
LIKE — filter berdasarkan pencocokan pola
Saat kamu ingin menyaring berdasarkan pola string — "nama yang berakhir dengan Tanaka," "email yang mengandung @example.com" — LIKE adalah operatornya. Tulis kolom LIKE 'pola'. Di dalam pola kamu bisa memakai dua wildcard berikut.
| Wildcard | Arti |
|---|---|
% | Mencocokkan string apa pun yang panjangnya nol atau lebih karakter ("apa pun dengan panjang berapa pun") |
_ | Mencocokkan tepat satu karakter ("karakter tunggal apa pun di posisi ini") |
'A%' adalah dimulai dengan A, '%a' adalah berakhir dengan a, '%a%' adalah mengandung a, 'A___%' adalah dimulai dengan A dan punya paling tidak tiga karakter lagi — kombinasikan sesuai kebutuhan. Menambahkan NOT LIKE mengembalikan baris yang tidak cocok dengan polanya.
-- 1) Pencocokan prefix: name dimulai dengan A
SELECT name FROM staff WHERE name LIKE 'A%';
-- 2) Pencocokan suffix: surname Tanaka
SELECT name FROM staff WHERE name LIKE '%Tanaka';
-- 3) Mengandung: name mengandung 'a' di mana saja
SELECT name FROM staff WHERE name LIKE '%a%';
-- 4) Karakter tunggal: karakter ke-2 adalah 'a', sisanya apa saja
SELECT name FROM staff WHERE name LIKE '_a%';
-- 5) Negasi: tidak berakhir dengan Tanaka
SELECT name FROM staff WHERE name NOT LIKE '%Tanaka';
% artinya "panjang apa pun dari apa pun"; _ artinya "tepat satu karakter." Mengkombinasikan posisinya mengekspresikan prefix / suffix / contains dalam tiga pola. Garis putus-putus menghubungkan setiap pola dengan contoh kecocokan dan deskripsi bahasa biasa.LIKE dan `=` mengikuti aturan case-sensitivity yang berbeda
Di konsol kursus ini (SQLite), di dalam ASCII, LIKE adalah case-insensitive. name LIKE '%a%' dan name LIKE '%A%' mengembalikan baris yang sama. Untuk membuatnya case-sensitive, jalankan PRAGMA case_sensitive_like = 1; atau normalisasi kedua sisinya dengan LOWER(...).
Sementara itu, perbandingan string dengan `=` (dibahas di artikel SELECT) adalah case-sensitive — perhatikan perbedaan perilaku antara = dan LIKE.
Mencari literal `%` atau `_` — klausa `ESCAPE`
Kalau string yang kamu cari sebenarnya mengandung literal % atau _ (misalnya, kode produk seperti 'A_001'), maka secara default _ akan diinterpretasikan sebagai wildcard. Klausa ESCAPE membuatmu bisa menentukan karakter escape, setelah itu % / _ diperlakukan sebagai karakter literal.
Contoh: WHERE code LIKE 'A\_001' ESCAPE '\'; (mendeklarasikan \ sebagai karakter escape, jadi \_ diperlakukan sebagai underscore literal). Karakter escape tidak harus \ — ESCAPE '#' membuat # jadi escape, ESCAPE '!' membuatnya jadi !, dan seterusnya. Kamu akan memakai ini saat mencari kolom kode yang mengandung _ atau %.
Mengkombinasikan WHERE, ORDER BY, dan LIMIT
Query dunia nyata biasanya mengkombinasikan filter (WHERE) → sort (ORDER BY) → batas baris (LIMIT) dalam urutan persis itu. Urutan klausa tetap, dan menukarnya adalah error sintaks.
Urutan eksekusi DB-nya kira-kira FROM → WHERE → SELECT → ORDER BY → LIMIT — pertama persempit baris, pilih kolom yang kamu butuh, sortir, lalu potong jumlah yang kamu inginkan.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Nama mana yang cocok dengan pola name LIKE '%Tanaka'?
Soal 3Mana dari query berikut yang punya klausa dalam urutan yang benar?