Dalam SQL, kode IN
operator memungkinkan Anda untuk memfilter hasil kueri Anda berdasarkan daftar nilai.
Anda juga dapat menggunakannya untuk mencocokkan nilai apa pun yang dikembalikan oleh subkueri (subkueri adalah kueri yang bersarang di dalam kueri lain).
Tabel Sumber
Tabel berikut digunakan untuk contoh di halaman ini.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Hasil:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | | 4 | Rabbit | +-------------+-----------+ (4 rows affected) +---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Contoh
Berikut adalah contoh untuk mendemonstrasikan IN
operator.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');
Hasil:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 4 | Wag | 2020-03-15 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | +---------+-----------+------------+
Kami dapat mencapai hasil yang sama dengan menggunakan dua OR
operator:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR PetName = 'Bark'
OR PetName = 'Wag';
Namun, kode IN
operator adalah cara yang lebih ringkas untuk melakukannya. IN
operator sangat bermanfaat ketika Anda memiliki daftar nilai yang panjang untuk dibandingkan.
IN
operator hampir selalu mengeksekusi lebih cepat daripada beberapa OR
operator, terutama pada kumpulan data yang lebih besar.
Nilai Numerik
Nilainya tidak terbatas hanya pada string. Misalnya, Anda dapat menggunakan IN
pada daftar nilai numerik.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 5);
Hasil:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+
Tanggal
Berikut adalah contoh yang menggunakan daftar tanggal.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE DOB IN (
'2020-11-20',
'2018-10-01',
'2015-10-01'
);
Hasil:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | +---------+-----------+------------+
Menggunakan IN
dengan Subquery
Manfaat lain dari IN
operator, apakah itu dapat berisi SELECT
. yang lain daftar. Ini dikenal sebagai subkueri . Subquery adalah kueri yang bersarang di dalam kueri lain (atau bahkan subkueri lain).
Ini contohnya.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Hasil:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Contoh ini menunjukkan kepada kita berapa banyak jenis hewan peliharaan di hotel hewan peliharaan kita.
Menggunakan NOT IN
Kita bisa menambahkan NOT
operator untuk membalik ini dan melihat berapa banyak jenis hewan peliharaan yang bukan di hotel hewan peliharaan kami.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );
Hasil:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
Dalam hal ini, database kami berisi jenis hewan peliharaan Rabbit
, tetapi saat ini kami tidak memiliki kelinci sebagai hewan peliharaan.
Ekspresi
Nilai yang diberikan adalah daftar ekspresi. Oleh karena itu, Anda dapat melakukan hal-hal seperti ini:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 2 + 3);
Hasil:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+