Фаза обработки логических запросов INSERT, DELETE и UPDATE в SQL-запросах

Мне интересно узнать о фазе обработки логических запросов SQL-запросов.

Для запросов SELECT порядок обработки логического запроса:

  • С
  • ON
  • ВНЕШНИЙ
  • WHERE
  • GROUP BY
  • CUBE | ROLLUP
  • HAVING
  • SELECT
  • DISTINCT
  • ЗАКАЗАТЬ
  • TOP

Каков порядок для INSERT, для UPDATE и для DELETE?

Ответ 1

Если вы хотите узнать, каков фактический порядок обработки запросов, посмотрите план выполнения. Это покажет вам шаг за шагом, что делает SQL Server.

https://technet.microsoft.com/en-us/library/ms178071(v=sql.105).aspx

Ответ 2

SQL Server: Источник

  • С
  • ON
  • JOIN
  • WHERE
  • GROUP BY
  • С CUBE или WITH ROLLUP
  • HAVING
  • SELECT
  • DISTINCT
  • ЗАКАЗАТЬ
  • TOP

Ответ 3

У меня был тот же вопрос и я не мог найти ответ в Интернете. Поэтому я попытался логически получить ответ. Вот простой оператор UPDATE (с псевдонимом a для таблицы):

UPDATE tbl_employees a
  SET a.Name = 'Anna'
  WHERE a.Id = 122;

Очевидно, что SET или WHERE могут быть выполнены до того, как таблица будет идентифицирована, поэтому UPDATE должен быть первым логическим шагом. Доказательство. Псевдоним a работает (в Microsoft Access).

Прежде чем применять инструкцию SET, нужно знать, какие записи применять. Итак, WHERE должен идти как второй логический шаг (исключение WHERE изменит все записи в таблице)

Применение инструкции SET в списке записей, отфильтрованных WHERE, должно быть третьим шагом.

Подводя итог, порядок логической обработки должен быть:

  • UPDATE (~ эквивалент FROM)
  • WHERE
  • SET (~ эквивалентно SELECT)

Любой другой порядок кажется абсурдным (вы можете гипотетически думать о каком-либо другом порядке?).

Еще раз, это мой собственный логический вывод. Я не знаю точно. Я бы присвоил любую ссылку на серьезный интернет-ресурс.