Порядок выполнения SQL Server - PullRequest
       1

Порядок выполнения SQL Server

0 голосов
/ 24 августа 2018

Как я знаю, порядок выполнения в SQL

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

Так что я запутался с коррелированным запросом, подобным приведенному ниже коду.

Предложение FROM WHERE во внешнем запросе выполняется первым или SELECT во внутреннем запросе выполняется первым? Кто-нибудь может дать мне идею и объяснение? Спасибо

SELECT 
    *, COUNT(1) OVER(PARTITION BY A) pt  
FROM
    (SELECT 
         tt.*,
         (SELECT COUNT(id) FROM t WHERE data <= 10 AND ID < tt.ID) AS A
     FROM  
         t tt
     WHERE  
         data > 10) t1

1 Ответ

0 голосов
/ 24 августа 2018

Как я знаю, порядок выполнения в SQL: FROM-> WHERE-> GROUP BY-> HAVING -> SELECT -> ORDER BY

False.Ложь.Ложь.Предположительно, вы имеете в виду эту часть документации :

Следующие шаги показывают порядок логической обработки или порядок привязки для SELECTзаявление.Этот порядок определяет, когда объекты, определенные на одном шаге, становятся доступными для предложений на последующих шагах.

Как объясняется в документации, это относится к правилам определения объема, когда запрос проанализирован .Это не имеет ничего общего с порядком выполнение .SQL Server - как и почти для любой базы данных - оставляет за собой возможность реорганизовать запрос так, как ему нравится для обработки.

На самом деле план выполнения - это действительно ациклический ориентированный граф (DAG), компоненты которого обычно делаютне иметь отношения 1-1 с предложениями в запросе.SQL Server может выполнить ваш запрос любым способом, который он сочтет лучшим, при условии, что он создает набор результатов, который вы описали.

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