SQL (язык структурированных запросов) — это язык, используемый в программировании, который специализируется на обработке данных в системе управления реляционными базами данных. Основная функция SQL — выполнение запросов к базе данных. В частности, SQL определяется как предметно-ориентированный язык. Язык, специфичный для предметной области, определяется как компьютерный язык, специализированный для конкретной прикладной области. Будучи специализированным языком (в отличие от языка общего назначения), SQL обычно рассматривается как инструмент с упрощенным синтаксисом и ограниченным количеством ключевых слов и функций, но это не означает, что пользователи не могут оптимизировать использование языка. Понимание порядка выполнения SQL-запросов является ключом к оптимизации запросов и становлению опытным пользователем инструмента. Порядок выполнения может отличаться в некоторых необычных случаях, но, согласно Microsoft, стандартный порядок выполнения запроса следующий:

  1. ОТ
  2. ON
  3. ПРИСОЕДИНИТЬСЯ
  4. ГДЕ
  5. ГРУППА ПО
  6. НАЛИЧИЕ
  7. ВЫБИРАТЬ
  8. ОТЧЕТЛИВЫЙ
  9. СОРТИРОВАТЬ ПО
  10. ВЕРШИНА

Понимание порядка выполнения SQL-запросов является ключом к оптимизации и совершенствованию навыков выполнения запросов. Давайте разберем порядок выполнения SQL-запросов и поймем, как они работают вместе и по отдельности.

ОТ

  • Имена таблиц, указанные в предложении FROM, определяют, откуда будут поступать данные. Это будут полные данные, извлекаемые запросом до какой-либо фильтрации или агрегирования.
SELECT *
FROM ExampleTable1;  /* Specifying the data source */

ON

  • Столбцы и условия, указанные в предложении ON, определяют поля, по которым будут объединяться таблицы, и то, как таблицы будут сопоставляться (какой набор общих записей будет искаться в каждой таблице).

ПРИСОЕДИНЯЙТЕСЬ

  • В предложении JOIN пользователь указывает вторую таблицу, которая будет присоединена к таблице, указанной в предложении FROM. Таблицы, предоставляемые оператору SQL, могут быть объединены несколькими способами, такими как внутреннее, левое, правое, полное и самостоятельные соединения. Здесь пользователь также может создать псевдоним для таблицы, чтобы сократить код и улучшить читаемость. Ниже приведен пример использования предложения JOIN и ON:
SELECT *
FROM TableA a
JOIN TableB b                /* Selecting the secondary table to join */
ON a.column = b.column;       /* Specifying what column to join the tables on */

ГДЕ

  • Предложение WHERE является третьим предложением, которое должно оцениваться в порядке выполнения запросов. После указания таблиц, из которых будут собираться данные, следующим шагом будет фильтрация возвращаемых данных. Эти фильтры могут удалять записи, которые соответствуют или содержат подстроки, поля со значениями NULL и поля, содержащие числовые значения, превышающие заданное пользователем значение. Одним из предостережений с предложением WHERE является невозможность ссылаться на псевдонимы, используемые в предложении SELECT. Это важно помнить, поскольку предложение SELECT выполняется после предложения WHERE, поэтому предложение WHERE не будет понимать эти поля, которые, согласно запросу, не существуют.
/* This code will error out because the WHERE clause is 
referencing an allias created in the SELECT clause */

SELECT column1 as New_column_Name
FROM Table1
WHERE New_Column_Name is not null;

ГРУППИРОВАТЬ ПО

  • После фильтрации данных для сохранения или удаления нужных записей можно дополнительно сгруппировать данные по схожим значениям данных. Предложение GROUP BY позволяет пользователям объединять данные в сегменты. Каждое ведро представляет собой уникальное значение (как правило, символьное/строковое значение или уникальный ключ) в данном столбце, связанном с агрегированным значением. Агрегатные функции в SQL включают, помимо прочего, SUM, AVG, MIN, MAX и COUNT.

ИМЕЕТ

  • Предложение HAVING работает аналогично предложению WHERE. Отличие состоит в том, что для фильтрации агрегированных данных необходимо определить эти фильтры в предложении HAVING. После того, как данные агрегированы, исходные строки больше не доступны для манипулирования. Условия и фильтры применяются к созданным блокам данных. Например, использование предложения HAVING может выглядеть следующим образом:
SELECT 
  Item as Item_Name, 
  COUNT(Item) as Count_of_Items
FROM Table1
GROUP BY Item
HAVING COUNT(Item) >= 20;

ВЫБРАТЬ

  • После того как данные отфильтрованы и объединены, учитываются значения в предложении SELECT. Предложение SELECT выбирает строки из таблицы, которые нужно извлечь и показать пользователю. Эти столбцы, выбранные из исходной таблицы, можно переименовать с помощью псевдонимов с помощью ключевого слова AS. Предложение SELECT — это место для упомянутой выше функции агрегирования, которое используется предложением GROUP BY. Ключевые слова агрегации предложения SELECT — это просто ссылки на лежащую в основе агрегацию, выполненную с использованием предложения GROUP BY.

РАЗЛИЧНЫЕ

  • Ключевое слово DISTINCT находится в предложении SELECT. Использование ключевого слова DISTINCT похоже на использование предложения GROUP BY, в котором оно берет отдельные значения из столбца и использует их как сегменты. Однако предполагаемая функциональность ключевого слова DISTINCT не должна использоваться с агрегатными функциями после группировки данных, поскольку основная цель функций GROUP BY состоит в том, чтобы сделать это.
/* The 2 code snippets below produce the same ouput 
and are funtionally the same. However, the intended 
functionality of the DISTINCT keyword and the GROUP BY
clause should be followed */ 

SELECT DISTINCT Column1
FROM TableA;

----------

SELECT Column1
FROM TableA
GROUP BY Column1;

ЗАКАЗАТЬ ПО

  • Предложение ORDER BY выполняется предпоследним. Ключевые слова по возрастанию и по убыванию задаются в предложении ORDER BY для упорядочения данных либо по возрастанию, либо по убыванию. Когда весь набор результатов остальной части запроса готов к отображению, данные можно отсортировать по определенным условиям, даже если данные отсутствуют в выбранных данных.
SELECT 
    Column1, 
    Column2, 
    Column3
FROM TableA
ORDER BY 
    Column2 ASC,
    Column1 DESC,
    Column3 ASC

ТОП

  • Предложение TOP используется для указания количества записей, возвращаемых из окончательного набора результатов, созданного запросом. Это предложение похоже на предложение LIMIT в других диалектах SQL.

Заключение

Визуальный порядок предложений в операторе SQL не отражает того, как запрос выполняется интерпретатором SQL. Таким образом, важно понимать, как SQL-клиент интерпретирует оператор SQL за кулисами. Понимание порядка выполнения SQL-запросов необходимо для устранения неполадок и предотвращения нежелательных выходных данных и ошибок, а также для написания более эффективных запросов.

Источники