SQLの特徴として、プログラム(クエリ)の書き順と実際の実行順が微妙に異なるというものがあります。
ここでは、SQLの書き順と実行順について順に解説し、その違いを示します。
SQLはデータベースから構造化データ(行と列からなる表形式のデータ)を取り出す際によく使われるため、書き順と実行順の違いを認識しておくことで、大規模なデータを扱う際に適切な操作ができるようになります。
SQLの書き順
SQLでは、抽出するカラムを選択するSELECT句や条件抽出を行うWHERE句などの句の表記順が決まっており、ルール通りに書く必要があります。
順序は以下の通りです。
1.SELECT句(取得カラム)
2.FROM句(取得元テーブル)
3.JOIN句(結合するテーブル)
4.ON句(JOINする場合の結合条件)
5.WHERE句(取得レコードの絞り込み条件)
6.GROUP BY句(集約カラム)
7.HAVING句(GROUP BYした単位で集計)
8.ORDER BY句(データの並べ替え)
9.LIMIT句(表示行数)
この順で書いたSQlクエリの例は次の通りです。
SELECT COL_A1, COL_A2, COL_A3
FROM TABLE_A
LEFT OUTER JOIN TABLE_B ON TABLE_A.COL_A1 = TABLE_B.COL_B1
WHERE TABLE_A.COL_A1 = 'A1' AND TABLE_B.COL_B2 > 30
GROUP BY TABLE_A.COL_A2
HAVING COUNT (*) > 3
ORDER BY TABLE_A.COL_A3
LIMIT 500
SQLの実行順
SQLの実行順もおおむね書き順と同じですが、一部の句で順序が変わります。
特に、SELECT句は実行タイミングが大きく変わります。
以下は、実行順に並べ替えたものです(番号は書き順のもの)。
2.FROM句(取得元テーブル)
4.ON句(JOINする場合の結合条件)
3.JOIN句(結合するテーブル)
5.WHERE句(取得レコードの絞り込み条件)
6.GROUP BY句(集約カラム)
7.HAVING句(GROUP BYした単位で集計)
1.SELECT句(取得カラム)
8.ORDER BY句(データの並べ替え)
9.LIMIT句(表示行数)
書き順では1番目のSELECT句が後ろにずれるほか、JOIN句を実行する前にON句が実行されます。
このような実行順になるため、書き順に関わらず先に実行した句では、後の句の実行結果を参照できません。
たとえば、WHERE句→SELECT句の順で実行されるため(書き順とは逆転)、SELECT句でASを用いて命名してもWHERE句では使用できません。
WHERE句は比較的実行順が早いため、GROUP BY句であらかじめ集約する必要があるSUM関数なども使用できません。
また、上記の処理順から、LIMIT句で表示行数を制限してもそれ以前の句の処理時間には影響しないことがわかります。
書き順と実行順を理解しておくことで、適切なクエリを書けるようになるだけではなく、処理時間の短縮などの工夫をする際に意味があること/ないことを判断しやすくなります。
参考文献
SQL (構造化クエリ言語) とは何ですか? Amazon Web Service (AWS) 2025/5/5閲覧
SQLの書き順と実行順について Qiita 2025/5/5閲覧
SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話 Qiita 2025/5/5閲覧