Stappen uitvoer SQL-query

Geschreven door: op dinsdag 1 augustus 2017

Leestijd:

Om mij voor te breiden op het examenQuerying 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

Op De Hoogte Blijven?

Online Succes realiseren is een vak, een vak wat wij verstaan en waarover we je graag vertellen. Schrijf je in voor onze maandelijkse nieuwsbrief en blijf op de hoogte van trends, thema’s en succesverhalen.

Aanhef

Andere blogartikelen

Bel 072 5345 888
Meer dan 40 bedrijven vertrouwen op ons
Allrig is de alles in een leverancier binnen de energie-industrie
Aliancys is een toonaangevend wereldwijd bedrijf actief in de verkoop van kwaliteitsharsen
ERIKS is een toonaangevende en innovatieve leverancier aan de procesindustrie en aan machinebouwers, die zowel de rol van specialist als die van brede MRO-leverancier vervult
Industrieel dienstverlener Heinen & Hopman Engineering uit Bunschoten is dé wereldwijde specialist op het gebied van klimaatbeheersing
Handicare is een internationale organisatie die ouderen helpt om hun dagelijks leven gemakkelijker te maken door het produceren van hoogwaardige trapliften
Onze Middelen en Technologieën
microsoft silver partner
Adobe partner
fd gazellen 2017
Google analytics
Google adwords
TelefoonE-mail