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:
FROM
JOIN
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
We gaan hier stap voor stap naar kijken.
1. FROM
Allereerst wordt het FROM
statement uitgevoerd.
Met
FROM
benoem 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: 36
2. JOIN
Vervolgens wordt (eventueel) het JOIN
statement uitgevoerd.
Met
JOIN
kun 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
WHERE
pas 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: 17
4. GROUP BY
Daarna volgt GROUP BY
in de execution order.
Met
GROUP BY
groepeer (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: 12
5. HAVING
Vervolgens wordt (eventueel) het HAVING
statement uitgevoerd.
Met
GROUP BY
groepeer (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: 4
Let op:
- In het
SELECT
statement hernoemen we de nieuwe kolom naarmovies_count
.- Deze naam is dus nog niet beschikbaar tijdens het
HAVING
statement.
6. SELECT
Vervolgens wordt het SELECT
statement uitgevoerd. Dit is het op één na laatste statement in de volgorde die SQL hanteert.
Met
SELECT
selecteer 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 BY
sorteer 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_count
Let op: de nieuwe naam
movies_count
is hier nu wel te gebruiken.
Doordat kolomnaammovies_count
hiervoor al vanuitSELECT
is 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.
Peter is een ervaren data scientist en python trainer. Na zijn studie aan de Technische Universiteit Delft heeft hij zich altijd bezig gehouden met data en diverse programmeertalen. Peter heeft veel data analyses uitgevoerd en processen geautomatiseerd met Python in productieomgevingen.