In de wereld van databases is de kracht van precisie onmisbaar. Het efficiënt filteren van data is daarom een kunst op zich, een kunst waarbij de WHERE-clausule in SQL een hoofdrol speelt. Deze eenvoudige, maar krachtige clausule stelt ons in staat om specifieke gegevens uit enorme datasets te halen, vergelijkbaar met het vinden van een naald in een hooiberg.
Het WHERE statement
Door middel van de WHERE-clausule is het mogelijk om in SQL de resultset te laten voldoen aan bepaalde condities. De WHERE
clausule bestaat uit één of meerdere condities. Deze condities kun je zien als zogenaamde filters.
De WHERE
-clausule kan worden toegepast op SELECT
queries, maar je kunt deze ook gebruiken 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.
advertentie
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 voor de WHERE-clausule worden door SQL ondersteund.
Operator | |
---|---|
= | 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 in SQL mogelijk om meerdere criteria toe te voegen aan de WHERE-clausule. Dit kan gedaan worden met de AND
, OR
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'