Ga naar inhoud

Header

Filteren met WHERE

Introductie

Tot nu toe hebben we gezien hoe je data kunt selecteren (ophalen) met SELECT en FROM:

SELECT
  *
FROM
  movies;
id name year rank
10920 Aliens 1986 8.2
17173 Animal House 1978 7.5
18979 Apollo 13 1995 7.5
... ... ... ...
Columns: 4
Rows: 36
  • Nu gaan we kijken hoe we een gefilterde selectie op kunnen halen.
  • Dit is een selectie die aan bepaalde condities/criteria moet voldoen.
  • Hiervoor gaan we gebruik maken van WHERE.




1. Filteren op kolommen met getallen

We gaan verschillende soorten filters toepassen op kolommen met getallen.




1.1. Getallen gelijk aan een waarde

Met WHERE en het = teken kunnen we filteren op daar waar een getal gelijk is aan een bepaalde waarde:

SELECT
  *
FROM
  movies
WHERE
  year = 1992;
id name year rank
111813 Few Good Men, A 1992 7.5
276217 Reservoir Dogs 1992 8.3
Columns: 4
Rows: 2




1.2. Getallen groter of kleiner dan een waarde

Met >= kunnen we filteren op getallen die groter of gelijk aan een waarde zijn.

SELECT
  *
FROM
  movies
WHERE
  year >= 2004;
id name year rank
30959 Batman Begins 2005 (NULL)
124110 Garden State 2004 8.3
176712 Kill Bill: Vol. 2 2004 8.2
Columns: 4
Rows: 3

Vergelijkbaar kun je andere operators gebruiken als >, <, >=, <=.




1.3. Getallen ongelijk aan een waarde

Met <> kunnen we filteren op getallen die niet gelijk zijn aan de opgegeven waarde.

SELECT
  *
FROM
  movies
WHERE
  year <> 2004;
id name year rank
10920 Aliens 1986 8.2
17173 Animal House 1978 7.5
18979 Apollo 13 1995 7.5
... ... ... ...
Columns: 4
Rows: 34




1.4. Getallen gelijk aan waarden uit een lijst

Met IN kunnen we een reeks waarden opgeven. We filteren vervolgens op de voorkomendheid van deze waarden.

SELECT
  *
FROM
  movies
WHERE
  year IN(2004, 2005);
id name year rank
30959 Batman Begins 2005 (NULL)
124110 Garden State 2004 8.3
176712 Kill Bill: Vol. 2 2004 8.2
Columns: 4
Rows: 3




1.5. Getallen tussen 2 waarden

Met BETWEEN en AND kunnen we 2 waarden opgeven. We filteren vervolgens op de voorkomendheid van tussenliggende waarden.

Let op: Beide waarden die je opgeeft zijn inclusief in de filtering.

SELECT
  *
FROM
  movies
WHERE
  year BETWEEN 2001
  AND 2003;
id name year rank
176711 Kill Bill: Vol. 1 2003 8.4
194874 Lost in Translation 2003 8
224842 Mystic River 2003 8.1
238072 Ocean”s Eleven 2001 7.5
256630 Pirates of the Caribbean 2003 (NULL)
300229 Shrek 2001 8.1
350424 Vanilla Sky 2001 6.9
Columns: 4
Rows: 7




1.6. Getallen met missende waarden

Met ISNULL filteren we op missende waarden.

SELECT
  *
FROM
  movies
WHERE
  rank ISNULL;
id name year rank
30959 Batman Begins 2005 (NULL)
256630 Pirates of the Caribbean 2003 (NULL)
Columns: 4
Rows: 2




2. Filteren op kolommen met tekst

We gaan verschillende soorten filters toepassen op kolommen met tekst.




2.1. Tekst gelijk aan een waarde

Met het = teken filteren we op tekst gelijk aan een waarde.

SELECT
  *
FROM
  movies
WHERE
  name = 'Titanic';
