Ga naar inhoud

Header

Uitvoervolgorde statements

Introductie

Bij het groeperen hebben we het volgende gezien:

  • Na groeperen met GROUP BY gebruik je HAVING om te sorteren, niet WHERE.
  • De nieuwe naam van een hernoemde kolom met AS is niet bruikbaar vanuit het HAVING statement.

Dit komt door de uitvoervolgorde van SQL statements.

  • Zo wordt WHERE altijd voor GROUP BY uitgevoerd.
    • Hierdoor Kun je WHERE dus niet na GROUP BY gebruiken.
    • Maar moet je HAVING gebruiken, wat wel na GROUP BY wordt uitgevoerd.

Dit lijkt misschien nu nog verwarrend.




De uitvoervolgorde is als volgt:

  1. FROM
  2. JOIN
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. SELECT
  7. ORDER BY

We gaan hier stap voor stap naar kijken.




1. FROM

Header

Allereerst wordt het FROM statement uitgevoerd.

Met FROM benoem je de tabel, de bron, waaruit data verkregen moet worden.

Voorbeeld:

  1. FROM: We halen data op uit tabel movies.
  2. SELECT: We selecteren alle kolommen.
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

Header

Vervolgens wordt (eventueel) het JOIN statement uitgevoerd.

Met JOIN kun je data uit verschillende tabellen samenvoegen.

Hier staan we in een latere module uitgebreid bij stil.




3. WHERE

Header

Vervolgens wordt (eventueel) het WHERE statement uitgevoerd.

Met WHERE pas je een of meerdere filters toe op je brondata.

Voorbeeld:

  1. FROM: We halen data op uit tabel movies.
  2. WHERE: We filteren op films met een cijfer (rank) onder de 8.
  3. 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

Header

Vervolgens wordt (eventueel) het GROUP BY statement uitgevoerd.

Met GROUP BY groepeer (aggregeer) je op een of meerdere kolommen.

Voorbeeld:

  1. FROM: We halen data op uit tabel movies.
  2. WHERE: We filteren op films met een cijfer (rank) onder de 8.
  3. GROUP BY: We groeperen op kolom year.
  4. SELECT: We selecteren:
    • Kolom year.
    • Het aantal rijen na groeperen met COUNT(*) met als naam movies_count.
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

Header

Vervolgens wordt (eventueel) het HAVING statement uitgevoerd.

Met GROUP BY groepeer (aggregeer) je op een of meerdere kolommen.

Voorbeeld:

  1. FROM: We halen data op uit tabel movies.
  2. WHERE: We filteren op films met een cijfer (rank) onder de 8.
  3. GROUP BY: We groeperen op kolom year.
  4. HAVING: We selecteren alleen:
    • Resultaten waarbij in een jaar meerdere films (> 1) zijn gemaakt.
  5. SELECT: We selecteren:
    • Kolom year.
    • Het aantal rijen na groeperen met COUNT(*) met als naam movies_count.
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 naar movies_count.

  • Deze naam is dus nog niet beschikbaar tijdens het HAVING statement.




6. SELECT

Header

Vervolgens wordt het SELECT statement uitgevoerd.

Met SELECT selecteer je de kolommen dit je wilt verkrijgen.

Dit hebben we in de voorbeelden tot nu toe gezien.




7. ORDER BY

Header

Vervolgens wordt (eventueel) het ORDER BY statement uitgevoerd.

Met ORDER BY sorteer je op een of meerdere kolommen.

Voorbeeld:

  1. FROM: We halen data op uit tabel movies.
  2. WHERE: We filteren op films met een cijfer (rank) onder de 8.
  3. GROUP BY: We groeperen op kolom year.
  4. HAVING: We selecteren alleen:
    • Resultaten waarbij in een jaar meerdere films (> 1) zijn gemaakt.
  5. SELECT: We selecteren:
    • Kolom year.
    • Het aantal rijen na groeperen met COUNT(*) met als naam movies_count.
  6. ORDER BY: We sorteren:
    • Aflopend op movies_count
      • Let op: de nieuwe naam movies_count is hier nu wel te gebruiken.

      • Doordat kolomnaam movies_count hiervoor al vanuit SELECT is aangemaakt.

    • Oplopend op year.
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

Header

  • 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.