Tutorials
Query - Verwerking door de database
In deze tutorial leer ik je hoe een database je query behandeld.
Pagina 1
Inleiding
In deze tutorial zal ik jullie in het kort leren hoe de database jouw query zal behandelen.
Het is niet nodig om iets dergelijks precies te weten, want daar is de database voor, maar het is altijd leuk om meer te weten.
Bij het maken van deze tutorial heb ik gebruikt gemaakt van een stencilpakket welke samengesteld is door dhr. Klaverweide, docent aan het ROC Zadkine te Rotterdam.
Het is niet nodig om iets dergelijks precies te weten, want daar is de database voor, maar het is altijd leuk om meer te weten.
Bij het maken van deze tutorial heb ik gebruikt gemaakt van een stencilpakket welke samengesteld is door dhr. Klaverweide, docent aan het ROC Zadkine te Rotterdam.
Pagina 2
De query
Allereerst vertel ik er even bij dat de tabel je vanzelf duidelijk wordt als ik mijn eerste voorbeeld geef.
De query die ik in deze tutorial gebruik is de volgende:
SELECT spelersnr
FROM boetes
WHERE bedrag > 25
GROUP BY spelersnr
HAVING COUNT(bedrag) > 1
ORDER BY spelersnr
Met deze SELECT-instructie krijgen we het antwoord op de vraag: Geef het spelersnummer van elke speler waarvoor meer dan één boete van meer dan EUR 25,- is ontvangen; sorteer het resultaat op spelersnummer (het kleinste eerst).
Het zal je waarschijnlijk verbazen, maar de database begint niet met SELECT. Op de volgende pagina's zie je wat er stap voor stap gebeurt.
De query die ik in deze tutorial gebruik is de volgende:
SELECT spelersnr
FROM boetes
WHERE bedrag > 25
GROUP BY spelersnr
HAVING COUNT(bedrag) > 1
ORDER BY spelersnr
Met deze SELECT-instructie krijgen we het antwoord op de vraag: Geef het spelersnummer van elke speler waarvoor meer dan één boete van meer dan EUR 25,- is ontvangen; sorteer het resultaat op spelersnummer (het kleinste eerst).
Het zal je waarschijnlijk verbazen, maar de database begint niet met SELECT. Op de volgende pagina's zie je wat er stap voor stap gebeurt.
Pagina 3
FROM-component
In de FROM-component wordt alleen de boetes-tabel genoemd. Dit betekent voor SQL dat er gewerkt gaat worden met de boetes-tabel. Het tussenresultaat van deze component is een exacte kopie van de boetes-tabel:


Pagina 4
WHERE-component
In de WHERE-component is de conditie 'bedrag > 25' gespecificeerd. Alle rijen waarin de waarde in de bedrag-kolom groter is dan 25 voldoen aan de conditie. Al die rijen tesamen vormen het tussenresultaat van de WHERE-component.

Dus de rijen met betalingsnr 5 en 6 vallen af.

Dus de rijen met betalingsnr 5 en 6 vallen af.
Pagina 5
GROUP BY-component
De GROUP BY-component groepeert de rijen in het tussenresultaat. Het groeperen geschiedt op basis van waarden in de spelersnr-kolom (GROUP BY spelersnr).
Rijen worden gegroepeerd als ze in de betreffende kolom dezelfde waarde hebben.
De rijen met betalingsnr 2 en 7 bijvoorbeeld, vormen een groep, omdat de spelersnr-kolom in beide rijen de waarde 44 bevat.
Tussenresultaat:

Toelichting: Op de spelersnr-kolom na kunnen alle kolommen meer dan één waarde in één rij bevatten. Kolom betalingsnr bijvoorbeeld, bevat in de tweede en de derde rij twee waarden. Dit is echter niet vreemd, want er is gegroepeerd en elke rij vormt eigenlijk een groep van rijen. Alleen in de spelersnr-kolom staat per rij slechts één waarde, omdat deze kolom gegroepeerd is.
Rijen worden gegroepeerd als ze in de betreffende kolom dezelfde waarde hebben.
De rijen met betalingsnr 2 en 7 bijvoorbeeld, vormen een groep, omdat de spelersnr-kolom in beide rijen de waarde 44 bevat.
Tussenresultaat:

Toelichting: Op de spelersnr-kolom na kunnen alle kolommen meer dan één waarde in één rij bevatten. Kolom betalingsnr bijvoorbeeld, bevat in de tweede en de derde rij twee waarden. Dit is echter niet vreemd, want er is gegroepeerd en elke rij vormt eigenlijk een groep van rijen. Alleen in de spelersnr-kolom staat per rij slechts één waarde, omdat deze kolom gegroepeerd is.
Pagina 6
HAVING-component
Deze component is eigenlijk te vergelijken met de WHERE-component. Het verschil is dat de WHERE betrekking heeft op het resultaat van de FROM-component en HAVING op het gegroepeerde tussenresultaat van de GROUP BY-component. Het effect is wel hetzelfde, ook in de HAVING-component worden rijen met behulp van een conditie geselecteerd. In dit geval is dat de conditie:
COUNT(bedrag) > 1
Deze conditie betekend: alle rijen (groepen) waar meer dan één boete in staat voldoen.
Tussenresultaat:

COUNT(bedrag) > 1
Deze conditie betekend: alle rijen (groepen) waar meer dan één boete in staat voldoen.
Tussenresultaat:

Pagina 7
SELECT-component
In de SELECT-component wordt gespecificeerd welke kolommen in het uiteindelijke resultaat weergegeven moeten worden. Met andere woorden, de SELECT-component selecteert kolommen.
Tussenresultaat:

Tussenresultaat:

Pagina 8
ORDER BY-component
De laatste component die in de voorbeeld query behandeld wordt is de ORDER BY-component. Deze component wijzigt niets aan de inhoud van het tussenresultaat maar sorteert de uiteindelijke rijen. In dit voorbeeld wordt het resultaat gesorteerd op spelersnr.
Eindresultaat:

Deze tabel vormt het eindresultaat dat de gebruiker te zien krijgt.
Eindresultaat:

Deze tabel vormt het eindresultaat dat de gebruiker te zien krijgt.
Reacties
0