Mengapa NOT IN?
Fokus pada operator NOT IN berangkat dari kegunaannya dalam skenario eksklusi data. Baik saat Anda membersihkan data, menyiapkan laporan, atau melakukan analisis kompleks, memahami cara mengecualikan titik data tertentu secara efektif sangatlah berharga. Operator ini menawarkan sintaks yang lugas tetapi memiliki nuansa yang dapat memengaruhi kinerja dan akurasi.
Keputusan kami untuk mengulas NOT IN secara mendalam adalah untuk memberikan pemahaman komprehensif yang membekali Anda agar dapat menggunakannya secara efektif dalam kueri SQL.
Memahami SQL NOT IN
Dasar-Dasar NOT IN
Operator NOT IN digunakan di dalam klausa WHERE untuk mengecualikan baris ketika nilai sebuah kolom yang ditentukan cocok dengan salah satu nilai dalam daftar tertentu. Sintaks dasarnya sebagai berikut:
SELECT column_names
FROM table_name
WHERE column_name NOT IN (value1, value2, ...);
Sintaks ini menyoroti peran operator dalam memfilter data—langkah krusial dalam analisis data dan manajemen basis data.
Aplikasi Praktis NOT IN
Pertimbangkan sebuah basis data yang berisi tabel informasi pelanggan. Jika Anda ingin memilih pelanggan yang bukan berasal dari kota-kota tertentu, NOT IN menjadi alat yang sangat berguna, memungkinkan Anda mengecualikan kota-kota tersebut dari himpunan hasil dengan mudah.
Contoh NOT IN Langkah demi Langkah
Contoh 1: Mengecualikan Nilai Tertentu
Misalkan kita memiliki tabel bernama Customers dengan kolom CustomerID, CustomerName, dan City. Untuk menemukan pelanggan yang tidak berada di 'New York' atau 'Los Angeles', kuerinya adalah:
|
CustomerlD |
CustomerName |
City |
|
1 |
John Doe |
New York |
|
2 |
Jane Smith |
Los Angeles |
|
3 |
Emily Jones |
Chicago |
|
4 |
Chris Brown |
Miami |
|
5 |
Alex Johnson |
San Francisco |
|
6 |
Jessica White |
New York |
Tabel Customers
SELECT CustomerName, City
FROM Customers
WHERE City NOT IN ('New York', 'Los Angeles');
|
CustomerName |
City |
|
Emily Jones |
Chicago |
|
Chris Brown |
Miami |
|
Alex Johnson |
San Francisco |
Contoh 2: Menggunakan NOT IN dengan Subkueri
NOT IN juga dapat digunakan dengan subkueri. Misalnya, untuk menemukan produk yang belum pernah dipesan:
|
ProductID |
ProductName |
|
1 |
Apple |
|
2 |
Banana |
|
3 |
Orange |
|
4 |
Pear |
|
5 |
Grape |
Tabel Products
|
OrderID |
ProductID |
|
101 |
2 |
|
102 |
4 |
|
103 |
2 |
|
104 |
3 |
Tabel Orders
SELECT ProductName
FROM Products
WHERE ProductID NOT IN (
SELECT ProductID
FROM Orders
);
|
ProductName |
|
Apple |
|
Grape |
Jebakan Umum dan Cara Menghindarinya
Menangani Nilai NULL
Masalah umum dengan NOT IN muncul ketika daftar nilai berisi NULL. Karena NULL merepresentasikan nilai yang tidak diketahui, perbandingan apa pun dengan NULL menggunakan NOT IN tidak akan mengembalikan baris apa pun, bahkan jika ada baris yang secara logis seharusnya dikecualikan dari daftar.
Untuk mengatasinya, pastikan daftar nilai tidak mengandung NULL atau gunakan pendekatan alternatif seperti NOT EXISTS.
Contoh:
Misalkan kita memiliki tabel Orders dengan kolom CustomerID, sebagian di antaranya NULL untuk merepresentasikan pesanan tamu. Jika Anda menjalankan kueri untuk menemukan pesanan yang tidak dibuat oleh pelanggan tertentu, menyertakan NULL dalam daftar akan menyebabkan tidak ada hasil yang dikembalikan.
|
OrderID |
CustomerID |
|
101 |
3 |
|
102 |
4 |
|
103 |
2 |
|
104 | |
|
106 |
1 |
Tabel Orders
-- Assume we want to exclude CustomerID 1, 2, and unknown (NULL) customers
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2, NULL);
Kueri ini tidak akan mengembalikan baris apa pun, yang kemungkinan bukan hasil yang diinginkan.
Solusi: Untuk memastikan hasil yang akurat, hindari menyertakan NULL dalam daftar untuk NOT IN. Alternatifnya, gunakan kombinasi NOT IN untuk nilai yang diketahui dan IS NOT NULL untuk menangani NULL secara efektif.
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2) AND CustomerID IS NOT NULL;
|
OrderID |
|
101 |
|
102 |
Pertimbangan Kinerja
Untuk dataset besar atau subkueri, NOT IN bisa kurang efisien dibanding alternatif seperti NOT EXISTS atau LEFT JOIN /IS NULL. Inefisiensi ini berasal dari cara NOT IN membandingkan setiap baris dalam tabel dengan setiap nilai dalam daftar, yang dapat menyebabkan kinerja lambat pada dataset besar.
Alternatif untuk SQL NOT IN
Menggunakan NOT EXISTS
NOT EXISTS sering direkomendasikan dibanding NOT IN saat berurusan dengan subkueri yang mungkin mengembalikan nilai NULL. Umumnya lebih efisien karena akan berhenti segera setelah menemukan kecocokan.
Contoh:
Untuk mencari produk yang belum pernah dipesan, menggunakan NOT EXISTS:
SELECT ProductName
FROM Products p
WHERE NOT EXISTS (
SELECT 1
FROM Orders o
WHERE o.ProductID = p.ProductID
);
|
ProductName |
|
Apple |
|
Grape |
Kueri ini memeriksa ketidakberadaan sebuah produk di tabel orders, yang bisa lebih efisien daripada membandingkan terhadap daftar ID yang berpotensi besar dengan NOT IN.
LEFT JOIN / IS NULL
Alternatif efisien lainnya untuk mengecualikan baris adalah menggunakan LEFT JOIN dikombinasikan dengan klausa WHERE ... IS NULL. Metode ini sangat efektif untuk dataset besar.
Contoh:
Untuk mencapai tujuan yang sama, yaitu menemukan produk yang belum pernah dipesan:
SELECT p.ProductName
FROM Products p
LEFT JOIN Orders o ON p.ProductID = o.ProductID
WHERE o.ProductID IS NULL;
|
ProductName |
|
Apple |
|
Grape |
Metode ini memanfaatkan LEFT JOIN untuk memasukkan semua produk dan pesanan yang cocok, lalu menyaring produk yang memiliki pesanan menggunakan WHERE o.ProductID IS NULL, sehingga efektif mengecualikannya.
Praktik Terbaik dalam Menggunakan NOT IN
- Periksa daftar dari nilai
NULL: Pastikan daftar yang digunakan dalamNOT INtidak mengandung nilai NULL untuk menghindari hasil yang tidak terduga. - Pertimbangkan ukuran dataset: Untuk dataset besar atau subkueri, evaluasi apakah alternatif seperti
NOT EXISTSdapat memberikan kinerja yang lebih baik. - Pengindeksan: Pastikan kolom yang digunakan dalam klausa
NOT INdiindeks, jika memungkinkan, untuk meningkatkan kinerja kueri.
Menggunakan NOT IN dalam Proyek Data Nyata
Dalam analisis data, perintah SQL "Not IN" umum digunakan untuk mengambil data tertentu. Pada bagian ini, kita akan bekerja dengan basis data toko buku yang melacak persediaan (buku yang tersedia di toko) dan penjualan (buku yang terjual). Tujuan kita adalah mengidentifikasi buku mana yang belum pernah terjual.
Kita memiliki dua tabel:
- Inventory: menyimpan informasi tentang buku di toko buku.
- Sales: menyimpan catatan buku yang telah terjual.

