Data Filtering: Menyaring Data dengan SQL 🔍
Halo SQL Explorers! 👋 Di materi sebelumnya kita udah belajar perintah dasar SQL. Sekarang kita bakal belajar cara nyaring data biar dapet hasil yang lebih spesifik!
Data yang Kita Pake 📊
Kita tetep pake database toko online yang udah kita bikin:
-- Liat data di tabel products
SELECT * FROM products;
+----+---------------+----------+------+-------------+
| id | nama | harga | stok | category_id |
+----+---------------+----------+------+-------------+
| 1 | Laptop Gaming | 15000000 | 5 | 1 |
| 2 | Smartphone | 5000000 | 10 | 1 |
| 3 | Kemeja Casual | 200000 | 20 | 2 |
| 4 | Celana Jeans | 350000 | 15 | 2 |
| 5 | Snack Pack | 50000 | 100 | 3 |
| 6 | Minuman Soda | 15000 | 150 | 3 |
+----+---------------+----------+------+-------------+
-- Liat data di tabel customers
SELECT * FROM customers;
+----+------+----------------+----------+---------------------+
| id | nama | email | kota | created_at |
+----+------+----------------+----------+---------------------+
| 1 | Budi | budi@email.com | Jakarta | 2024-12-20 22:03:07|
| 2 | Ani | ani@email.com | Bandung | 2024-12-20 22:03:07|
| 3 | Caca | caca@email.com | Surabaya | 2024-12-20 22:03:07|
| 4 | Dodi | dodi@email.com | Jakarta | 2024-12-20 22:03:07|
+----+------+----------------+----------+---------------------+
1. WHERE Clause 🎯
WHERE itu buat nyaring data berdasarkan kondisi tertentu.
-- Cari produk elektronik (category_id = 1)
SELECT nama, harga
FROM products
WHERE category_id = 1;
-- Cari customer dari Jakarta
SELECT nama, email
FROM customers
WHERE kota = 'Jakarta';
-- Cari produk yang stoknya sedikit (< 10)
SELECT nama, stok
FROM products
WHERE stok < 10;
2. Operator Perbandingan 🔢
Kita bisa pake berbagai operator buat filter data:
-- Lebih besar dari (>)
SELECT nama, harga
FROM products
WHERE harga > 1000000;
-- Lebih kecil dari (<)
SELECT nama, stok
FROM products
WHERE stok < 50;
-- Sama dengan (=)
SELECT nama
FROM customers
WHERE kota = 'Jakarta';
-- Tidak sama dengan (<> atau !=)
SELECT nama
FROM products
WHERE category_id != 1;
-- Antara nilai tertentu (BETWEEN)
SELECT nama, harga
FROM products
WHERE harga BETWEEN 100000 AND 500000;
3. Operator Logika 🔄
AND, OR, dan NOT buat kombinasi kondisi:
-- AND: Dua kondisi harus benar
SELECT nama, harga
FROM products
WHERE category_id = 1
AND harga < 10000000;
-- OR: Salah satu kondisi benar
SELECT nama
FROM customers
WHERE kota = 'Jakarta'
OR kota = 'Bandung';
-- NOT: Kebalikan dari kondisi
SELECT nama
FROM products
WHERE NOT category_id = 3;
-- Kombinasi AND dan OR
SELECT nama, harga
FROM products
WHERE (category_id = 1 OR category_id = 2)
AND harga < 1000000;
4. Pattern Matching 📝
LIKE buat nyari pola dalam text:
-- Cari yang mulai dengan 'La'
SELECT nama
FROM products
WHERE nama LIKE 'La%';
-- Cari yang ada kata 'Gaming'
SELECT nama
FROM products
WHERE nama LIKE '%Gaming%';
-- Cari email dengan domain tertentu
SELECT nama, email
FROM customers
WHERE email LIKE '%@email.com';
5. IN Operator 📋
IN buat nyari data yang ada dalam list:
-- Cari produk dengan category tertentu
SELECT nama
FROM products
WHERE category_id IN (1, 2);
-- Cari customer dari kota tertentu
SELECT nama
FROM customers
WHERE kota IN ('Jakarta', 'Bandung');
6. NULL Values ❓
IS NULL dan IS NOT NULL buat cek data kosong:
-- Cari produk tanpa kategori
SELECT nama
FROM products
WHERE category_id IS NULL;
-- Cari customer dengan kota
SELECT nama
FROM customers
WHERE kota IS NOT NULL;
Tips Filtering yang Efektif 💡
Pake Index
-- Query ini bakal cepet kalo ada index di kolom category_id SELECT * FROM products WHERE category_id = 1;Hindari Wildcard di Awal
-- Lambat SELECT * FROM products WHERE nama LIKE '%top%'; -- Lebih cepet SELECT * FROM products WHERE nama LIKE 'Lap%';Pake BETWEEN daripada <= dan >=
-- Lebih jelas SELECT * FROM products WHERE harga BETWEEN 100000 AND 500000;
Latihan 🎯
Cari Produk Mahal
SELECT nama, harga FROM products WHERE harga > 1000000 ORDER BY harga DESC;Customer VIP
SELECT c.nama, COUNT(o.id) as total_order FROM customers c LEFT JOIN orders o ON c.id = o.customer_id GROUP BY c.nama HAVING COUNT(o.id) >= 2;Stok Menipis
SELECT nama, stok FROM products WHERE stok <= 10 ORDER BY stok;
Preview Materi Selanjutnya 🎯
Di materi JOIN kita bakal belajar:
- Gabungin data dari beberapa tabel
- Liat produk dan kategorinya
- Cek order dari setiap customer
- Dan masih banyak lagi! 🚀
Siap belajar JOIN? Yuk lanjut ke materi JOIN! 🎯