多くのプラグラミング言語は大抵の場合、記述したコードを上から下に読み込んでいく。SQLを書き始めた時、エラーの内容がどうにも分からない理由の一つにこの評価順序を理解していないケースがとても多い。
普通に書いてみる
何はともあれ、よく使う構文を書いてみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
SELECT ColumnName_01 ,ColumnName_02 FROM SchemeName.TableName_01 as aliasName INNER JOIN SchemeName.TableName_02 as aliasName ON aliasName.user_id = aliasName.user_id WHERE 条件式 GROUP BY ColumnName_01 HAVING 条件式 ORDER BY ColumnName_01 ,ColumnName_02 LIMIT 2000 |
まずはじめにSELECTから記載しているのが分かりづらい原因なのだが、記述上はそうでもコンピューターはそうではない。ではどのような順序で読み込んでいるか?
評価順序
実際は以下のように読み込まれている。
1 2 3 4 5 6 7 8 9 10 |
FROM ON JOIN WHERE GROUP BY HAVING SELECT DISTINCT ORDER BY TOP or LIMIT |
つまりテーブルをまず読み込み、必要ならテーブル結合をし、フィルタを掛け、必要ならグルーピングを行い、検索条件を設定し、必要なカラムを呼び出し・・・・といった具合だ。
よくSELECTした結果に対してAS句で別名を定義するケースがよくあると思うが、再定義したカラム名をWHERE句の絞り込み条件で設定しても、エラーが帰ってくるのはこの為である。