In SQL is de IN
Met operator kunt u uw queryresultaten filteren op basis van een lijst met waarden.
U kunt het ook gebruiken om elke waarde te matchen die wordt geretourneerd door een subquery (een subquery is een query die in een andere query is genest).
Brontabellen
De volgende tabellen worden gebruikt voor de voorbeelden op deze pagina.
SELECT * FROM PetTypes;
SELECT * FROM Pets;
Resultaat:
+-------------+-----------+ | 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)
Voorbeeld
Hier is een voorbeeld om de IN
. te demonstreren telefoniste.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');
Resultaat:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 4 | Wag | 2020-03-15 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | +---------+-----------+------------+
We zouden hetzelfde resultaat kunnen bereiken door twee OR
. te gebruiken operators:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR PetName = 'Bark'
OR PetName = 'Wag';
Echter, de IN
operator is een beknoptere manier om dit te doen. De IN
operator is vooral handig als u een lange lijst met waarden hebt waarmee u kunt vergelijken.
De IN
operator voert bijna altijd sneller uit dan meerdere OR
operators, vooral bij grotere datasets.
Numerieke waarden
De waarden zijn niet beperkt tot alleen strings. U kunt bijvoorbeeld IN
. gebruiken op een lijst met numerieke waarden.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 5);
Resultaat:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+
Datums
Hier is een voorbeeld dat een lijst met datums gebruikt.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE DOB IN (
'2020-11-20',
'2018-10-01',
'2015-10-01'
);
Resultaat:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | +---------+-----------+------------+
Gebruik IN
met subquery's
Een ander voordeel van de IN
operator, is dat het een andere SELECT
. kan bevatten lijst. Dit staat bekend als een subquery . Een subquery is een query die is genest in een andere query (of zelfs een andere subquery).
Hier is een voorbeeld.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Resultaat:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Dit voorbeeld laat ons zien hoeveel soorten huisdieren er in ons dierenhotel zijn.
Gebruik NOT IN
We kunnen de NOT
. toevoegen operator om dit om te draaien en te zien hoeveel soorten huisdieren niet zijn in ons dierenhotel.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );
Resultaat:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
In dit geval bevat onze database het huisdiertype Rabbit
, maar we hebben momenteel geen konijnen als huisdier.
Uitdrukkingen
De opgegeven waarden zijn een lijst met uitdrukkingen. Daarom kun je dit soort dingen doen:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 2 + 3);
Resultaat:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+