Leer alles over SQL

WHERE om gegevens te limiteren

geschreven door SQL Tutorial.nl SQL Tutorial.nl

Door middel van de WHERE clausule is het mogelijk om de resultset uit bijvoorbeeld te laten voldoen aan bepaalde condities. De WHERE clausule bestaat uit één of meerdere condities.

Het WHERE statement

WHERE kan worden toegepast op SELECT queries, maar kan ook worden gebruikt bij onder andere UPDATE en DELETE queries.

SELECT kolomnaam FROM Tabelnaam WHERE conditie.

Vrijwel elke conditie in de WHERE begint met de kolomnaam, vervolgens een operator (moet gelijk zijn / niet gelijk zijn enz.) en tenslotte de waarde waar de kolomwaarde aan moet voldoen.

SELECT kolomnaam FROM Tabelnaam WHERE kolomnaam = 200

In het bovenstaande voorbeeld worden alleen de kolommen met de naam: kolomnaam opgehaald waarvan de waarde van de kolom 200 is.

WHERE in de praktijk

De volgende dataset is de inhoud van de tabel Persoon.

id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
2, 'Petra', 'de klomp', 'Nijmegen'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'
4, 'Mieke', 'Sterk', 'Amsterdam'

Als we alle personen uit Amsterdam willen selecteren kunnen we de volgende query uitvoeren.

SELECT * FROM Persoon WHERE woonplaats = 'Amsterdam'
id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
4, 'Mieke', 'Sterk', 'Amsterdam'

Door het veranderen van de operator is het mogelijk om alle personen die niet woonachtig zijn in Amsterdam op te vragen

SELECT * FROM persoon WHERE Woonplaats <> 'Amsterdam'
id, voornaam, achternaam, woonplaats
2, 'Petra', 'de klomp', 'Nijmegen'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'

Operators

In de WHERE clausule is het mogelijk om operators te gebruiken voor het opbouwen van bepaalde condities. De volgende operators worden door SQL ondersteund.

=
De waarde in de kolom moet gelijk zijn aan de waarde die wordt meegegeven.
<>
De waarde in de kolom is niet gelijk aan de meegegeven waarde.
>
De kolomwaarde is groter dan de meegegeven waarde.
<
De kolomwaarde is kleiner dan de meegegeven waarde.
>=
De kolomwaarde is groter dan, of gelijk aan de meegegeven waarde.
<=
kolomwaarde is kleiner dan, of gelijk aan de meegegeven waarde.
BETWEEN
De kolomwaarde valt binnen een opgegeven reeks.
LIKE
Een deel van de kolomwaarde voldoet aan de meegegeven waarde.
IN
De kolomwaarde komt overeen met één van de waardes die zich binnen het IN statement bevind.

Gebruik van AND, OR en NOT

Het is mogelijk om meerdere criteria toe te voegen aan de WHERE clausule. Dit kan gedaan worden met de ANDOR en NOT operators.

Bij de AND operator worden de records gefilterd op basis van meer dan één conditie. Aan alle condities moet worden voldaan, anders dan zal het record gefilterd worden.

SELECT kolomnaam FROM Tabelnaam WHERE conditie1 AND conditie2

Net als bij de AND operator, worden bij de OR operator records gefilterd op basis van meer dan één conditie. Alleen in tegenstelling tot de AND wordt bij de OR het record in de resultset opgenomen als aan minimaal één van de condities is voldaan.

SELECT kolomnaam FROM Tabelnaam WHERE conditie1 OR conditie2

Het is ook mogelijk om meerdere AND en OR opererators met elkaar te combineren. De criteria kunnen worden gegroepeerd met ronde haken ( ( en ) ).

SELECT kolomnaam FROM Tabelnaam WHERE ( conditie1 AND conditie2 ) OR conditie3.

De NOT operator filtert de records die niet voldoen aan de conditie.

SELECT kolomnaam FROM Tabelnaam WHERE NOT conditie

AND, OR en NOT in de praktijk

De volgende dataset is de inhoud van de tabel Persoon.

