★ Aan de slag 28

De ING wil een overzicht van alle transacties van het type GM (geldautomaat) of OV (overschrijving) vanaf 1 maart 2016. Daarvoor is de onderstaande query opgesteld:


SELECT transactie_id, type, rekening_bij, rekening_af, datum
FROM transactie
WHERE datum >= '2016-03-01'
AND type ='GM' OR type = 'OV'


Het resultaat van deze query is een lijst van alle transacties van het type GM vanaf 1 maart 2016 en alle transacties die van het type OV zijn (en dus ook die van voor 1 maart 2016). Dat was niet de bedoeling!


Je kunt deze query vergelijken met de volgende som: 3 + 2 x 5. De uitkomst van deze som is 13. Je vermenigvuldigt namelijk eerst 2 met 5 en daarna tel je er pas 3 bij op. Kortom: vermenigvuldigen gaat vóór optellen. Als het de bedoeling is om eerst 3  en 2 op te tellen en daarna pas te vermenigvuldigen, dan moet je haakjes gebruiken: (3 + 2) x 5.

Hetzelfde is het geval wanneer je in een voorwaarde AND en OR gebruikt: eerst wordt AND uitgevoerd en daarna pas OR.

In het bovenstaande voorbeeld wordt dus eerst gezocht naar de rijen waarvoor geldt dat het transacties zijn vanaf 1 maart 2016 en van het type = 'GM'. Daarna wordt er gezocht naar alle transacties met type = 'OV'. Om het gewenste resultaat te krijgen, moeten er haakjes gebruikt worden in de query.

SELECT transactie_id, type, rekening_bij, rekening_af, datum
FROM transactie
WHERE datum >= '2016-03-01'
AND (type ='GM' OR type = 'OV')


Het resultaat zijn alle transacties van het  type = 'GM' of het type = 'OV' na 1 maart 2016.