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 💡

  1. Pake Index

    -- Query ini bakal cepet kalo ada index di kolom category_id
    SELECT * FROM products WHERE category_id = 1;
    
  2. Hindari Wildcard di Awal

    -- Lambat
    SELECT * FROM products WHERE nama LIKE '%top%';
    
    -- Lebih cepet
    SELECT * FROM products WHERE nama LIKE 'Lap%';
    
  3. Pake BETWEEN daripada <= dan >=

    -- Lebih jelas
    SELECT * FROM products 
    WHERE harga BETWEEN 100000 AND 500000;
    

Latihan 🎯

  1. Cari Produk Mahal

    SELECT nama, harga 
    FROM products 
    WHERE harga > 1000000 
    ORDER BY harga DESC;
    
  2. 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;
    
  3. 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! 🎯