id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
2, 'Petra', 'de klomp', 'Nijmegen'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'
4, 'Mieke', 'Sterk', 'Amsterdam'

Als we alle personen willen selecteren uit Amsterdam met een ID groter dan 2, dan kunnen we de volgende query met de AND operator gebruiken.

SELECT * FROM Persoon WHERE woonplaats = 'Amsterdam' AND id > 2
id, voornaam, achternaam, woonplaats
4, 'Mieke', 'Sterk', 'Amsterdam'

Als we alle personen willen selecteren uit Amsterdam of personen met een ID groter dan 2, dan kunnen we de volgende query met de OR operator gebruiken.

SELECT * FROM Persoon WHERE woonplaats = 'Amsterdam' || id > 2
id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'
4, 'Mieke', 'Sterk', 'Amsterdam'

Wat als we iedereen uit Amsterdam willen selecteren met een ID lager dan 4, maar ook iedereen die uit Nijmegen komt? We combineren van de AND en OR operators en groeperen deze.

SELECT * FROM Persoon WHERE ( id < 4 AND woonplaats = 'Amsterdam' ) OR woonplaats = 'Nijmegen'
id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
2, 'Petra', 'de klomp', 'Nijmegen'

We willen nu iedereen selecteren die niet uit Maastricht komen. Dit kunnen we doen met de NOT operator.

SELECT * FROM Persoon WHERE NOT woonplaats = 'Maastricht'
id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
2, 'Petra', 'de klomp', 'Nijmegen'
4, 'Mieke', 'Sterk', 'Amsterdam'

Dit is in theorie het equivalent van de volgende query.

SELECT * FROM persoon WHERE Woonplaats <> 'Nijmegen'

LIKE: Zoek op een bepaald deel van de kolominhoud

De LIKE operator wordt gebruikt in de WHERE clausule. Met de LIKE operator is het mogelijk om op bepaalde delen van de kolominhoud te zoeken.

SELECT kolomnaam FROM Tabelnaam WHERE kolomnaam LIKE zoekterm

De LIKE maakt gebruik van wildcards. Er zijn twee mogelijk wildcards die gebruikt kunnen worden: % en _.

De % wildcard staat voor 0, 1 of meerdere karakters. Wordt bijvoorbeeld %n opgegeven als zoekterm voor de LIKE, dan wordt gezocht naar alle waardes die eindigen met de ‘n’. De zoekterm n% zal zoeken naar alle waardes die beginnen met de ‘n’. Bij %n% wordt gezocht op alle waardes die een ‘n’ bevatten.

SELECT kolomnaam FROM Tabelnaam WHERE kolomnaam LIKE 'n%'

De _ wildcard staat voor 1 karakter. Voor elk karakter dat gematched moet worden moet een _ gebruikt worden. Goede voorbeelden van deze wildcard zijn postcodes of geboortedatums. Stel dat iedereen die op een bepaalde dag geselecteerd moet worden dan kan 25-08-____ gebruikt worden. In het geval van de postcode kan elke postcode uit een bepaald gebied op deze manier opgevraagd worden: 1234__.

SELECT kolomnaam FROM Tabelnaam WHERE kolomnaam LIKE '1234__'

LIKE in de praktijk

De volgende dataset is de inhoud van de tabel Persoon.

id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
2, 'Petra', 'de klomp', 'Nijmegen'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'
4, 'Mieke', 'Sterk', 'Amsterdam'

Als we alle personen willen selecteren waarvan de achternaam eindigt met de ‘n’, dan kunnen we de volgende query gebruiken.

SELECT * FROM Persoon WHERE woonplaats LIKE '%n'
Resultaat
1, 'Henk', 'Janssen', 'Amsterdam'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'

We kunnen de LIKE ook gebruiken in combinatie met NOT

SELECT * FROM Persoon WHERE woonplaats NOT LIKE '%en'
Resultaat
2, 'Petra', 'de klomp', 'Nijmegen'
4, 'Mieke', 'Sterk', 'Amsterdam'

De volgende dataset is de inhoud van de tabel Adres.

