WHERE: Menyaring Data (Perbandingan, AND/OR, IN, BETWEEN, NULL)
Memfilter baris dengan WHERE: operator perbandingan, AND/OR/NOT, IN, BETWEEN, dan cara benar menangani NULL dengan IS NULL.
Analogi: WHERE itu seperti saringan kopi. Seluruh air dan ampas (semua baris) dituang ke atas, tetapi hanya yang memenuhi syarat yang menetes ke gelas. AND berarti saringan dobel (harus lolos keduanya), OR berarti salah satu lolos sudah cukup, dan NULL seperti air yang belum jelas wujudnya: tidak bisa dibandingkan dengan =.
WHERE = penyaring baris
Tanpa WHERE, SELECT mengambil semua baris. Dengan WHERE, hanya baris yang memenuhi syarat yang lolos.
SELECT judul, harga FROM buku WHERE harga < 50000;
Analogi: WHERE itu seperti saringan teh. Daun (baris yang tidak cocok) tertahan, hanya air teh (baris yang cocok) yang lewat.
Operator perbandingan
| Operator | Arti | Contoh |
|---|---|---|
= | sama dengan | kategori_id = 1 |
<> atau != | tidak sama dengan | status <> 'batal' |
< > <= >= | kurang/lebih dari | stok >= 20 |
Di SQL, "sama dengan" cukup satu tanda sama dengan (=), bukan dua seperti di banyak bahasa pemrograman. Dan teks di PostgreSQL peka huruf besar-kecil: 'novel' berbeda dari 'Novel'.
Menggabungkan syarat: AND, OR, NOT
SELECT judul FROM buku WHERE kategori_id = 1 AND harga < 90000; -- keduanya harus benar
SELECT judul FROM buku WHERE stok = 0 OR harga > 100000; -- salah satu cukup
SELECT judul FROM buku WHERE NOT (kategori_id = 1); -- kebalikan
Bila AND dan OR dicampur, pakai tanda kurung agar maksudnya jelas (AND dihitung lebih dulu daripada OR).
IN dan BETWEEN
SELECT judul FROM buku WHERE kategori_id IN (2, 5); -- cocok dengan salah satu daftar
SELECT judul FROM buku WHERE tahun BETWEEN 2010 AND 2020; -- rentang, batas ikut termasuk
NULL butuh perlakuan khusus
NULL berarti "tidak diketahui", sehingga kategori_id = NULL hasilnya selalu "tidak diketahui" (bukan benar), dan tidak ada baris yang lolos. Gunakan IS NULL / IS NOT NULL:
SELECT judul FROM buku WHERE kategori_id IS NULL; -- buku tanpa kategori
SELECT nama FROM pelanggan WHERE email IS NOT NULL; -- pelanggan yang punya email
Kesalahan klasik pemula: menulis WHERE kolom = NULL. Query itu tidak error tetapi selalu menghasilkan 0 baris. Ingat: IS NULL.
Kasus nyata: mencari buku yang perlu diisi ulang
Admin gudang ingin tahu buku murah yang stoknya menipis agar bisa dipesan ulang:
SELECT judul, stok, harga
FROM buku
WHERE stok < 20
AND harga BETWEEN 20000 AND 100000
AND kategori_id IS NOT NULL;Satu query ini menggantikan pekerjaan memelototi ratusan baris di Excel.
Kesalahan yang sering terjadi
- Menulis
kolom = NULL. Hasilnya tidak pernah benar; gunakanIS NULL/IS NOT NULL. - Mencampur
ANDdanORtanpa tanda kurung.ANDdihitung lebih dulu, hasilnya sering tidak sesuai niat. - Mengira
BETWEEN 10 AND 20tidak mencakup 10 dan 20. Kedua ujung termasuk.