WHERE menyaring baris: cuma baris yang syaratnya benar yang ikut ke hasil. Bayangin satpam di pintu masuk yang memegang daftar syarat. Tiap tamu (baris) dicek satu per satu: yang memenuhi syarat boleh masuk, yang gak memenuhi ditinggal di luar. Tabelnya sendiri gak berubah, yang disaring cuma hasilnya.
🧪 Tebakan cepat: tabel
productsberisi 5 produk.WHERE category = 'electronics' OR price < 5000000meloloskan berapa baris? Tebak dulu, jawabannya ada di bagian "AND, OR dan NOT".
WHERE dan operator pembanding
Tabel products yang dipakai latihan:
| id | name | price | category |
|---|---|---|---|
| 1 | Laptop | 12000000 | electronics |
| 2 | Mouse | 150000 | electronics |
| 3 | Notebook | 25000 | stationery |
| 4 | Pen | 5000 | stationery |
| 5 | Monitor | 3500000 | electronics |
WHERE ditulis setelah FROM:
SELECT name, price
FROM products
WHERE price < 5000000;
Hasilnya 4 baris: Mouse, Notebook, Pen, Monitor. Laptop (12000000) gak lolos.
| Operator | Artinya | Contoh |
|---|---|---|
= |
sama dengan | category = 'electronics' |
!= atau <> |
tidak sama dengan | category != 'electronics' |
> / < |
lebih besar / lebih kecil | price > 100000 |
>= / <= |
lebih besar atau sama / lebih kecil atau sama | price <= 25000 |
- Teks dibandingkan dalam kutip tunggal:
'electronics'. - Angka ditulis tanpa kutip dan tanpa titik ribuan:
5000000, bukan5.000.000. =membandingkan teks persis, termasuk huruf besar-kecilnya.
AND, OR dan NOT
Dua syarat digabung dengan AND (dua-duanya harus benar) atau OR (cukup salah satu). SQLite mengecek tiap syarat di tiap baris, dan menulis benar sebagai 1, salah sebagai 0:
| name | category = 'electronics' |
price < 5000000 |
AND | OR |
|---|---|---|---|---|
| Laptop | 1 | 0 | 0 | 1 |
| Mouse | 1 | 1 | 1 | 1 |
| Notebook | 0 | 1 | 0 | 1 |
| Pen | 0 | 1 | 0 | 1 |
| Monitor | 1 | 1 | 1 | 1 |
Dengan AND yang lolos cuma 2 baris:
SELECT name, price
FROM products
WHERE category = 'electronics' AND price < 5000000;
| name | price |
|---|---|
| Mouse | 150000 |
| Monitor | 3500000 |
Dengan OR, kelima baris lolos: tiap produk memenuhi minimal satu syarat. Laptop lolos karena kategorinya, Notebook dan Pen karena harganya. Itu jawaban tebakannya.
NOT membalik syarat: WHERE NOT category = 'electronics' memberi Notebook dan Pen, sama dengan category != 'electronics'.
LIKE, IN dan BETWEEN
LIKE mencari pola teks. % artinya karakter apa saja, berapa pun jumlahnya (boleh nol), dan _ artinya tepat satu karakter:
SELECT name FROM products WHERE name LIKE 'M%'; -- Mouse, Monitor
SELECT name FROM products WHERE name LIKE '%o%'; -- Laptop, Mouse, Notebook, Monitor
'M%' berarti diawali M, '%o%' berarti ada huruf o di mana saja. Di SQLite dan MySQL, LIKE gak membedakan huruf besar-kecil untuk A sampai Z; di PostgreSQL membedakan, dan versi yang gak membedakan namanya ILIKE.
IN artinya salah satu dari daftar:
SELECT name FROM products WHERE name IN ('Mouse', 'Pen', 'Kipas'); -- Mouse, Pen
Sama dengan name = 'Mouse' OR name = 'Pen' OR name = 'Kipas', tapi lebih pendek. Kipas gak ada di tabel, jadi gak ikut.
BETWEEN artinya di dalam rentang, termasuk kedua ujungnya:
SELECT name FROM products WHERE price BETWEEN 25000 AND 3500000; -- Mouse, Notebook, Monitor
⚠️ Jebakan yang sering ketemu
- Teks tanpa kutip.
WHERE category = electronicsdijawabno such column: electronics: SQLite mengira itu nama kolom. - Titik ribuan.
price < 5.000.000dijawabnear ".000": syntax error. Tulis5000000. - Huruf besar-kecil.
category = 'Electronics'memberi 0 baris di SQLite (dan PostgreSQL), karena yang tersimpanelectronics. MySQL dengan pengaturan bawaannya gak membedakan, jadi di sana hasilnya 3. Tulis teksnya persis seperti yang tersimpan. - AND dan OR tanpa kurung. AND dikerjakan lebih dulu, seperti kali sebelum tambah.
category = 'electronics' AND price < 5000000 OR category = 'stationery'memberi 4 baris (Mouse, Notebook, Pen, Monitor). Pakai kurung supaya maksudmu jelas.
TL;DR: WHERE syarat ditulis setelah FROM dan cuma meloloskan baris yang syaratnya benar. Operatornya =, != atau <>, >, <, >=, <=. Teks pakai kutip tunggal, angka tanpa kutip dan tanpa titik ribuan. AND butuh dua syarat benar, OR cukup satu, NOT membalik; AND dikerjakan sebelum OR. LIKE mencari pola (% apa saja, _ satu karakter), IN (...) mencocokkan salah satu dari daftar, dan BETWEEN a AND b termasuk kedua ujungnya.