AND, OR en NOT

Het is 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 criterea 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'