Coba bayangkan kamu lagi cari produk di toko online. Kamu mau cari tas yang harganya di bawah 200 ribu dan stoknya masih ada. Atau kamu mau filter pelanggan dari Jakarta atau Surabaya. Atau bahkan mau tampilkan semua produk kecuali yang sudah habis. Nah, semua kebutuhan filter kondisi ganda itu di SQL MySQL diselesaikan pakai tiga operator ajaib: AND OR NOT MySQL.
Selamat datang di Artikel ke-9 dari seri Belajar Query SQL MySQL! Di artikel sebelumnya kamu sudah menguasai ORDER BY untuk mengurutkan data. Sekarang kita tingkatkan kemampuan filtering-mu dengan operator logika yang bikin query makin presisi dan powerful.
Di artikel ini kamu akan belajar cara kerja operator AND, OR, dan NOT lengkap dengan aturan prioritas, kombinasi ketiganya, dan jebakan-jebakan klasik yang sering bikin pemula pusing. Semua pakai studi kasus toko online yang familiar. Let's go! 🚀
⚡ Fakta Menarik
Operator AND, OR, dan NOT bukan hanya milik SQL — mereka berasal dari Aljabar Boolean yang diciptakan George Boole pada tahun 1847! Konsep yang sama dipakai di pemrograman, rangkaian logika hardware, dan mesin pencari Google untuk memfilter miliaran halaman web. Jadi belajar ini bukan cuma buat SQL ya!
AND OR NOT MySQL: Mulai dari Operator AND
Operator AND itu seperti syarat masuk suatu club: kamu harus tinggi minimal 170cm DAN berusia 21+. Kalau salah satu tidak terpenuhi, kamu tidak masuk. Dalam SQL, AND mengembalikan baris hanya jika semua kondisi bernilai TRUE.
📋 Sintaks AND
SELECT kolom1, kolom2 FROM nama_tabel WHERE kondisi_1 AND kondisi_2 -- semua harus TRUE AND kondisi_3; -- bisa lebih dari dua kondisi
Contoh: Tampilkan produk kategori Elektronik yang harganya di bawah Rp 300.000:
SELECT nama_produk, kategori, harga, stok FROM produk WHERE kategori = 'Elektronik' AND harga < 300000;
📊 Hasil Query:
| nama_produk | kategori | harga | stok |
|---|---|---|---|
| Mouse Wireless | Elektronik | Rp 185.000 | 60 |
| USB Hub 4 Port | Elektronik | Rp 95.000 | 40 |
→ Laptop Stand (Rp 250.000) dan Speaker BT (Rp 350.000) tidak muncul: Laptop Stand lolos harga tapi perlu dicek, Speaker tidak lolos harga.
📋 Tabel Kebenaran AND:
| Kondisi A | Kondisi B | A AND B |
|---|---|---|
| TRUE | TRUE | TRUE ✓ |
| TRUE | FALSE | FALSE ✗ |
| FALSE | TRUE | FALSE ✗ |
| FALSE | FALSE | FALSE ✗ |
💡 Tip Praktis
Semakin banyak kondisi AND yang kamu tambahkan, semakin sedikit baris yang akan dikembalikan karena setiap kondisi mempersempit hasil. Ini sifat AND: interseksi / irisan.
Operator OR: Cukup Salah Satu Terpenuhi
Kalau AND itu ketat, OR itu lebih fleksibel. Bayangkan restoran yang menerima pembayaran cash ATAU kartu kredit — asal salah satu bisa, kamu bisa bayar. Dalam SQL, OR mengembalikan baris jika minimal satu kondisi bernilai TRUE. Artinya, semakin banyak OR kamu tambah, semakin banyak baris yang muncul.
📋 Sintaks OR
SELECT kolom1, kolom2
FROM nama_tabel
WHERE kondisi_1 OR kondisi_2; -- minimal satu TRUE = lolos
Contoh: Tampilkan pelanggan yang berdomisili di Surabaya atau Jakarta:
SELECT nama_pelanggan, kota, email FROM pelanggan WHERE kota = 'Surabaya' OR kota = 'Jakarta';
📊 Hasil Query:
| nama_pelanggan | kota | |
|---|---|---|
| Budi Santoso | Surabaya | budi@email.com |
| Dewi Lestari | Jakarta | dewi@email.com |
| Reza Pratama | Surabaya | reza@email.com |
📋 Tabel Kebenaran OR:
| Kondisi A | Kondisi B | A OR B |
|---|---|---|
| TRUE | TRUE | TRUE ✓ |
| TRUE | FALSE | TRUE ✓ |
| FALSE | TRUE | TRUE ✓ |
| FALSE | FALSE | FALSE ✗ |
💡 Tip Praktis
Kalau kamu punya banyak nilai OR untuk satu kolom yang sama (misal: kota = 'Surabaya' OR kota = 'Jakarta' OR kota = 'Bandung'), ada cara yang lebih rapi: gunakan operator IN! Contoh: WHERE kota IN ('Surabaya', 'Jakarta', 'Bandung').
Operator NOT: Balik Kondisi Jadi Kebalikannya
Kalau AND dan OR adalah tentang menggabungkan kondisi, NOT adalah tentang membaliknya. Analoginya simpel: "tampilkan semua produk kecuali yang kehabisan stok". NOT mengubah TRUE jadi FALSE dan sebaliknya — alias negasi logika.
📋 Sintaks NOT
SELECT kolom1, kolom2 FROM nama_tabel WHERE NOT kondisi; -- balikkan hasil kondisi -- Atau dikombinasikan: WHERE NOT (kondisi_1 AND kondisi_2); WHERE kolom NOT IN (...); WHERE kolom NOT LIKE '%kata%';
Contoh: Tampilkan semua produk yang bukan dari kategori Elektronik:
SELECT nama_produk, kategori, harga
FROM produk
WHERE NOT kategori = 'Elektronik';
-- Cara lain yang sama hasilnya:
WHERE kategori != 'Elektronik';
WHERE kategori <> 'Elektronik';
📊 Hasil Query:
| nama_produk | kategori | harga |
|---|---|---|
| Pulpen Biru | Alat Tulis | Rp 3.000 |
| Buku Tulis A5 | Alat Tulis | Rp 8.500 |
| Tas Sekolah | Tas | Rp 95.000 |
⚠️ Peringatan — NOT dan NULL
Hati-hati! NOT NULL ≠ IS NOT NULL. Kalau kamu mau filter baris yang kolomnya tidak kosong, gunakan IS NOT NULL, bukan NOT kolom = NULL karena kondisi NULL tidak bisa dievaluasi dengan operator biasa.
Kombinasi AND OR NOT MySQL dan Aturan Prioritas
Nah, ini bagian yang paling penting sekaligus paling sering bikin bug! Ketika kamu pakai AND dan OR bersamaan, MySQL punya aturan prioritas: NOT diproses dulu, baru AND, terakhir OR. Sama seperti matematika: perkalian sebelum penjumlahan.
🚨 Urutan Prioritas Operator
Perhatikan perbedaan hasil dua query berikut:
-- ❌ Tanpa kurung — hasil mungkin tidak sesuai harapan -- MySQL baca: (kategori = 'Tas' AND harga < 50000) OR stok > 100 SELECT nama_produk, kategori, harga, stok FROM produk WHERE kategori = 'Tas' AND harga < 50000 OR stok > 100; -- ✅ Dengan kurung — eksplisit dan aman -- MySQL baca persis seperti yang kamu maksud SELECT nama_produk, kategori, harga, stok FROM produk WHERE kategori = 'Tas' AND (harga < 50000 OR stok > 100);
📊 Contoh Kombinasi Tiga Operator Sekaligus:
-- Produk elektronik atau alat tulis, yang harganya di atas 5000,
-- dan BUKAN yang stoknya 0
SELECT nama_produk, kategori, harga, stok
FROM produk
WHERE (kategori = 'Elektronik' OR kategori = 'Alat Tulis')
AND harga > 5000
AND NOT stok = 0;
📊 Hasil Query:
| nama_produk | kategori | harga | stok |
|---|---|---|---|
| Buku Tulis A5 | Alat Tulis | Rp 8.500 | 200 |
| Mouse Wireless | Elektronik | Rp 185.000 | 60 |
| USB Hub 4 Port | Elektronik | Rp 95.000 | 40 |
💡 Golden Rule
Selalu gunakan tanda kurung () saat mix AND dan OR. Ini bukan hanya soal kebenaran logika, tapi juga soal keterbacaan kode. Orang lain (atau kamu sendiri 6 bulan kemudian) akan berterima kasih!
Panduan Praktikum Langkah demi Langkah
Siapkan tabel produk dan pelanggan
INSERT INTO produk (nama_produk, kategori, harga, stok) VALUES
('Pulpen Biru','Alat Tulis',3000,150),
('Buku Tulis A5','Alat Tulis',8500,200),
('Mouse Wireless','Elektronik',185000,60),
('Laptop Stand','Elektronik',250000,30),
('USB Hub 4 Port','Elektronik',95000,40),
('Tas Sekolah','Tas',95000,45),
('Keyboard Mekanikal','Elektronik',550000,0);
Latih operator AND
-- Elektronik dengan stok tersedia
SELECT * FROM produk
WHERE kategori = 'Elektronik' AND stok > 0;
Latih operator OR
-- Produk Alat Tulis ATAU yang harganya murah
SELECT * FROM produk
WHERE kategori = 'Alat Tulis' OR harga < 10000;
Latih operator NOT
-- Semua produk kecuali yang stoknya habis SELECT * FROM produk WHERE NOT stok = 0; -- Sama dengan: SELECT * FROM produk WHERE stok != 0;
🏆 Tantangan: gabungkan ketiganya!
-- Tampilkan produk (Elektronik atau Tas), harga < 300rb,
-- dan BUKAN yang stok-nya 0. Urutkan dari termurah!
SELECT nama_produk, kategori, harga, stok
FROM produk
WHERE (kategori = 'Elektronik' OR kategori = 'Tas')
AND harga < 300000
AND NOT stok = 0
ORDER BY harga ASC;
Tabel Ringkasan: AND, OR, NOT MySQL
| Operator | Logika | Hasil TRUE jika... | Efek pada Jumlah Baris |
|---|---|---|---|
| AND | Irisan / Semua kondisi harus terpenuhi | Semua kondisi = TRUE | ↓ Mempersempit hasil |
| OR | Gabungan / Cukup satu kondisi terpenuhi | Minimal satu kondisi = TRUE | ↑ Memperluas hasil |
| NOT | Negasi / Balik nilai kondisi | Kondisi asli = FALSE | ↕ Tergantung kondisi |
| Prioritas | NOT → AND → OR | ||
| Best Practice | Selalu gunakan (kurung) saat mix AND dan OR untuk kejelasan logika | ||
Tips & Insight dari Trainer Lapangan
🚀 Insight #1 — Ganti OR Banyak dengan IN()
Kalau kamu punya banyak kondisi OR untuk kolom yang sama, kode bisa jadi panjang dan sulit dibaca. Solusinya: pakai operator IN() sebagai shortcut!
-- Cara panjang dengan OR WHERE kota='Surabaya' OR kota='Jakarta' OR kota='Bandung'; -- Cara ringkas dengan IN() — hasil SAMA persis WHERE kota IN ('Surabaya', 'Jakarta', 'Bandung'); -- Kebalikannya pakai NOT IN() WHERE kota NOT IN ('Surabaya', 'Jakarta', 'Bandung');
🎯 Insight #2 — Urutan Kondisi Bisa Pengaruhi Performa
Dari sisi performa, letakkan kondisi yang paling banyak menyaring data di posisi pertama (terutama untuk AND). MySQL bisa melakukan short-circuit evaluation — kalau kondisi pertama sudah FALSE, kondisi berikutnya tidak perlu dievaluasi. Ini tips kecil yang dampaknya besar di tabel besar!
⚠️ Insight #3 — Jebakan NULL yang Sering Menghantui
NULL itu bukan 0 dan bukan string kosong — NULL artinya "tidak ada nilai". Operator AND/OR/NOT dengan NULL bisa menghasilkan sesuatu yang disebut three-valued logic (TRUE, FALSE, atau UNKNOWN). Kalau ada NULL di kondisi, pakailah IS NULL atau IS NOT NULL.
-- ❌ Ini TIDAK akan bekerja sesuai harapan WHERE email = NULL; -- ✅ Gunakan IS NULL / IS NOT NULL WHERE email IS NULL; WHERE email IS NOT NULL;
🎯 Kesimpulan
- AND OR NOT MySQL adalah operator logika dasar untuk membangun kondisi filter yang kompleks dalam WHERE
- AND = semua kondisi harus TRUE → mempersempit hasil
- OR = cukup satu kondisi TRUE → memperluas hasil
- NOT = membalik nilai kondisi → berguna untuk eksklusi data
- Urutan prioritas: NOT → AND → OR — gunakan tanda kurung () untuk menghindari bug logika
- Hati-hati dengan NULL — gunakan IS NULL / IS NOT NULL, bukan operator perbandingan biasa
Operator AND, OR, dan NOT adalah "bahasa logika" yang dipakai di mana-mana — dari query database, kondisi pemrograman, sampai mesin pencari. Menguasai ketiganya berarti kamu makin siap membangun aplikasi yang sesungguhnya. 💪 Sekarang giliran kamu praktik!
← Artikel #8
Mengurutkan Data: ORDER BY ASC dan DESC
Artikel #10 →
Membatasi Hasil: LIMIT dan OFFSET
Pelajari cara ambil data tertentu dan buat pagination!
No comments:
Post a Comment