IN, BETWEEN, LIKE, dan Misteri NULL

Operator filter praktis: IN untuk daftar nilai, BETWEEN untuk rentang, LIKE untuk pola teks, dan IS NULL untuk nilai kosong, lengkap dengan logika tiga nilai NULL.

Part 13 dari 38 ± 40 menit Gratis

IN: cocokkan dengan daftar

Daripada menulis banyak OR:

WHERE kota = 'Jakarta' OR kota = 'Bandung' OR kota = 'Surabaya'

cukup tulis:

WHERE kota IN ('Jakarta', 'Bandung', 'Surabaya')
WHERE kota NOT IN ('Medan', 'Semarang')   -- kebalikannya

BETWEEN: dalam rentang (batas ikut dihitung)

WHERE harga BETWEEN 10000 AND 20000          -- harga >= 10000 AND harga <= 20000
WHERE tgl_daftar BETWEEN '2023-01-01' AND '2023-06-30'

Kedua ujung termasuk. Nilai kecil harus ditulis lebih dulu. Cocok untuk angka dan tanggal.

LIKE: mencari pola teks

Karakter polaArtinya
%nol atau lebih karakter apa saja
_tepat satu karakter apa saja
WHERE nama LIKE 'Kopi%'     -- diawali "Kopi"
WHERE nama LIKE '%Goreng'   -- diakhiri "Goreng"
WHERE nama LIKE '%teh%'     -- mengandung "teh" di mana saja
WHERE kode LIKE 'A_C'       -- A, satu huruf apa saja, lalu C (ABC, AXC, ...)
WHERE nama NOT LIKE '%a%'   -- TIDAK mengandung huruf a

Performa: LIKE 'Kopi%' (awalan) bisa memanfaatkan index dan cepat. LIKE '%kopi%' (awalan wildcard) harus memeriksa setiap baris, lambat di tabel besar. Untuk pencarian teks serius ada FULLTEXT index.

NULL: bukan nol, bukan kosong, tapi "tidak diketahui"

Kolom email Andi bernilai NULL: kita tidak tahu emailnya. Karena itu, perbandingan biasa dengan NULL tidak pernah menghasilkan benar:

SELECT * FROM pelanggan WHERE email = NULL;     -- hasil: 0 baris (SALAH CARA)
SELECT * FROM pelanggan WHERE email IS NULL;    -- benar: Andi dan Fitri
SELECT * FROM pelanggan WHERE email IS NOT NULL;

Kenapa? "Tidak diketahui sama dengan tidak diketahui?" Jawabannya tidak diketahui juga (bukan benar). SQL memakai logika tiga nilai: TRUE, FALSE, UNKNOWN, dan WHERE hanya meloloskan yang TRUE.

Ingat selalu: NULL ≠ 0, NULL ≠ '' (teks kosong). Dan NULL + 5 hasilnya NULL, bukan 5. Nilai kosong "menular" ke hasil hitungan.

Menggabungkan semuanya

SELECT nama, kota
FROM pelanggan
WHERE kota IN ('Jakarta', 'Bandung')
  AND email IS NOT NULL
  AND tgl_daftar BETWEEN '2023-01-01' AND '2023-06-30';

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X