この SELECT ステートメントの論理的な処理順序は次のとおりです。
a)FROM tbl_hugo_game
b)WHERE numberofminutes <> NULL
c)
SELECT
DATEDIFF(millisecond ,tbl_hugo_game.time_start,tbl_hugo_game.time_end) AS NumberOfMinutes
d)ORDER BY numberofminutes ASC
したがって、ステップ c) (DATEDIFF ... AS NumberOfMinutes 計算フィールドを持つ SELECT 句) は、ステップ b) (WHERE 句) の後、ステップ d) (ORDER BY 句) の前に処理されます。これが、手順 c) の計算フィールド (DATEDIFF ... AS NumberOfMinutes) を WHERE 句 (手順 b) では使用できないが、ORDER BY 句 (手順 d) では使用できる理由です。
参考文献: SELECT (Transact-SQL) # SELECT文の論理処理順序
次の手順は、SELECT ステートメントの論理的な処理順序 (バインド順序) を示しています。この順序により、あるステップで定義されたオブジェクトが後続のステップの句でいつ使用可能になるかが決まります。たとえば、クエリ プロセッサが FROM 句で定義されたテーブルまたはビューにバインド (アクセス) できる場合、これらのオブジェクトとその列は、後続のすべてのステップで使用できるようになります。逆に、SELECT 句は手順 8 であるため、その句で定義された列の別名または派生列は、前の句で参照できません。ただし、ORDER BY 句などの後続の句で参照できます。ステートメントの実際の物理的な実行はクエリ プロセッサによって決定され、順序はこのリストと異なる場合があることに注意してください。
- から
- オン
- 加入
- どこ
- グループ化
- WITH CUBE または WITH ROLLUP
- 持っている
- 選択する
- 明確
- オーダーバイ
- 上