Stappen uitvoer SQL-query

Geschreven door: op dinsdag 1 augustus 2017

Leestijd:

Om mij voor te breiden op het examen Querying Data with Transact-SQL van Microsoft, heb ik het Exam Ref 70-761 aangeschaft waarin de basis van SQL staat uitgelegd. Om precies te zijn, gaat het examen niet over SQL op zich, maar de Microsoft-variant daarvan: T-SQL.

Wat is de basis van SQL? Of eerder: waar begin je mee? Dat zal het ophalen van informatie zijn. En daarmee begint het examenboek ook: het ophalen van informatie en welke stappen, als het ware, daarbij betrokken zijn. Wat in het examenboek beschreven staat, staat ook uitgebreider online (zie links onderaan deze pagina), maar ik vind het interessant om te delen.

SELECT ‘Hello, World!’

De Hello, World!-versie van SQL zou iets zijn als:

SELECT name FROM Products

Hiermee haal je de naam op van alle producten. Een SELECT-opdracht kan uitgebreid worden met filters, groepering, aliases en sortering:


SELECT

              p.Category as CategoryName                  -- Gebruik CategoryName als alias

              ,SUM(p.SoldItems) as [Sold Items]          -- Spaties in alias

FROM Products p

              WHERE p.Country = ‘nl’                             -- Alleen Nederlandse producten

GROUP BY

p.Category                                                   -- Groepeer per category (we willen totaal aantal verkochte producten per categorie)

HAVING

              SUM(p.SoldItems) > 50                              -- Maar alleen als het aantal verkochte producten meer is dan 50 per categorie

ORDER BY

              CategoryName ASC                                    -- De resultaten sorteren we alfabetisch op categorienaam


             

Logical query processing

Bovenstaande query toont een resultaat die zou lijken op:

CategoryName

Sold Items

Appels

100

Peren

200

Tomaten

123

 

Een aantal dingen zijn interessant:

Je kan kolomnamen aliassen geven. Hier zijn een aantal redenen voor:

  1. Je ze onderscheiden van elkaar als je door een JOIN gelijknamige kolomnamen hebt.
  2. Samengestelde resultaten (zoals van SUM) krijgen een naam.
  3. Je kan een kolom een “gebruiksvriendelijkere” naam geven.

Deze aliassen worden echter maar op twee plekken gebruikt: bij SELECT en bij ORDER BY. Ze worden niet gebruikt bij FROM, WHERE, GROUP BY of HAVING. Dat lijkt onlogisch: bovenaan worden de kolommen gedefinieerd die we willen zien, ze krijgen een naam en ze worden daarna ook gebruikt met die naam, bij ORDER BY. Dus waarom niet bij de andere opdrachten?

Intern verwerkt de SQL-server de Query als volgt:

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

Conceptueel worden de volgende stappen genomen:

Eerst worden de nodige brondata verzameld:

  1. FROM (waar haal ik de data vandaan?)
  2. WHERE (welke data wil ik wel en welke niet gebruiken?)

Daarna, als dat nodig is, wordt het gegroepeerd:

  1. GROUP BY (op basis waarvan groeperen we?)
  2. HAVING (en laat dan alleen de groepen zien waarop de volgende eisen van toepassing zijn)

Op dit moment is alle data verzameld en gegroepeerd. De data bestaat nog niet uit specifieke kolommen, het zijn een aantal relaties met rijen daarin (eventueel gegroepeerd) die teruggegeven worden. Met SELECT wordt aangegeven welke kolommen uit die brondata worden getoond. In het bovenstaande voorbeeld dus alleen Products.Category én de som van Products.SoldItems per categorie. In de SELECT-opdracht kan een alias worden toegewezen aan een kolom.

Als laatste wordt ORDER BY uitgevoerd. Nu zijn de aliassen bekend en kunnen ze gebruikt worden om te sorteren. Het is duidelijk op basis van de interne stappen waarom aliassen alleen gebruikt kunnen worden door ORDER BY en niet door de andere opdrachten.

Meer informatie

Hieronder staan verwijzingen naar artikels waarin bovenstaande meer en beter wordt uitgelegd. Deze artikels zijn geschreven door dezelfde auteur als die van Exam Ref van 70-761.

  1. http://sqlmag.com/sql-server/logical-query-processing-what-it-and-what-it-means-you
  2. http://sqlmag.com/sql-server/logical-query-processing-clause-and-joins
  3. http://sqlmag.com/sql-server/logical-query-processing-clause-and-apply
  4. http://sqlmag.com/sql-server/logical-query-processing-clause-and-pivot
  5. http://sqlmag.com/sql-server/logical-query-processing-part-5-clause-and-unpivot
  6. http://sqlmag.com/sql-server-2016/logical-query-processing-part-6-where-clause
  7. http://sqlmag.com/sql-server/logical-query-processing-part-7-group-and-having
  8. http://sqlmag.com/sql-server/logical-query-processing-part-8-select-and-order

Andere blogartikelen

  • SQL: Geclusterde en niet-geclusterde index

    Geschreven door: op zondag 30 juni 2019

    Het kan soms voorkomen dat het veel tijd kost voordat een bepaalde query resultaten teruggeeft. Dit kan liggen aan een scala aan problemen, zoals het gebruik van veel joins. Wat de query kan helpen ve ...

    Bekijk het artikel »
  • Hoe werkt OAuth 2.0

    Geschreven door: op zondag 30 juni 2019

    In de huidige samenleving is iedereen bijna altijd online, zo ook de applicaties waarvan de mensen gebruik maken. Als je jouw applicatie niet goed afschermt, kan dit allemaal veiligheidsrisico’s met z ...

    Bekijk het artikel »
  • OAuth 2.0: JWT token en claims

    Geschreven door: op zondag 30 juni 2019

    In mijn vorige blog heb ik uitgelegd hoe OAuth 2.0 ervoor kan zorgen dat derde partijen op een veilige manier gebruik kunnen maken van jouw applicatie met behulp van tokens. In deze blog gaan we wat m ...

    Bekijk het artikel »
Bel 072 5345 888
Onze Middelen en Technologieën
microsoft silver partner
Adobe partner
fd-gazellen-2018.jpg
Google analytics
partners-logo.jpg
Op de hoogte blijven?

Meld u aan voor de gratis nieuwsbrief om op de hoogte te blijven van onze activiteiten