
In welke volgorde voeren SQL statements uit?
Als je vaker met SQL werkt is het je vast wel eens opgevallen dat je niet in iedere situatie alle SQL statements kunt gebruiken. Dit heeft te maken met de uitvoervolgorde van de statements.
Zo kun je bijvoorbeeld na GROUP BY geen WHERE gebruiken maar moet je HAVING toepassen. Een ander voorbeeld is dat een kolom die je met AS hebt hernoemd niet beschikbaar is na het HAVING statement.
Dit komt allemaal door de volgorde waarin SQL een query uitvoert. Als je SQL leert kan dit verwarrend zijn, maar in dit blog scheppen we overzicht voor je.
De uitvoervolgorde is als volgt:
FROMJOINWHEREGROUP BYHAVINGSELECTORDER BY
We gaan hier stap voor stap naar kijken.
1. FROM

Allereerst wordt het FROM statement uitgevoerd.
Met
FROMbenoem je de tabel, de bron, waaruit data verkregen moet worden.
Voorbeeld:
FROM: We halen data op uit tabelmovies.SELECT: We selecteren alle kolommen.
We werken in deze tutorial met de IMDb database die we in deze blog toelichten en waar je tevens de dataset kunt downloaden om mee te doen. Als je mee wilt doen met deze tutorial dan dien je tevens SQL en PgAdmin te installeren als je nog geen werkende SQL set-up hebt.
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: 362. JOIN

Vervolgens wordt (eventueel) het JOIN statement uitgevoerd.
Met
JOINkun je data uit verschillende tabellen samenvoegen.
**Ook interessant: uitleg & tutorial SQL LEFT JOIN
3. WHERE

De volgende in de uitvoervolgorde is het WHERE statement.
Met
WHEREpas je een of meerdere filters toe op je brondata.
Voorbeeld:
FROM: We halen data op uit tabelmovies.WHERE: We filteren op films met een cijfer (rank) onder de8.SELECT: We selecteren alle kolommen.
SELECT
*
FROM
movies
WHERE
rank < 8;| id | name | year | rank |
|---|---|---|---|
| 17173 | Animal House | 1978 | 7.5 |
| 18979 | Apollo 13 | 1995 | 7.5 |
| 111813 | Few Good Men, A | 1992 | 7.5 |
| ... | ... | ... | ... |
Columns: 4
Rows: 174. GROUP BY

Daarna volgt GROUP BY in de execution order.
Met
GROUP BYgroepeer (aggregeer) je op een of meerdere kolommen.
Voorbeeld:
FROM: We halen data op uit tabelmovies.WHERE: We filteren op films met een cijfer (rank) onder de8.GROUP BY: We groeperen op kolomyear.SELECT: We selecteren:- Kolom
year. - Het aantal rijen na groeperen met
COUNT(*)met als naammovies_count.
- Kolom
SELECT
year,
COUNT(*) AS movies_count
FROM
movies
WHERE
rank < 8
GROUP BY
year;| year | movies_count |
|---|---|
| 1989 | 2 |
| 1991 | 1 |
| 1984 | 1 |
| ... | ... |
Columns: 2
Rows: 125. HAVING

Vervolgens wordt (eventueel) het HAVING statement uitgevoerd.
Met
GROUP BYgroepeer (aggregeer) je op een of meerdere kolommen.
Voorbeeld:
FROM: We halen data op uit tabelmovies.WHERE: We filteren op films met een cijfer (rank) onder de8.GROUP BY: We groeperen op kolomyear.HAVING: We selecteren alleen:- Resultaten waarbij in een jaar meerdere films (
> 1) zijn gemaakt.
- Resultaten waarbij in een jaar meerdere films (
SELECT: We selecteren:- Kolom
year. - Het aantal rijen na groeperen met
COUNT(*)met als naammovies_count.
- Kolom
SELECT
year,
COUNT(*) AS movies_count
FROM
movies
WHERE
rank < 8
GROUP BY
year
HAVING
COUNT(*) > 1;| year | movies_count |
|---|---|
| 1989 | 2 |
| 2000 | 3 |
| 2001 | 2 |
| 1999 | 2 |
Columns: 2
Rows: 4Let op:
- In het
SELECTstatement hernoemen we de nieuwe kolom naarmovies_count.- Deze naam is dus nog niet beschikbaar tijdens het
HAVINGstatement.
6. SELECT

Vervolgens wordt het SELECT statement uitgevoerd. Dit is het op één na laatste statement in de volgorde die SQL hanteert.
Met
SELECTselecteer je de kolommen dit je wilt verkrijgen.
Dit hebben we in de voorbeelden tot nu toe gezien.
7. ORDER BY

Tenslotte wordt (eventueel) het ORDER BY statement uitgevoerd.
Met
ORDER BYsorteer je op een of meerdere kolommen.
Voorbeeld:
FROM: We halen data op uit tabelmovies.WHERE: We filteren op films met een cijfer (rank) onder de8.GROUP BY: We groeperen op kolomyear.HAVING: We selecteren alleen:- Resultaten waarbij in een jaar meerdere films (
> 1) zijn gemaakt.
- Resultaten waarbij in een jaar meerdere films (
SELECT: We selecteren:- Kolom
year. - Het aantal rijen na groeperen met
COUNT(*)met als naammovies_count.
- Kolom
ORDER BY: We sorteren:- Aflopend op
movies_countLet op: de nieuwe naam
movies_countis hier nu wel te gebruiken.
Doordat kolomnaammovies_counthiervoor al vanuitSELECTis aangemaakt. - Oplopend op
year.
- Aflopend op
SELECT
year,
COUNT(*) AS movies_count
FROM
movies
WHERE
rank < 8
GROUP BY
year
HAVING
COUNT(*) > 1
ORDER BY
movies_count DESC,
year ASC;Samenvatting volgorde van uitvoering SQL statements (execution order in het Engels)

- SQL statements worden in een specifieke volgorde uitgevoerd.
FROM: ophalen van dat uit een tabel, de brondata.JOIN: optioneel: samenvoegen van data uit meerdere tabellenWHERE: optioneel: filter op de brondata.GROUP BY: optioneel: groeperen op een of meerdere kolommen.HAVING: optioneel: filter na groeperen.SELECT: selectie van kolommen.ORDER BY: optioneel: sorteren op kolommen.
Bezig om SQL onder de knie te krijgen?
Wellicht ben je bezig om SQL beter te leren. Wij schreven de volgende handige artikelen om je op weg te helpen:
- Waarom SQL leren een goed idee is
- Voorbeelden van wat je met SQL kunt
- Hoe leer ik SQL in 4 stappen
- PostgreSQL & PgAdmin installeren om op jouw computer met SQL te kunnen werken
Wil je nog veel meer leren over SQL? Bekijk dan onze SQL cursus voor data analyse of download onderstaande opleidingsbrochure. In onze SQL cursus wisselen theorie en praktijkoefening elkaar steeds af. Nadat je deze training hebt gevolgd kun je zelfstandig met SQL werken. Je kunt ook altijd even contact opnemen via info@datasciencepartners.nl of 020 - 24 43 146 als je een vraag hebt.