id, voornaam, achternaam, postcode
1, 'Henk', 'Janssen', '1297DX'
2, 'Petra', 'de klomp', '7201ZP'
3, 'Sjoerd', 'Vermeulen', '7201DT'
4, 'Mieke', 'Sterk', '1337DL'

We willen nu alle mensen die woonachtig zijn in het postcode gebied 7201 opvragen.

SELECT * FROM Persoon WHERE postcode LIKE '7201__'
id, voornaam, achternaam, postcode
2, 'Petra', 'de klomp', '7201ZP'
3, 'Sjoerd', 'Vermeulen', '7201DT'

Geef een bereik tussen twee waardes op met BETWEEN

Met de BETWEEN operator is het mogelijk om een bereik van twee waardes op te geven waarin de kolomwaarde moet vallen. De BETWEEN moet in de WHERE clausule worden gebruikt.

SELECT kolomnaam
FROM Tabelnaam
WHERE kolomnaam BETWEEN waarde1 AND waarde2

BETWEEN in de praktijk

De volgende dataset is de inhoud van de tabel Persoon.

id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
2, 'Petra', 'de klomp', 'Nijmegen'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'
4, 'Mieke', 'Sterk', 'Amsterdam'

Met de volgende query zullen we alle personen met een ID tussen de 2 en de 4 selecteren.

SELECT * FROM Persoon WHERE id BETWEEN 2 AND 4
Resultaat
2, 'Petra', 'de klomp', 'Nijmegen'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'
4, 'Mieke', 'Sterk', 'Amsterdam'

IN operator

Met de IN operator is het mogelijk om een lijst van mogelijke waardes op te geven. De kolomwaarde moet dan aan één van deze waardes voldoen. De IN operator kan alleen in de WHERE gebruikt worden.

SELECT kolomnaam FROM Tabelnaam WHERE kolomnaam IN(waarde1, waarde2)

IN in de praktijk

De volgende dataset is de inhoud van de tabel Persoon.

id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
2, 'Petra', 'de klomp', 'Nijmegen'
3, 'Sjoerd', 'Vermeulen', 'Maastricht'
4, 'Mieke', 'Sterk', 'Amsterdam'

We willen alle personen met de achternaam Janssen of Sterk uit onze tabel ophalen.

SELECT * FROM Persoon WHERE achternaam IN('Janssen', 'Sterk');
id, voornaam, achternaam, woonplaats
1, 'Henk', 'Janssen', 'Amsterdam'
4, 'Mieke', 'Sterk', 'Amsterdam'

IS NULL en IS NOT NULL

Met de IS NULL opereator is het mogelijk om records op te halen waarvan de kolomwaarde een NULL waarde heeft.

SELECT * FROM Tabelnaam WHERE kolomnaam IS NULL

De IS NOT NULL operator doet juist het tegenovergestelde. Hiermee worden alle records opgehaald waarvan de kolomwaarde geen NULL waarde heeft.

SELECT * FROM Tabelnaam WHERE kolomnaam IS NOT NULL

IS NULL en IS NOT NULL in de praktijk

De volgende dataset is de inhoud van de tabel Verjaardag.

id, voornaam, achternaam, datum
1, 'Henk', 'Janssen', NULL
2, 'Petra', 'de klomp', '25-09-1964'
3, 'Sjoerd', 'Vermeulen', '14-12-1986',
4, 'Mieke', 'Sterk', '31-01-2000'

We willen alle mensen tonen waarvan er nog geen verjaardag bekend is. Het veld datum is voor die mensen NULL.

SELECT * FROM Verjaardag WHERE datum IS NULL
Resultaat
1, 'Henk', 'Janssen', NULL

Nu vragen we de mensen op, waarvan de verjaardag wel bekend is.

SELECT * FROM Verjaardag WHERE datum IS NOT NULL
id, voornaam, achternaam, datum
2, 'Petra', 'de klomp', '25-09-1964'
3, 'Sjoerd', 'Vermeulen', '14-12-1986',
4, 'Mieke', 'Sterk', '31-01-2000'