Логика SQL довольно простая и научиться этому языку несложно. Но все же есть несколько моментов, осложняющих понимание того, как выполняется запрос. В данной мини-статье, разговор о порядке выполнения запроса.

По интернету гуляет такая картинка:

Но почему-то за очевидностью происходящего, скрывается смысл, который лучше написать текстом.

Так, полный порядок выполнения запросов будет выглядеть следующим образом:

  • FROM (выбор таблицы)
  • JOIN (комбинация с подходящими по условию данными из других таблиц)
  • WHERE (фильтрация строк)
  • GROUP BY (агрегирование данных)
  • HAVING (фильтрация агрегированных данных)
  • SELECT (возврат результирующего датасета)
  • ORDER BY (сортировка).

И это дает нам понимание, что с выбора таблицы (или ее формирования), запросом FROM мы подаем на вход некий массив данных. Этот массив может быть передан как подзапросом, так и отдельной таблицей, сделанной с помощью WITH. В любом случае, самый первый запрос, подает на вход нам массив, который мы будем потом обрабатывать.