
Uitvoervolgorde statements
Introductie
Bij het groeperen hebben we het volgende gezien:
- Na groeperen met
GROUP BYgebruik jeHAVINGom te sorteren, nietWHERE.- De nieuwe naam van een hernoemde kolom met
ASis niet bruikbaar vanuit hetHAVINGstatement.
Dit komt door de uitvoervolgorde van SQL statements.
- Zo wordt
WHEREaltijd voorGROUP BYuitgevoerd.- Hierdoor Kun je
WHEREdus niet naGROUP BYgebruiken. - Maar moet je
HAVINGgebruiken, wat wel naGROUP BYwordt uitgevoerd.
- Hierdoor Kun je
Dit lijkt misschien nu nog verwarrend.
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.
| id | name | year | rank |
|---|---|---|---|
| 10920 | Aliens | 1986 | 8.2 |
| 17173 | Animal House | 1978 | 7.5 |
| 18979 | Apollo 13 | 1995 | 7.5 |
| ... | ... | ... | ... |
2. JOIN

Vervolgens wordt (eventueel) het JOIN statement uitgevoerd.
Met
JOINkun je data uit verschillende tabellen samenvoegen.
Hier staan we in een latere module uitgebreid bij stil.
3. WHERE

Vervolgens wordt (eventueel) het WHERE statement uitgevoerd.
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.
| id | name | year | rank |
|---|---|---|---|
| 17173 | Animal House | 1978 | 7.5 |
| 18979 | Apollo 13 | 1995 | 7.5 |
| 111813 | Few Good Men, A | 1992 | 7.5 |
| ... | ... | ... | ... |
4. GROUP BY

Vervolgens wordt (eventueel) het GROUP BY 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.SELECT: We selecteren:- Kolom
year. - Het aantal rijen na groeperen met
COUNT(*)met als naammovies_count.
- Kolom
| year | movies_count |
|---|---|
| 1989 | 2 |
| 1991 | 1 |
| 1984 | 1 |
| ... | ... |
5. 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
| year | movies_count |
|---|---|
| 1989 | 2 |
| 2000 | 3 |
| 2001 | 2 |
| 1999 | 2 |
Let 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.
Met
SELECTselecteer je de kolommen dit je wilt verkrijgen.
Dit hebben we in de voorbeelden tot nu toe gezien.
7. ORDER BY

Vervolgens 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_count-
Let op: de nieuwe naam
movies_countis hier nu wel te gebruiken. -
Doordat kolomnaam
movies_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

-
SQL statements worden in een specifieke volgorde uitgevoerd.
-
FROM- Ophalen van dat uit een tabel, de brondata.
JOIN- Optioneel: samenvoegen van data uit meerdere tabellen
WHERE- 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.