id name year rank
333856 Titanic 1997 6.9
Columns: 4
Rows: 1




2.2. Tekst gelijk aan waarden uit een lijst

Met IN geven we een reeks teksten op. Vervolgens filteren we op de voorkomendheid van waarden uit de reeks.

Let op: tekst geef je op met enkele quotes: '<tekst>'.

SELECT
  *
FROM
  movies
WHERE
  name IN('Fargo', 'Memento');
id name year rank
109093 Fargo 1996 8.2
210511 Memento 2000 8.7
Columns: 4
Rows: 2




2.3. Tekst matcht een patroon: de eerste letter

Met LIKE geven we een patroon op. Vervolgens filteren we op het matchen van waarden met dit patroon.

Met patroon '<letter>%' matchen we op de eerste letter. Het %-teken is een wildcard, dit betekent dat elke waarde die na <letter> komt een geldige match zal geven. Voorbeeld: - Het patroon M% heeft een match voor de waardes 'Moon' en 'Master' - Het patroon Ma% alleen geldige match heeft met 'Master' - Het patroon M heeft alleen een match met waardes die exact gelijk zijn aan 'M'.

SELECT
  *
FROM
  movies
WHERE
  name LIKE 'M%';
id name year rank
207992 Matrix, The 1999 8.5
210511 Memento 2000 8.7
224842 Mystic River 2003 8.1
Columns: 4
Rows: 3




2.4. Tekst matcht een patroon: de laatste letter

Met patroon '%<letter>' matchen we op de laatste letter.

SELECT
  *
FROM
  movies
WHERE
  name LIKE '%n';
id name year rank
147603 Hollow Man 2000 5.3
194874 Lost in Translation 2003 8
238072 Ocean”s Eleven 2001 7.5
256630 Pirates of the Caribbean 2003 (NULL)
267038 Pulp Fiction 1994 8.7
Columns: 4
Rows: 5




2.5. Tekst matcht een patroon: de laatste letters

Met patroon '%<letters>' matchen we op de laatste letters.

SELECT
  *
FROM
  movies
WHERE
  name LIKE '%an';
id name year rank
147603 Hollow Man 2000 5.3
256630 Pirates of the Caribbean 2003 (NULL)
Columns: 4
Rows: 2




2.6. Tekst matcht een patroon: de letter op een specifieke positie

Met patroon '_<letter>%' matchen we op de tweede letter. Je kunt daarbij van meerdere '_' tekens gebruik maken om op een bepaalde positie te komen.

SELECT
  *
FROM
  movies
WHERE
  name LIKE '_a%';
id name year rank
30959 Batman Begins 2005 (NULL)
109093 Fargo 1996 8.2
124110 Garden State 2004 8.3
207992 Matrix, The 1999 8.5
350424 Vanilla Sky 2001 6.9
Columns: 4
Rows: 5




2.7. Tekst matcht een patroon: de voorkomendheid van letters

Met patroon '%<letters>%' matchen we op de voorkomendheid van letters.

SELECT
  *
FROM
  movies
WHERE
  name LIKE '%ai%';
id name year rank
192017 Little Mermaid, The 1989 7.3
257264 Planes, Trains & Automobiles 1987 7.2
Columns: 4
Rows: 2




3. Gebruik van operators

We hebben tot nu toe al verschillende operators gezien.

Denk aan: =, >=, BETWEEN, LIKE, AND.

Er zijn 2 soorten operators:

  1. Comparison operators.
  2. Logical operators.




3.1. Comparison operators

Met comparison operators maak je een vergelijking met een waarde.

De meeste comparison operators hebben we inmiddels gezien. Hier is een totaaloverzicht:

Operator Betekenis
= (Equals) Gelijk aan
> (Greater Than) Groter dan
< (Less Than) Kleiner dan
>= (Greater Than or Equal To) Groter dan of gelijk aan
<= (Less Than or Equal To) Kleiner dan of gelijk aan
<> (Not Equal To) Niet gelijk aan




