Bayangkan kamu lagi belanja online dan mau filter produk dengan harga antara Rp50.000 sampai Rp200.000. Cukup geser slider harga, dan voilà — semua produk yang relevan langsung muncul. Nah, saat kamu jadi developer yang membangun fitur itu, ada dua senjata ampuh di MySQL yang wajib kamu kuasai: BETWEEN dan IN. Dua operator ini adalah fondasi dari BETWEEN IN MySQL — cara paling elegan untuk menyaring data tanpa menulis kondisi WHERE yang panjangnya bisa bikin mata berkunang-kunang.
Kamu sudah memasuki artikel ke-10 dari seri 28 artikel Belajar Query SQL MySQL. Di titik ini, kamu sudah paham dasar SELECT, WHERE, dan operator perbandingan. Sekarang saatnya naik level — belajar cara menyaring data dalam rentang nilai atau dari sekumpulan pilihan spesifik secara efisien dan rapi. Di artikel ini kita akan bongkar habis cara kerja BETWEEN dan IN, lengkap dengan studi kasus nyata dari database toko online beserta output query-nya.
Menurut survei Stack Overflow Developer, MySQL masih menjadi database relasional paling populer di kalangan developer selama beberapa tahun berturut-turut. Dan operator BETWEEN serta IN adalah dua dari sepuluh operator SQL yang paling sering digunakan dalam query produksi skala nyata — terutama di aplikasi e-commerce dan sistem inventory.
1. Operator BETWEEN: Filter Data dalam Rentang Nilai
Bayangkan kamu punya penggaris. Kamu mau ukur benda yang panjangnya antara 10cm sampai 30cm — semua yang di luar rentang itu kamu abaikan. Itulah cara kerja BETWEEN di MySQL. Operator ini memilih semua baris di mana nilai suatu kolom berada di antara dua nilai batas, dan kedua batas itu sendiri ikut dimasukkan (inclusive).
SELECT kolom1, kolom2, ...
FROM nama_tabel
WHERE nama_kolom BETWEEN nilai_minimum AND nilai_maksimum;
-- Catatan:
-- nilai_minimum : batas bawah rentang (inklusif)
-- nilai_maksimum : batas atas rentang (inklusif)
-- Bekerja untuk: angka, tanggal, dan string
Mari langsung praktik. Misalkan kita punya tabel produk di database toko online kita:
SELECT nama_produk, kategori, harga
FROM produk
WHERE harga BETWEEN 50000 AND 200000;
-- Menampilkan produk dengan harga Rp50.000 - Rp200.000
📊 Output / Hasil Query:
| nama_produk | kategori | harga |
|---|---|---|
| Topi Kupluk Rajut | Aksesoris | Rp 55.000 |
| Kaos Polos Premium | Pakaian | Rp 89.000 |
| Tas Selempang Canvas | Tas | Rp 145.000 |
| Sepatu Sneakers Lokal | Sepatu | Rp 200.000 |
Perhatikan baris terakhir — harga Rp200.000 ikut masuk ke hasil. Ini bukti bahwa BETWEEN bersifat inklusif di kedua ujung. Kalau kamu mau eksklusif (tidak termasuk batas), gunakan operator biasa: harga >= 50000 AND harga < 200000.
BETWEEN juga bekerja mulus untuk kolom bertipe DATE. Contoh: filter pesanan dalam periode tertentu.
SELECT id_pesanan, id_pelanggan, total_bayar, tanggal_pesan
FROM pesanan
WHERE tanggal_pesan BETWEEN '2024-01-01' AND '2024-03-31';
-- Pesanan di Kuartal 1 tahun 2024
📊 Output / Hasil Query:
| id_pesanan | id_pelanggan | total_bayar | tanggal_pesan |
|---|---|---|---|
| ORD-001 | PLG-042 | Rp 320.000 | 2024-01-08 |
| ORD-015 | PLG-017 | Rp 785.000 | 2024-02-14 |
| ORD-029 | PLG-091 | Rp 150.000 | 2024-03-31 |
2. Operator IN: Filter dari Daftar Nilai Tertentu
Kalau BETWEEN itu seperti slider rentang harga, maka IN itu seperti centang-centang di daftar filter kategori — kamu memilih beberapa opsi spesifik secara manual. Operator IN di MySQL memungkinkan kamu memeriksa apakah suatu nilai cocok dengan salah satu dari sekumpulan nilai yang kamu tentukan. Tanpa IN, kamu harus menulis banyak kondisi OR — bayangkan betapa repotnya kalau ada 10 kategori!
SELECT kolom1, kolom2, ...
FROM nama_tabel
WHERE nama_kolom IN (nilai1, nilai2, nilai3, ...);
-- nilai1, nilai2, ... : daftar nilai yang ingin dicocokkan
-- Nilai string harus diapit tanda kutip: 'nilai'
-- Ekuivalen dengan: kolom = nilai1 OR kolom = nilai2 OR ...
SELECT nama_produk, kategori, harga, stok
FROM produk
WHERE kategori IN ('Pakaian', 'Sepatu', 'Tas');
-- Tampilkan hanya produk dari 3 kategori fashion
📊 Output / Hasil Query:
| nama_produk | kategori | harga | stok |
|---|---|---|---|
| Kaos Polos Premium | Pakaian | Rp 89.000 | 142 |
| Kemeja Flannel | Pakaian | Rp 235.000 | 87 |
| Tas Selempang Canvas | Tas | Rp 145.000 | 53 |
| Sepatu Sneakers Lokal | Sepatu | Rp 200.000 | 215 |
Urutan nilai dalam IN tidak berpengaruh pada hasil — MySQL tidak mengurutkan output berdasarkan daftar IN. Kalau kamu butuh output terurut sesuai daftar tertentu, gunakan ORDER BY FIELD(kolom, val1, val2, ...).
3. NOT BETWEEN dan NOT IN: Kebalikan yang Sama Kuat
Dua operator ini punya "kembaran jahat" — NOT BETWEEN dan NOT IN. Keduanya bekerja kebalikan: alih-alih mengambil data yang cocok, mereka membuang data yang cocok dan menampilkan sisanya. Sangat berguna ketika kamu punya lebih banyak data yang ingin dimasukkan daripada yang dikecualikan.
-- NOT IN: Semua produk SELAIN kategori tertentu
SELECT nama_produk, kategori, harga
FROM produk
WHERE kategori NOT IN ('Elektronik', 'Komputer');
-- NOT BETWEEN: Produk dengan harga di luar rentang budget promo
SELECT nama_produk, harga
FROM produk
WHERE harga NOT BETWEEN 100000 AND 500000;
📊 Output NOT BETWEEN (harga di luar Rp100rb–Rp500rb):
| nama_produk | harga | keterangan |
|---|---|---|
| Topi Kupluk Rajut | Rp 55.000 | Di bawah rentang |
| Kaos Polos Premium | Rp 89.000 | Di bawah rentang |
| Laptop Gaming Pro | Rp 12.500.000 | Di atas rentang |
Kombinasikan BETWEEN IN MySQL dengan kondisi lain menggunakan AND / OR untuk filter yang lebih kompleks. Contoh: WHERE kategori IN ('Pakaian', 'Tas') AND harga BETWEEN 50000 AND 300000 — filter kategori fashion dengan harga terjangkau sekaligus!
🚀 Panduan Praktikum Step-by-Step
Buat database dan tabel latihan
Jalankan script berikut di MySQL Workbench atau terminal kamu untuk mempersiapkan data latihan.
CREATE DATABASE toko_online;
USE toko_online;
CREATE TABLE produk (
id_produk INT PRIMARY KEY AUTO_INCREMENT,
nama_produk VARCHAR(100),
kategori VARCHAR(50),
harga DECIMAL(10,2),
stok INT
);
Isi tabel dengan data sampel
INSERT INTO produk (nama_produk, kategori, harga, stok)
VALUES
('Topi Kupluk Rajut', 'Aksesoris', 55000, 200),
('Kaos Polos Premium', 'Pakaian', 89000, 142),
('Tas Selempang Canvas','Tas', 145000, 53),
('Sepatu Sneakers Lokal','Sepatu', 200000, 215),
('Kemeja Flannel', 'Pakaian', 235000, 87),
('Laptop Gaming Pro', 'Elektronik',12500000, 18);
Coba query BETWEEN dan IN
Jalankan query-query dari artikel ini satu per satu, amati hasilnya, lalu coba modifikasi nilai rentang dan daftar untuk eksplorasi lebih lanjut.
Kombinasikan dengan operator lain
-- Tantangan: filter produk fashion harga terjangkau
SELECT nama_produk, kategori, harga
FROM produk
WHERE kategori IN ('Pakaian', 'Tas', 'Sepatu')
AND harga BETWEEN 50000 AND 250000
ORDER BY harga ASC;
📋 Tabel Perbandingan: BETWEEN vs IN
| Aspek | BETWEEN | IN |
|---|---|---|
| Kegunaan Utama | Rentang nilai berurutan | Daftar nilai spesifik (diskrit) |
| Tipe Data Ideal | Angka, Tanggal, String alfabet | String, Angka, ID/kode |
| Inklusivitas | Inklusif (termasuk kedua batas) | Cocok tepat (exact match) |
| Versi Negasi | NOT BETWEEN |
NOT IN |
| Ekuivalen dengan | >= min AND <= max |
= val1 OR = val2 OR ... |
| Perhatian Khusus | min harus <= max, atau hasil kosong | Hati-hati NULL dalam daftar |
Gunakan BETWEEN untuk filter harga dan tanggal — dua use case paling umum di aplikasi nyata. Pastikan kamu selalu meletakkan nilai yang lebih kecil di kiri: BETWEEN 100 AND 500, bukan sebaliknya.
Di proyek nyata, IN sering diisi secara dinamis dari input pengguna — misalnya checkbox kategori. Query seperti WHERE id_produk IN (?, ?, ?) dengan prepared statement adalah pola yang aman dan umum dipakai di backend API.
Pelajari cara mengurutkan hasil query — ascending, descending, multi-kolom, dan pengurutan berdasarkan ekspresi kustom.
No comments:
Post a Comment