parallax background image

Stappen uitvoer SQL-query

Gepubliceerd op 1 augustus 2017 Leestijd : 4 minuten

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.

 

Onze klanten
Onze oplossingen