皆さんこんにちは。合同会社StudioData代表のRyumaと申します。
今回はSQLで使える「サブクエリ」について解説します。
サブクエリとは
サブクエリとは、クエリの中に別のクエリを作ることです。
それだけ聞いてもよく分からないと思いますので、以下の例を使って解説します。
このテーブルをstudentsテーブルと名付け、ここから「MikeよりもMathの点数が高い生徒のデータを取得する」という命令を出すとします。
その際、「MikeのMathの点数を取得する」という工程と、「取得したMikeの点数よりも高い生徒のデータを取得する」という工程の2つに分かれます。
このような時にサブクエリがとても役に立つのです。実際に以下で書いてみます。
SELECT *
FROM students
WHERE Score > (
SELECT Score FROM students WHERE name = 'Mike'
)
4行目以下のWHERE句の箇所で()の中にもう一度SELECTから始める別のクエリがあるのが分かります。
SELECT Score
FROM students
WHERE name = "Mike"
()の中のクエリだけ取り出したものがこちらで、「MikeのScoreを取得」という非常にシンプルなものになっています。
これが先に実行されることで全体のクエリは下記のようなイメージになります。
SELECT *
FROM students
WHERE Score > (MikeのScore)
その結果、ちゃんとMikeの点数よりも高い生徒が取得されます。
ポイント
クエリの実行順番はサブクエリ→外側のクエリ
サブクエリで集計関数を使ってみる
次に、MathのScoreが平均よりも高い生徒を取得してみます。
その際は下記のようなサブクエリを使うとうまくいきます。
SELECT *
FROM students
WHERE Score > (
SELECT AVG(Score) FROM students
)
サブクエリの中で「Scoreの平均点」を一度取得し、外側のクエリのWHERE句で「取得した平均点よりもScoreが大きい」という条件にすることができます。
サブクエリまとめ
今回はクエリの中にクエリを作る、サブクエリについて解説しました。
サブクエリはちょっぴり複雑なクエリを書く行為ではありますが、その分頭の整理や持っているデータを整理するのにとても役に立ちます。
著者も初めてSQLを触った際は苦手意識がありましたが、慣れるととても便利な機能ですのでぜひマスターしてください!
最後まで読んでいただきありがとうございました!