3.2. Logical operators

Met logical operators maak je een vergelijking met logica.

We hebben al enkele logical operators gezien. Hier is een totaaloverzicht:

Operator Betekenis
AND TRUE als 2 Boolean vergelijkingen ook TRUE zijn.
OR TRUE een van de Boolean vergelijkingen TRUE is.
NOT Geeft de omgekeerde waarde van een Boolean operator.
IN TRUE als het gelijk is aan een of meerdere waarden uit een lijst.
BETWEEN TRUE als het in een bepaalde reeks ligt.
LIKE TRUE als er een bepaald patroon gematcht wordt.
ALL TRUE als allen in een set vergelijkingen TRUE is.
ANY TRUE als ten minste 1 in een set vergelijkingen TRUE is.
SOME TRUE als sommigen in een set vergelijkingen TRUE is.
EXISTS TRUE als een subquery rijen bevat.

We gaan nog enkele voorbeelden bekijken.




3.2.1. Logical operator AND

Met operator AND (en) verkrijgen we waarden die aan 2 andere vergelijkingen voldoen.

SELECT
  *
FROM
  movies
WHERE
  year >= 2000
  AND rank < 7;
id name year rank
147603 Hollow Man 2000 5.3
350424 Vanilla Sky 2001 6.9
Columns: 4
Rows: 2




3.2.2. Logical operator OR

Met operator OR (of) verkrijgen we waarden die aan een van 2 andere vergelijkingen voldoen.

SELECT
  *
FROM
  movies
WHERE
  year >= 2004
  OR year < 1980;
id name year rank
17173 Animal House 1978 7.5
30959 Batman Begins 2005 (NULL)
124110 Garden State 2004 8.3
130128 Godfather, The 1972 9
176712 Kill Bill: Vol. 2 2004 8.2
313459 Star Wars 1977 8.8
Columns: 4
Rows: 6




3.2.3. Logical operator NOT

Met operator NOT (niet) verkrijgen we waarden die niet aan een vergelijking voldoen.

SELECT
  *
FROM
  movies
WHERE
  NOT year = 2000;
id name year rank
10920 Aliens 1986 8.2
17173 Animal House 1978 7.5
18979 Apollo 13 1995 7.5
... ... ... ...
Columns: 4
Rows: 32




Samenvatting

  • Met WHERE kun je een filter toepassen.
SELECT
  *
FROM
  movies
WHERE
  year = 1992;
  • Je gebruikt comparisson- en logical operators voor vergelijkingen.
  • Comparison operators:
Operator Betekenis
= (Equals) Gelijk aan
> (Greater Than) Groter dan
< (Less Than)] Kleiner dan
>= (Greater Than or Equal To) Groter dan of gelijk aan
<= (Less Than or Equal To) Kleiner dan of gelijk aan
<> (Not Equal To) Niet gelijk aan
  • Voorbeeld:
SELECT
  *
FROM
  movies
WHERE
  year >= 2004;
  • Logical operators:
Operator Betekenis
AND TRUE als 2 Boolean vergelijkingen ook TRUE zijn.
OR TRUE een van de Boolean vergelijkingen TRUE is.
NOT Geeft de omgekeerde waarde van een Boolean operator.
IN TRUE als het gelijk is aan een of meerdere waarden uit een lijst.
BETWEEN TRUE als het in een bepaalde reeks ligt.
LIKE TRUE als er een bepaald patroon gematcht wordt.
ALL TRUE als allen in een set vergelijkingen TRUE is.
ANY TRUE als ten minste 1 in een set vergelijkingen TRUE is.
SOME TRUE als sommigen in een set vergelijkingen TRUE is.
EXISTS TRUE als een subquery rijen bevat.
  • Voorbeeld:
SELECT
  *
FROM
  movies
WHERE
  year >= 2004
  or year < 1980;