MENU

SQL Serverの各句の実行順

SQL苦手だなぁ、と思い、勉強し始めたところ、「SELECT句でAlias書いたのに、WHERE句で使えない。どの順番で実行されているんだっけ?」となったため、調べてみました。(SQL Server)

SELECT句の論理処理の順番

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. WITH CUBE or WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP
Microsoft公式, Logical processing order of the SELECT statement

SELECT句は8番目のため、8番目以降の句でSELECT句で指定されたAliasが使用できます。
但し、query processorが実際の処理順を決めており、その処理順は上記の論理処理の順番と異なる可能性がある、とのことでした。

SELECT
	CONCAT_WS(' ', FirstName, LastName) AS Name
FROM Person.Person
ORDER BY Name;

では、論理処理順がSELECT句の前でAliasを使いたい場合はどうするかというと

SELECT
	CONCAT_WS(' ', FirstName, LastName) AS Name
FROM Person.Person
WHERE
	LEN(CONCAT_WS(' ', FirstName, LastName)) >= 10
ORDER BY Name;

使いたい句内で同様の計算をしてあげる方法や

SELECT
	*
FROM (
	SELECT CONCAT_WS(' ', FirstName, LastName) AS Name
	FROM Person.Person
	) AS t
WHERE
	LEN(Name) >= 10
ORDER BY Name;

Subqueryで目的に沿ったデータセットを作り、参照する方法があります。

以上、基本のキではありますが、句の実行順とちょっとしたテクニックの紹介でした。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次