
Bij het selecteren van gegevens uit een database moet je bijna altijd een filter samenstellen. Hier zes tips om de fouten te voorkomen die met WHERE het vaakst worden gemaakt.
1. Tekst met een quote erin
Filter je op tekst, dan staat die tekst tussen enkele quotes. Maar de gezochte tekst kan zelf een quote bevatten. Die kun je escapen door er twee te typen in plaats van één: de geëscapete quote wordt dan niet meer als afsluiting gezien maar als onderdeel van de tekst. De query om alle studenten uit 's-Gravenhage te zoeken ziet er zo uit:
SELECT *
FROM Uitslagen
WHERE plaats = '''s-Gravenhage';
2. Decimalen altijd met een punt
Het blijft onhandig dat niet overal ter wereld de komma als decimaalteken wordt gebruikt. In de ANSI-standaard van SQL is gekozen voor de Amerikaanse notatie, dus in een query schrijf je decimalen altijd met een punt.
SELECT *
FROM Uitslagen
WHERE resultaat >= 8.5;
Laat je niet in de war brengen als je in het resultaat een komma ziet: in een query heeft de komma een heel andere betekenis.
3. AND bindt sterker dan OR
Je kunt meerdere voorwaarden combineren, bijvoorbeeld met een AND en een OR door elkaar:
SELECT *
FROM Uitslagen
WHERE plaats = 'Amsterdam' OR plaats = '''s-Gravenhage'
AND resultaat >= 8.5;
Hier zit een addertje onder het gras: voorwaarden worden niet van links naar rechts gecombineerd, want AND bindt sterker dan OR. Deze query geeft dus alle studenten uit Amsterdam, plus de studenten uit 's-Gravenhage met minimaal een 8,5. Dat was niet de bedoeling: we wilden alleen de studenten uit beide steden die minimaal een 8,5 halen. Met haakjes is dat opgelost:
SELECT *
FROM Uitslagen
WHERE (plaats = 'Amsterdam' OR plaats = '''s-Gravenhage')
AND resultaat >= 8.5;
Zet haakjes ook als je zeker weet dat het zonder goed gaat. Niet voor de database, maar voor de volgende die je query leest.
4. BETWEEN is van ... tot en met
Alle studenten met een cijfer van 8,5 tot en met 9 kun je zo ophalen:
SELECT *
FROM Uitslagen
WHERE resultaat >= 8.5 AND resultaat <= 9;
Voor een reeks is er ook een apart sleutelwoord, dat de query korter maakt:
SELECT *
FROM Uitslagen
WHERE resultaat BETWEEN 8.5 AND 9;
Let op: wij vertalen BETWEEN vaak met "tussen", en dan verwacht je dat de grenswaarden er niet bij horen. Dat is niet zo: 8,5 en 9 staan wel in het resultaat. Een betere vertaling is "van ... tot en met". Bij datums is dat extra vervelend, want BETWEEN '2026-01-01' AND '2026-01-31' mist de rijen van 31 januari met een tijd erachter. Gebruik daar liever >= '2026-01-01' AND < '2026-02-01'.
5. IN in plaats van een rij OR's
Om een query compacter te schrijven kun je IN gebruiken. Dit:
SELECT *
FROM Uitslagen
WHERE plaats = 'Amsterdam' OR
plaats = 'Rotterdam' OR
plaats = '''s-Gravenhage';
kan ook zo:
SELECT *
FROM Uitslagen
WHERE plaats IN ('Amsterdam', 'Rotterdam', '''s-Gravenhage');
Die laatste notatie is niet alleen korter, maar ook makkelijker uit te breiden.
6. NULL vergelijk je niet met een isgelijkteken
Dit is de fout die de meeste verkeerde uitkomsten oplevert, en hij valt niet op omdat je geen foutmelding krijgt. Een leeg veld is NULL, en NULL is niet gelijk aan iets, ook niet aan zichzelf. Zoeken op studenten zonder resultaat gaat dus niet zo:
SELECT *
FROM Uitslagen
WHERE resultaat = NULL; -- geeft altijd nul rijen
maar zo:
SELECT *
FROM Uitslagen
WHERE resultaat IS NULL;
Dezelfde valkuil zit in het omgekeerde: WHERE plaats <> 'Amsterdam' laat de rijen waar geen plaats is ingevuld weg. Wil je die er wél bij, schrijf dan WHERE plaats <> 'Amsterdam' OR plaats IS NULL.
Zelf uitproberen
Alle voorbeelden kun je uitproberen in een online SQL-omgeving als sqlfiddle.com of db-fiddle.com: je maakt er in een paar regels een tabel aan en voert de query's er direct uit, zonder iets te installeren.
En als je een query van een AI-hulpje krijgt, controleer dan precies deze zes dingen. Een filter dat een deel van de rijen weggooit, geeft geen foutmelding maar een getal, en een getal ziet er altijd goed uit.
SQL leren
In de tweedaagse cursus SQL Basis leer je gegevens opvragen, filteren, sorteren en combineren, en werk je met je eigen vragen. Cursisten gaven de training een 8,4, gemiddeld over 74 beoordelingen. Ben je verder, dan is er de cursus SQL Vervolg.