MYSQL de IN operator
Home

MYSQL de IN operator

MYSQL de IN operator

Met de IN operator kan je zoeken in een lijst van opgegeven waarden.

Probleem

Je weet precies welke waarden belangrijk zijn en je wil geen lange expressie met een heleboel OR-operaties uitschrijven.

Oplossing

Met het sleutelwoord IN kan je een lijst van alle aanvaardbare (of uitgesloten) waarden meegeven. Deze waarden zijn ingesloten in ronde haakjes.

Om de boeken geschreven door De Roover en Kaye te selecteren:

use ModernWays;
select Familienaam, Titel, Verschijningsdatum
from Boeken
where Familienaam IN ('De Roover', 'Kaye');

De IN operator is een afkorting voor een reeks vergelijkingen, verbonden met OR-operatoren. Bovenstaande code doet net hetzelfde als:

use ModernWays;
select Familienaam, Titel, Verschijningsdatum
from Boeken
where Familienaam = 'De Roover' OR Familienaam = 'Kaye';

Het hoeft dus niet te verbazen dat iets van de vorm ... IN ... een booleaanse waarde oplevert. Het is een booleaanse expressie. Je kan de operator daarom ook combineren met logische operatoren. Bijvoorbeeld, als je alle boeken wilt die niet van De Roover of Kaye zijn:

use ModernWays;

select Familienaam, Titel, Verschijningsdatum
from Boeken
where Familienaam not in ('De Roover', 'Kaye')

Merk op dat de laatste regel een meer leesbare versie is van where not (Familienaam in ('De Roover', 'Kaye'))

Je bent niet beperkt tot één gebruik van IN. Je wil bijvoorbeeld alle boeken die niet zijn geschreven door De Roover of Kaye en die zijn verschenen in 2000 of 2001:

select Familienaam, Titel, Verschijningsdatum
from Boeken
where (Familienaam not in ('De Roover', 'Kaye'))
      and (Verschijningsdatum in ('2000', '2001'));

De ronde haakjes moeten er niet bij. Ze maken alleen de expressie duidelijker. Het is een goede praktijk ze er altijd bij te plaatsen.

Opdracht

Los volgende opdrachten op zonder uitdrukkelijk gebruik te maken van een vergelijkingsoperator of een OR.

Opmerking

Wildcards kan je enkel gebruiken in de LIKE clausule en niet in de IN. De volgende SELECT retourneert niets alhoewel er boeken uit de jaren 80 en 40 uit de vorige eeuw in de tabel Boeken zitten:

select Titel, Verschijningsjaar from Boeken
   where Verschijningsjaar in ('198_', '194_');

De underscores worden hier letterlijk opgevat en er zitten geen boeken van het jaar 198_ in de tabel. Hier zal je dus moeten terugvallen op booleaanse expressies (op basis van LIKE) verbonden via OR.

Opmerking

Het effect van hoofdletters en accenten hangt opnieuw af van het gebruik van de juiste collation na de waarden in de lijst.

JI & VN
2018-03-21 00:59:02