皆さんこんにちは。データアナリストのりゅうです。
今回はSQLで使える「サブクエリ」について解説します。
サブクエリとは
サブクエリとは、クエリの中に別のクエリを作ることです。
それだけ聞いてもよく分からないと思いますので、以下の例を使って解説します。
このテーブルをstudentsテーブルと名付け、ここから「MikeよりもMathの点数が高い生徒のデータを取得する」という命令を出すとします。
その際、「MikeのMathの点数を取得する」という工程と、「取得したMikeの点数よりも高い生徒のデータを取得する」という工程の2つに分かれます。
このような時にサブクエリがとても役に立つのです。実際に以下で書いてみます。
SELECT * FROM students WHERE Score > ( SELECT Score FROM students WHERE name = "Mike" )
5行目以下の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が大きい」という条件にすることができます。
サブクエリまとめ
今回はクエリの中にクエリを作る、サブクエリについて解説しました。
サブクエリはちょっぴり複雑なクエリを書く行為ではありますが、その分頭の整理や持っているデータを整理するのにとても役に立ちます。
僕も最初は苦手意識がありましたが、慣れるととても便利な機能ですのでぜひマスターしてください!
最後まで読んでいただきありがとうございました!