Bij het selecteren van gegevens uit een database moet je vaak een filter samenstellen. Hier 5 tips om veel voorkomende fouten te voorkomen bij het filteren met WHERE
.
Alle voorbeelden kun je ook hier zelf uit proberen op sqlfiddle.com met de Uitslagen database.
Tip 1
Als je filtert op tekst moet deze tussen enkele quotes worden geplaatst. Maar het kan natuurlijk voorkomen dat de gezochte tekst zelf een quote bevat. Deze kun je 'escapen' door twee in plaats van één quotes te typen. De quote die wordt geëscaped wordt dan niet langer als afsluiting gezien, maar als onderdeel van de tekst. De query om alle studenten uit 's-Gravenhage te zoeken ziet er als volgt uit:
SELECT *
FROM Uitslagen
WHERE plaats = '''s-Gravenhage';
Tip 2
Het blijft onhandig dat niet overal ter wereld de komma als decimaal teken wordt gebruikt. Dit levert voor ons Nederlanders nog al eens verwarring op. In de ANSI standaard van SQL is gekozen voor de Amerikaanse getalnotatie. In queries moeten decimalen dus ALTIJD genoteerd worden met een punt.
SELECT *
FROM Uitslagen
WHERE resultaat >= 8.5
Laat je niet verwarren als je in het resultaat een komma ziet, de komma heeft in een query een heel andere betekenis.
Tip 3
Het is mogelijk om meerdere filtervoorwaarden te combineren, bijvoorbeeld door zowel een AND
als een OR
te gebruiken:
SELECT *
FROM Uitslagen
WHERE plaats = 'Amsterdam' OR plaats = '''s-Gravenhage'
AND resultaat >= 8.5
Er zit hier een addertje onder het gras: voorwaarden worden niet van links naar rechts gecombineerd. De AND
operator bindt sterker dan de OR
. Onze voorbeeld query resulteert in:
- Alle studenten uit Amsterdam;
- Alle studenten uit 's-Gravenhage met resultaat van minimaal 8,5.
Dat was echter niet wat we voor ogen hadden, we wilden alleen de studenten uit 's-Gravenhage en Amsterdam zien die minimaal een 8,5 scoren. We zien nu ook studenten uit Amsterdam die minder dan een 8,5 scoren. Gelukkig is dit eenvoudig op te lossen door gebruik te maken van haakjes:
SELECT *
FROM Uitslagen
WHERE (plaats = 'Amsterdam' OR plaats = '''s-Gravenhage')
AND resultaat >= 8.5
Tip 4
Het tonen van alle studenten met een cijfer in de range 8,5 t/m 9 kan met de volgende query:
SELECT *
FROM Uitslagen
WHERE resultaat >= 8.5 AND resultaat <=9
Voor het selecteren van een range is echter ook een apart keyword beschikbaar. Het keyword BETWEEN
maakt de query iets korter. Deze kan op volgende manier worden gebruikt:
SELECT *
FROM Uitslagen
WHERE resultaat BETWEEN 8.5 AND 9
Maar let op, het keyword BETWEEN
kan het nogal eens verwarring opleveren; bij ons Nederlanders wordt BETWEEN
vaak vertaald met 'tussen'. Echter ook de cijfers met grenswaarden, in ons voorbeeld 8,5 en 9, worden getoond in het resultaat. Een betere vertaling van BETWEEN
is 'van ... tot en met'.
Tip 5
Om queries compacter te schrijven kun je soms gebruik maken van het IN
keyword. Bijvoorbeeld om alle studenten uit Amsterdam, Rotterdam en 's-Gravenhage te tonen:
SELECT *
FROM Uitslagen
WHERE plaats = 'Amsterdam' OR
plaats = 'Rotterdam' OR
plaats = '''s-Gravenhage'
Dat kan ook zo:
SELECT *
FROM Uitslagen
WHERE plaats IN ('Amsterdam', 'Rotterdam', '''s-Gravenhage')
De laatste notatie is niet alleen veel korter, maar ook veel makkelijker uit te breiden.
Training SQL Basis
Ben jij geïnteresseerd in het leren van deze programmeertaal? Ontdek met een SQL-training data die eerder verborgen voor je is gebleven. In onze tweedaagse training SQL Basis leer je alle belangrijke ins en outs van SQL!