1. AND en OR statements
AND en OR zijn een soort van achterhangsel op het WHERE statement, deze moet je dus kennen.
Met AND kun je een tweede conditie stellen en een voorwaarde daaraan. Met OR word geduid op
de Nederlandse vertaling van het woord, of. Dus als je een voorwaarde stelt maar het kan ook
een andere zijn, gebruik je OR. In plaats van OR kun je ook || gebruiken, en bij AND kun je
&& gebruiken. Deze worden alleen niet vaak gebruikt, en je kunt het voor de duidelijkheid
ook maar beter bij AND en OR laten.
2. Vergelijkenis met if/else statement
AND en OR kun je ook tegenkomen in een if/else statement, het heeft in principe ook dezelfde
werking, hieronder een voorbeeldje hoe het met een if/else constructie zou kunnen.
<?
if($_POST['naam'] == 'Tuinstoel' AND $_POST['wachtwoord'] == 'geheim')
{ echo 'Je bent Tuinstoel.'; }
else
{ echo 'Je bent Tuinstoel niet.'; }
?>
Maar dan nu wat echte voorbeelden hoe het in MySQL gaat.
3. Voorbeelden AND statement
Stel we hebben een tabel, zoals hieronder staat afgedrukt in de databank.
id
voornaam
achternaam
leeftijd
1
René
Willemsen
14
2
Joël
Verheyen
17
3
Dennis
Braak, van
15
4
Maarten
Ureel
15
En met deze tabel gaan we nu even wat query's uitvoeren om te filteren op enkele dingen.
SELECT * FROM `tabel` WHERE `voornaam` = 'René' AND `leeftijd` >= 14
Deze code haalt de rijen uit de databank waar de voornaam gelijk is aan René en waar de leeftijd hoger of gelijk is aan 14.
In dit geval zal hij de rij met id nummer 1 geven als resultaat.
SELECT * FROM `tabel` WHERE `voornaam` = 'René` AND `achternaam` = 'Verheyen'
Met deze query is opzich niets mis mee, maar het is nu zo dat de voornaam René en de achternaam Verheyen wel in de
databank voorkomt, maar dat er niet in dezelfde rij, en daarom zal hij geen enkele rij retourneren.
SELECT * FROM `tabel` WHERE `voornaam` = 'Maarten' AND `achternaam` = 'Ureel' AND `leeftijd` > 13
En je snapt het nu denk ik al, deze was alleen om aan te duiden dat AND vaker mag worden gebruikt in een query. Deze query
zal overigens resulteren in de rij met id nummer 4.
4. Voorbeelden OR statement
Zoals al uitgelegd in de intro betekent OR niet meer dan OF in het nederlands, dus dit OF dat.
Nu maar gelijk dan wat voorbeelden om een idee te creeëren hoe het in elkaar steekt.
SELECT * FROM `tabel` WHERE `voornaam` = 'René` OR `achternaam` = 'Ureel'
Dat zal resulteren in 2 rijen, namelijk die met id nummer 1 en 4, want in die rijen bevindt zich de voornaam René of
de achternaam Ureel.
SELECT * FROM `tabel` WHERE `voornaam` = 'René' OR `leeftijd` = 17 OR `id` = 3
Bij de bovenstaande query zullen er 3 mogelijkheden worden gegeven:
de naam moet gelijk zijn aan René
of de leeftijd moet gelijk zijn aan 17
of het id moet gelijk zijn aan 3
Dit zal resulteren in 3 opgevraagde rijen waaraan deze criteria voldoen.
5. AND en OR combineren
AND en OR kun je ook nog eens combineren, dat kan soms handig zijn.
SELECT * FROM `tabel` WHERE `voornaam` = 'René' AND `achternaam` = 'Willemsen' OR `leeftijd` = 17
Hier vraagt hij dus de rijen op waar de voornaam gelijk is aan René en de achternaam gelijk is aan Willemsen of
waar de leeftijd gelijk is aan 17. Dit zal dus resulteren in de 2 rijen met id 1 en 2.
Maar als je AND en OR combineert, dan kan daar nog eens een verschil in zitten. Met dank aan
FangorN voor het verschil
te melden.
In MySQL kun je met haakjes werken, netzoals je met wiskunde doet, omdat eerst daar het resultaat
uit te halen, en dan pas de sommen die daar na komen. Zie de volgende voorbeelden
SELECT * FROM `tabel` WHERE (`voornaam` = 'René' AND `achternaam` = 'Willemsen') OR `leeftijd` = 17
Dit levert de rijen met id nummer 1 en 2 op, omdat bij de een de voornaam en de achternaam gelijk zijn aan René en
Willemsen of de leeftijd moet gelijk zijn aan 17, in dit geval rij 2. Dus in het resultaat levert hij rij 1 en 2 op.
SELECT * FROM `tabel` WHERE `voornaam` = 'René' AND (`achternaam` = 'Willemsen' OR `leeftijd` = 17)
Dit zal enkel de rij met id 1 terug geven, omdat de voornaam gelijk is aan René en de achternaam is gelijk aan
Willemsen of de leeftijd is gelijk aan 17, dus 2 keuze's in principe.