SQL Zpracování dotazu – V jakém pořadí SQL Server vyhodnocuje klauzule?

Poslední aktualizace:

Pořadí, v jakém se SQL klauzule do dotazu zadávají je všeobecně celkem známé. Pořadí logického SQL zpracování dotazu (logical query processing) je ale jiné než pořadí, v jakém je píšeme do skriptu.

Seznam SQL klauzulí v pořadí, jakém po sobě následují v SQL skriptu:

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

Logicky je SQL dotaz vyhodnocen v jiném pořadí:

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

Všimněte si například klauzule SELECT. Vidíme, že je vyhodnocena předposlední i přes to, že ve skriptu musí být uvedena jako první. To znamená, že všechny klauzule před ní – FROM (1), WHERE (2), GROUP BY (3), HAVING (4) nevidí to, co se stane v klauzuli SELECT (5), to vidí až klauzule ORDER BY (6). Jaký to má dopad si ukážeme v příkladu.

Logické SQL zpracování dotazu příklad:

Podívejme se na skript, který schválně napíšeme špatně:

SELECT [CustomerKey] AS ID_Zakaznik
,[FirstName] AS Jmeno
,[LastName] AS Prijmeni
,[BirthDate] AS Datum_narozeni
FROM [AdventureWorksDW2012].[dbo].[DimCustomer]
WHERE Datum_narozeni>'1940-01-01'

Výsledkem totoho dotazu bude chyba, protože jsme v SELECT (5) definovali alias Datum_narozeni a tento alias poté používáme ve WHERE (2) klauzuli. Ta byla ale už dávno zpracovaná a v době jejího zpracování ještě alias nebyl vytvořen.

SQL zpracování dotazu

SQL zpracování dotazu – chybné pořadí klauzulí

Situace ale bude jiná, pokud alias aplikujeme až v ORDER BY. SELECT je totiž zpracován dříve (5) než ORDER BY (6), proto bude alias znát a dotaz proběhne úspěšně.

SQL zpracování dotazu

Příklad správného pořadí s ORDER BY odkazem na alias v SELECT klauzuli

SQL Zpracování dotazu – V jakém pořadí SQL Server vyhodnocuje klauzule?
5 (100%) 1 vote[s]

Jmenuji se Honza Zedníček a nejčastěji se se mnou v civilu můžete potkat v kancelářích Kentico Software v Brně, kde působím jako BI Developer. Částečně pracuji také jako freelancer. Tuto práci dělám pro různé firmy již přes 5 let, ale Kentico je moje srdcovka ♡. Před tím jsem pracoval jako finanční controller třeba v Aero Vodochody a Sberbank nebo jako manažer dluhopisového programu v investiční skupině Unicapital. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a rád ochutnávám dobré rumy. Svoje znalosti se snažím zapisovat na tento web - abych je nezapomněl (působením rumu ^^) a sloužily i někomu dalšímu. Nebojte se položit dotaz nebo reagovat do komentáře. Přihlašte se do naší nové Excel facebook skupiny Excel CZ/SK diskuse »

Category: MS SQL Server SQL příkazy

About Ing. Jan Zedníček - BI Developer, Finance controller

Jmenuji se Honza Zedníček a nejčastěji se se mnou v civilu můžete potkat v kancelářích Kentico Software v Brně, kde působím jako BI Developer. Částečně pracuji také jako freelancer. Tuto práci dělám pro různé firmy již přes 5 let, ale Kentico je moje srdcovka ♡. Před tím jsem pracoval jako finanční controller třeba v Aero Vodochody a Sberbank nebo jako manažer dluhopisového programu v investiční skupině Unicapital. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a rád ochutnávám dobré rumy. Svoje znalosti se snažím zapisovat na tento web - abych je nezapomněl (působením rumu ^^) a sloužily i někomu dalšímu. Nebojte se položit dotaz nebo reagovat do komentáře. Přihlašte se do naší nové Excel facebook skupiny Excel CZ/SK diskuse »

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.