Penjelasan sederhana
IN mencocokkan kolom dengan sebuah daftar nilai. kota IN ('Bandung', 'Surabaya') artinya kotanya Bandung atau Surabaya. Hasilnya sama dengan menulis beberapa OR, tapi jauh lebih ringkas.
Isi daftarnya bisa ditulis langsung, atau diambil dari query lain (subquery), misalnya "pelanggan yang pernah membeli produk X".
Sintaks
WHERE kolom IN (nilai1, nilai2, ...);
| Bagian | Keterangan |
|---|---|
(nilai1, nilai2, ...) | Daftar nilai yang dicari. Bisa juga berupa subquery. |
Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.
Contoh IN
Data contoh: karyawan
Tabel karyawan
| id | nama | dept_id | kota | gaji | tgl_masuk | atasan_id |
|---|---|---|---|---|---|---|
| 1 | Andi Pratama | 3 | Bandung | 12500000 | 2019-03-11 | NULL |
| 2 | Bunga Lestari | 1 | Jakarta | 9800000 | 2020-07-01 | NULL |
| 3 | Candra Wijaya | 3 | Bandung | 8200000 | 2021-02-15 | 1 |
| 4 | Dewi Anggraini | 2 | Jakarta | 7500000 | 2022-05-09 | 6 |
| 5 | Eko Saputra | 1 | Jakarta | 6900000 | 2023-01-16 | 2 |
| 6 | Fajar Nugroho | 2 | Surabaya | 11000000 | 2018-09-03 | NULL |
| 7 | Gita Permata | 3 | Jakarta | 8200000 | 2023-08-21 | 1 |
| 8 | Hendra Gunawan | NULL | Medan | 5500000 | 2024-04-02 | NULL |
SELECT nama, kota
FROM karyawan
WHERE kota IN ('Bandung', 'Surabaya');
Hasil 3 baris
| nama | kota |
|---|---|
| Andi Pratama | Bandung |
| Candra Wijaya | Bandung |
| Fajar Nugroho | Surabaya |
Sama dengan WHERE kota = 'Bandung' OR kota = 'Surabaya'.
Cara kerjanya, langkah demi langkah
FROM karyawan: 8 baris diambil.- Untuk setiap baris, kotanya dicek apakah ada di daftar (Bandung, Surabaya).
- Yang cocok: Andi dan Candra dari Bandung, serta Fajar dari Surabaya.
Dipakai untuk apa di kantor?
- Menyaring beberapa cabang atau kategori sekaligus.
- Mengambil data untuk daftar ID tertentu yang diminta tim lain.
Kesalahan yang sering terjadi
- Lupa kutip untuk nilai teks di dalam daftar.
- Memakai
NOT INdengan daftar yang berisi NULL. Hasilnya bisa kosong sama sekali. Untuk subquery,NOT EXISTSlebih aman.
BETWEEN