Tabel Inventory

Tabel Sales
Sekarang, kita ingin mengetahui buku mana yang belum pernah terjual.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
);

Selanjutnya, kita ingin mengidentifikasi buku dalam persediaan yang belum terjual dalam satu bulan terakhir, dengan asumsi hari ini adalah 7 Februari 2024. Ini melibatkan pengecekan SaleDate di tabel Sales terhadap tanggal saat ini.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
WHERE SaleDate >= date('now', '-1 month')
);

Kesimpulan
Operator NOT IN adalah alat serbaguna di SQL untuk mengecualikan nilai tertentu dari hasil kueri Anda. Dengan memahami sintaks, aplikasi praktis, dan potensi jebakannya, Anda dapat menggunakan operator ini secara efektif dalam tugas manipulasi data.
Ingatlah untuk mempertimbangkan nilai NULL dan ukuran dataset guna mengoptimalkan kinerja dan akurasi kueri Anda. Seiring Anda semakin akrab dengan NOT IN, Anda akan mendapati ini sebagai tambahan yang sangat berharga dalam perangkat SQL Anda, memungkinkan analisis dan pengelolaan data yang lebih presisi dan efisien.
Anda dapat mempelajari lebih lanjut tentang NOT IN dan NOT EXISTS di kursus kami Improving Query Performance in SQL Server serta mengeksplorasi operator SQL dan banyak lagi di SQL Basics Cheat Sheet dan SQL Fundamentals skill track.
Sebagai data scientist tersertifikasi, saya bersemangat memanfaatkan teknologi mutakhir untuk menciptakan aplikasi machine learning yang inovatif. Dengan latar belakang kuat di pengenalan ucapan, analisis dan pelaporan data, MLOps, conversational AI, dan NLP, saya mengasah keterampilan dalam mengembangkan sistem cerdas yang berdampak nyata. Selain keahlian teknis, saya juga komunikator andal yang mampu menyederhanakan konsep kompleks menjadi bahasa yang jelas dan ringkas. Karena itu, saya menjadi blogger yang dicari di bidang data science, membagikan wawasan dan pengalaman kepada komunitas profesional data yang terus berkembang. Saat ini, saya berfokus pada pembuatan dan penyuntingan konten, bekerja dengan large language model untuk mengembangkan konten yang kuat dan menarik agar membantu bisnis dan individu memaksimalkan data mereka.


Dalam ranah analisis dan manajemen data, SQL (Structured Query Language) merupakan alat penting untuk mengakses dan memanipulasi sistem basis data. Di antara banyak fungsinya, operator
NOT INmenjadi cara yang ampuh untuk memfilter himpunan data, memungkinkan pengguna mengecualikan baris yang cocok dengan daftar nilai tertentu. Tutorial ini dirancang untuk mengulas operatorNOT INbagi pemula dan praktisi data, memastikan kejelasan penerapannya serta memahami potensi jebakannya.