WHERE: Menyaring Baris dengan Kondisi (AND, OR, NOT)
Menyaring data dengan WHERE: operator perbandingan, menggabungkan syarat dengan AND, OR, NOT, dan jebakan prioritas operator yang diselamatkan oleh tanda kurung.
WHERE = saringan
Tanpa WHERE, SELECT mengembalikan semua baris. Dengan WHERE, hanya baris yang memenuhi kondisi yang lolos, seperti saringan kopi: yang halus lewat, ampasnya tertahan.
SELECT nama, harga
FROM produk
WHERE harga > 15000;
Operator perbandingan
| Operator | Arti | Contoh |
|---|---|---|
= | sama dengan (satu tanda =, bukan dua!) | kota = 'Jakarta' |
<> atau != | tidak sama dengan | status <> 'batal' |
> < | lebih besar / lebih kecil | stok < 20 |
>= <= | lebih besar sama dengan / lebih kecil sama dengan | harga >= 15000 |
Penting: perbandingan teks di MySQL tidak peka huruf besar/kecil secara bawaan. WHERE kota = 'jakarta' tetap menemukan 'Jakarta'. (Di PostgreSQL berbeda.)
Menggabungkan syarat: AND, OR, NOT
| Gabungan | Lolos jika... |
|---|---|
A AND B | A dan B sama-sama benar |
A OR B | salah satu (atau keduanya) benar |
NOT A | A salah |
-- minuman yang murah DAN stoknya banyak
SELECT nama, harga, stok FROM produk
WHERE kategori_id = 1 AND harga < 20000 AND stok > 30;
-- snack ATAU makanan
SELECT nama FROM produk WHERE kategori_id = 3 OR kategori_id = 2;
Jebakan prioritas: AND lebih kuat daripada OR
Dalam hitungan, perkalian dikerjakan sebelum penjumlahan. Dalam SQL, AND dikerjakan sebelum OR. Perhatikan dua query yang mirip:
-- (1) tanpa kurung
WHERE kategori_id = 1 OR kategori_id = 2 AND harga < 15000
-- dibaca: kategori 1 (SEMUA) ATAU (kategori 2 DAN harga < 15000)
-- (2) dengan kurung
WHERE (kategori_id = 1 OR kategori_id = 2) AND harga < 15000
-- dibaca: (kategori 1 atau 2) YANG harganya < 15000
Hasilnya berbeda! Aturan praktis: jangan ragu pakai tanda kurung setiap kali mencampur AND dan OR. Tanda kurung tidak merugikan apa-apa, dan membuat niatmu jelas bagi orang lain (dan dirimu enam bulan lagi).
Kesalahan umum pemula
WHERE kota == 'Jakarta'→ salah; di SQL cukup satu=.WHERE harga > 10000 AND < 20000→ salah; tulis lengkapharga > 10000 AND harga < 20000(atau pakai BETWEEN di bab berikutnya).- Lupa kutip pada teks:
WHERE kota = Jakartadianggap nama kolom bernama Jakarta → error "Unknown column".