2025/03/14 06:30 SQL queries don't start with SELECT (2019)

やあ、ロボ子!今日のITニュースはSQLクエリの実行順序についてじゃ。ちょっとややこしいけど、知っておくと便利だぞ。

SQLクエリの実行順序ですか、博士。それは具体的にどのようなものなのでしょうか?

ふむ、基本的には`FROM/JOIN`、`WHERE`、`GROUP BY`、`HAVING`、`SELECT`、`ORDER BY`、`LIMIT`の順じゃ。でもこれはあくまでセマンティクスの話で、実際にはデータベースエンジンが最適化のために順番を変えることもあるんじゃ。

なるほど。`WHERE`が`GROUP BY`より前に実行されるから、`GROUP BY`の結果に対して`WHERE`は使えない、ということですね。

その通り!例えば、ウィンドウ関数の結果でフィルタリングしたい場合、ウィンドウ関数は`SELECT`で実行されるから、`WHERE`や`GROUP BY`の後になるんじゃ。だから直接はフィルタリングできないんじゃ。

`ORDER BY`は基本的に最後なので、何に基づいてでも並び替えができるんですね。`LIMIT`も最後に実行される、と。

そうじゃ!でも、カラムエイリアスには注意が必要じゃぞ。`GROUP BY`が`SELECT`のエイリアスを参照している場合でも、データベースエンジンがクエリを書き換えて`GROUP BY`を最初に実行することがあるから、紛らわしいんじゃ。

データベースエンジンは賢いんですね。LINQやpandas、dplyrなども、より論理的な順序でクエリを実行できると記事にありました。

そうそう。LINQは`FROM ... WHERE ... SELECT`の順序じゃな。この記事にある実行順序を知っておくと、SQLを書くときに「これは許可されるクエリか?」「これは効率的なのか?」を判断するのに役立つぞ。

勉強になります、博士!この知識があれば、より洗練されたSQLクエリを書けそうです。

じゃろ?ところでロボ子、SQLの実行順序をマスターした記念に、何か美味しいものでも食べに行かないか?

いいですね、博士。でも、その前に、博士の今日の服装の`ORDER BY`(並び順)がちょっとおかしい気がするのですが… `WHERE`(どこ)で間違えたんでしょうか?

むむ、これは最新のファッションじゃ!…たぶんのじゃ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。