W SQL IN Operator umożliwia filtrowanie wyników zapytania na podstawie listy wartości.
Możesz go również użyć do dopasowania dowolnej wartości zwróconej przez podzapytanie (podzapytanie to zapytanie zagnieżdżone w innym zapytaniu).
Tabele źródłowe
Poniższe tabele są używane jako przykłady na tej stronie.
SELECT * FROM PetTypes;
SELECT * FROM Pets; Wynik:
+-------------+-----------+ | 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)
Przykład
Oto przykład demonstrujący IN operatora.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag'); Wynik:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 4 | Wag | 2020-03-15 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | +---------+-----------+------------+
Ten sam wynik możemy osiągnąć, używając dwóch OR operatorzy:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR PetName = 'Bark'
OR PetName = 'Wag';
Jednak IN operator jest bardziej zwięzłym sposobem na zrobienie tego. IN Operator jest szczególnie przydatny, gdy masz długą listę wartości, z którymi można porównywać.
IN operator prawie zawsze wykonuje się szybciej niż wiele OR operatorów, zwłaszcza na większych zbiorach danych.
Wartości liczbowe
Wartości nie ograniczają się tylko do ciągów. Na przykład możesz użyć IN na liście wartości liczbowych.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 5); Wynik:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+
Daty
Oto przykład z listą dat.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE DOB IN (
'2020-11-20',
'2018-10-01',
'2015-10-01'
); Wynik:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | +---------+-----------+------------+
Korzystanie z IN z podzapytaniami
Kolejna zaleta IN operator, może zawierać inny SELECT lista. Jest to znane jako podzapytanie . Podzapytanie to zapytanie zagnieżdżone w innym zapytaniu (lub nawet innym podzapytaniu).
Oto przykład.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets ); Wynik:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Ten przykład pokazuje nam, ile rodzajów zwierząt znajduje się w naszym hotelu dla zwierząt.
Korzystanie z NOT IN
Moglibyśmy dodać NOT operatora, aby odwrócić to i zobaczyć, ile typów zwierząt nie w naszym hotelu dla zwierząt.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets ); Wynik:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
W tym przypadku nasza baza danych zawiera typ zwierzaka Rabbit , ale obecnie nie mamy żadnych królików jako zwierząt domowych.
Wyrażenia
Podane wartości są listą wyrażeń. Dlatego możesz robić takie rzeczy:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 2 + 3); Wynik:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+