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 | +---------+-----------+------------+