Kolejność wykonywania zapytania

Kolejność zapytań w T-SQL niejednokrotnie utożsamiana jest z kolejnością, z jaką wypisywane są kolejne elementy instrukcji SELECT. Faktycznie zapytania jednak wykonywane są w innej kolejności.

Zapytania w kolejności wprowadzania

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

Zapytania w kolejności wykonywania

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

Bardzo łatwo to można zweryfikować. Stwórzmy prostą tabelę tymczasową, wypełnijmy ją losowymi danymi i sprawdźmy zawartość.

Załóżmy, że chcielibyśmy obliczyć wartość sprzedaży jako iloczyn ceny sprzedaży i ilości sprzedaży:

Wszystko do tej pory wydaje się naturalne i proste, ale zakładając, że chcemy ograniczyć wyniki do takich, w których wartość sprzedaży jest większa od 10, korzystając z kolumny nazwanej jako wartosc_sprzedazy dostaniemy następujący błąd: Invalid column name ‚wartosc_sprzedazy’.

Wynika to właśnie z kolejności wykonywania zapytania. SELECT wykonywany jest później od klauzuli WHERE. Rozwiązaniem w tej sytuacji jest po prostu określenie bezpośrednio iloczynu:

Z kolei, gdybyśmy chcieli posortować wyniki zapytania malejąco po wartości sprzedaży:

Nie mamy problemu ze względu na fakt, że ORDER wykonywany jest później niż SELECT.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *