Использование Top в T-SQL - PullRequest
       21

Использование Top в T-SQL

1 голос
/ 15 апреля 2019

Вопрос по использованию Top.Например, у нас есть следующий оператор SQL:

SELECT TOP (5) WITH TIES orderid, orderdate, custid, empid
FROM Sales.Orders
ORDER BY orderdate DESC;

Он упорядочивает возвращаемые строки сначала по дате заказа, а затем выбирает самые верхние пять строк.Но разве это предложение ORDER не происходит после предложения SELECT, что означает, что первые пять случайных порядков будут возвращаться первыми, а затем эти пять строк упорядочены по orderdate?

Ответы [ 3 ]

3 голосов
/ 15 апреля 2019

Порядок команд в операторе не отражает фактический порядок операций, которым следует SQL. См. эту статью , в которой указан порядок:

  1. от
  2. где
  3. группировка по
  4. имеющий
  5. выберите
  6. заказ по
  7. предел

Как видите, операция TOP (лимит) выполняется последним.

1 голос
/ 15 апреля 2019

Вопрос уже принят ответ. Но я хотел бы процитировать контент из документации Microsoft.

Порядок логической обработки оператора SELECT

  1. FROM
  2. ON
  3. JOIN
  4. ГДЕ
  5. GROUP BY
  6. С КУБОМ или С РОЛЛП
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ЗАКАЗАТЬ ПО
  11. TOP
1 голос
/ 15 апреля 2019

Но разве это предложение ORDER не происходит после предложения SELECT, что означает, что первые пять случайных порядков будут возвращаться первыми, а затем эти пять строк упорядочены по дате заказа?

Нет.ORDER BY обрабатывается после SELECT, но ограничение результирующего набора до 5 строк происходит даже позже.

Физические детали фактической обработки запроса могут отличаться, но конечный результат будет таким, как если бы сервер сортировалвся таблица на orderdate, затем выбрал первые 5 (или больше, если необходимо из-за связей) строк, вернул эти строки и отбросил остальные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...