SQL: Filter dan Urutkan dengan WHERE dan ORDER BY
Dalami WHERE dengan AND, OR, NOT, LIKE, IN, BETWEEN, dan IS NULL, lalu urutkan hasil dengan ORDER BY dan batasi dengan LIMIT.
Filter Adalah Keterampilan Inti Analyst
Kalau pandas adalah dapur tempat kamu mengolah data, SQL adalah gudang tempat data itu disimpan. Hampir semua data perusahaan tinggal di database, dan sebagai analyst kamu akan mengambilnya dengan query SQL setiap hari. Klausa WHERE adalah filter datamu, seperti filter di Excel tapi untuk jutaan baris, dan ORDER BY menyusun hasilnya supaya yang penting muncul duluan.
Modul ini adalah pendalaman dari dasar SQL: bukan sekadar WHERE umur > 20, tapi kombinasi kondisi yang presisi. Bedanya analyst junior dan senior sering terlihat di sini, junior mengambil 1 juta baris lalu filter di Excel, senior menulis satu query tepat yang mengembalikan 50 baris yang dibutuhkan.
WHERE dengan AND, OR, NOT
-- Pelanggan Jakarta yang belanja besar ATAU pelanggan VIP dari kota mana pun,
-- tapi BUKAN yang statusnya diblokir
SELECT nama, kota, total_belanja, status
FROM pelanggan
WHERE (kota = 'Jakarta' AND total_belanja > 1000000)
OR status = 'VIP'
AND NOT status = 'diblokir';Tiga operator logika yang wajib hafal: AND (semua kondisi benar), OR (salah satu benar), NOT (membalik kondisi). Perhatikan tanda kurung: tanpa kurung, AND dikerjakan lebih dulu dari OR, dan itu sering bukan maksudmu. Aturan amannya, kalau query-mu mencampur AND dan OR, selalu pakai kurung eksplisit.
LIKE, IN, BETWEEN, IS NULL
-- Cari produk, filter daftar, rentang tanggal, dan data kosong
SELECT nama_produk, kategori, harga, tanggal_masuk
FROM produk
WHERE nama_produk LIKE 'Kopi%'
AND kategori IN ('Minuman', 'Snack')
AND harga BETWEEN 10000 AND 20000
AND tanggal_kedaluwarsa IS NOT NULL
ORDER BY harga DESC
LIMIT 10;Empat senjata filter yang paling sering dipakai analyst:
LIKE 'Kopi%': cocokkan pola teks,%berarti "diikuti apa pun".'%susu'berarti berakhiran "susu".IN (...): cocok dengan salah satu dari daftar, jauh lebih rapi dari rentetanOR.BETWEEN a AND b: rentang inklusif (a dan b ikut termasuk), cocok untuk tanggal dan harga.IS NULL/IS NOT NULL: satu-satunya cara benar mengecek kekosongan.harga = NULLtidak pernah benar karena NULL bukan nilai, dia berarti "tidak diketahui".
Catatan teknis:
BETWEENinklusif di kedua ujung. Untuk rentang tanggal,tanggal BETWEEN '2026-10-01' AND '2026-10-31'mencakup seluruh 31 Oktober hanya jika kolomnya bertipe DATE. Kalau bertipe DATETIME, pakaitanggal >= '2026-10-01' AND tanggal < '2026-11-01'supaya data 31 Oktober malam tidak terlewat.
ORDER BY dan LIMIT: Sajikan yang Terpenting Duluan
-- 5 pelanggan dengan total belanja tertinggi bulan ini
SELECT nama, SUM(total) AS omzet
FROM transaksi
WHERE tanggal >= '2026-10-01' AND tanggal < '2026-11-01'
GROUP BY nama
ORDER BY omzet DESC
LIMIT 5;ORDER BY kolom DESC mengurutkan dari terbesar ke terkecil (ASC untuk sebaliknya, dan ASC adalah default). LIMIT n memotong hasil jadi n baris pertama, pasangan wajib ORDER BY untuk pertanyaan "top N". Kombinasi ini menjawab 80 persen pertanyaan bisnis sehari-hari: produk terlaris, pelanggan terbesar, hari tersepi.
Jebakan Umum
SALAH: mengecek NULL dengan sama-dengan.
SELECT * FROM produk WHERE tanggal_kedaluwarsa = NULL; -- selalu kosong!BENAR: NULL hanya bisa dicek dengan IS NULL.
SELECT * FROM produk WHERE tanggal_kedaluwarsa IS NULL;SALAH: mencampur AND dan OR tanpa kurung.
WHERE kota = 'Jakarta' OR kota = 'Bandung' AND vip = 1;
-- artinya: Jakarta (semua) ATAU (Bandung yang VIP), bukan maksudmuBENAR: kurung eksplisit supaya maksudmu jelas.
WHERE (kota = 'Jakarta' OR kota = 'Bandung') AND vip = 1;Tantangan
Query Pelanggan Prioritas
Dari tabel pelanggan (nama, kota, total_belanja, status, email), tulis satu query yang mengambil pelanggan dengan total_belanja di atas 500000 ATAU status 'VIP', yang emailnya tidak kosong, dari kota Jakarta atau Bandung, diurutkan dari belanja terbesar, maksimal 10 baris.