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

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:

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.

Reacties

0
Nog geen reacties.