pythonsqlMahir5 mnt baca

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

sql
-- 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

sql
-- 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 rentetan OR.
  • 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 = NULL tidak pernah benar karena NULL bukan nilai, dia berarti "tidak diketahui".

Catatan teknis: BETWEEN inklusif 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, pakai tanggal >= '2026-10-01' AND tanggal < '2026-11-01' supaya data 31 Oktober malam tidak terlewat.

ORDER BY dan LIMIT: Sajikan yang Terpenting Duluan

sql
-- 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.

sql
SELECT * FROM produk WHERE tanggal_kedaluwarsa = NULL;  -- selalu kosong!

BENAR: NULL hanya bisa dicek dengan IS NULL.

sql
SELECT * FROM produk WHERE tanggal_kedaluwarsa IS NULL;

SALAH: mencampur AND dan OR tanpa kurung.

sql
WHERE kota = 'Jakarta' OR kota = 'Bandung' AND vip = 1;
-- artinya: Jakarta (semua) ATAU (Bandung yang VIP), bukan maksudmu

BENAR: kurung eksplisit supaya maksudmu jelas.

sql
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.