目次
サブクエリとは?
サブクエリとは日本語では「副問い合わせ」や「入れ子」と呼ばれていますが、
日本語での表現が非常に分かりにくい…
英語の「Sub-Query(サブクエリ)」の方が理解しやすいのではないでしょうか
Sub(サブ)
《substituteの略》補欠。補充員。
多く複合語の形で用い、下位の、補助の、副の、の意を表す。
Weblio英和辞書
英語の意味通り、補欠や副というイメージです
SQLでは「主力のクエリー」に対し「補欠のクエリー」が存在しています
スポーツの試合と同じように、「総力戦」でデータを抽出しましょう
サブクエリの使い方
サブクエリの使い方はずばり…
「SQLの中に、別のSQLを組み込む」
SQLで抽出した結果を、別のSQLのFROM句やWHERE句で使うことができます
ルールはたった1つで、クエリを()カッコで括ります
まずは「FROM句」でサブクエリを使うパターン
SELECT ***
FROM ( サブクエリ )
WHERE ***
そして「WHERE句」でサブクエリを使うパターン
SELECT ***
FROM ***
WHERE 列名 論理式 ( サブクエリ )
今までWHERE句では、「具体的な条件値」を指定してきましたが
サブクエリでは条件値自体をSQLで抽出することができます
名前 IN ( ‘佐藤’ , ‘鈴木’ , ‘高橋’ )
条件値が10個以内であれば、IN句で並べて記述することができますが
数が増える場合はサブクエリで代用しましょう
名前 IN ( SELECT 名前 FROM *** WHERE *** )
サブクエリを使うと1つのSQLの中に複数のSELECTやWHEREが出てきます
可読性を高めるために、インデント(空白)を上手に使いましょう
サブクエリを使うメリット
サブクエリを使うことで、SQLの可能性を何倍にも広げることができます
- 複数の抽出を1回のSQLにまとめることができる
- 抽出するデータ量を減らして、高速化することができる
- JOINやWITHと組み合わせて、可読性を上げることができる
サブクエリを使う理由は様々ですが、
複雑な集計になればなるほど「使わざるを得ない状況」が出てきます
サブクエリに苦手意識を持っている初心者は多くいますが、
利用イメージをしっかり持てってSQLを書きましょう
サブクエリのイメージ
ここでサブクエリの利用イメージをしっかりと理解しましょう
まずは「FROM句でサブクエリ」を使うイメージです
続いて「WHERE句でサブクエリ」使うイメージです
サブクエリは「複数重ねる」ことができます
「クエリの中にクエリの中にクエリ…」と記述していくと複雑になってしまうので
頭の中で「1つ目のサブクエリでは●●を抽出する」と計画を立てましょう
実践
最後にサブクエリの抽出を実践で使ってみましょう
「野球部の生徒に絞ってテストの点数と名前を抽出し、点数の高い順に並び替える」SQLを記述する
SELECT
名前, 点数
FROM
テスト点数テーブル
WHERE
名前 IN ( -- ここからサブクエリ
SELECT 名前
FROM 部活テーブル
WHERE 部活 = '野球'
) -- ここまで
ORDER BY
点数 DESC
注目ポイントは「最初のWHERE句でサブクエリ」を使っているところです
サブクエリで「野球部の名前を抽出」してWHERE句の名前条件として利用
そして点数テーブルから名前と点数を抽出して、点数の高い順に並び替えます
複雑なSQLになってしまったら、サブクエリを取り出して考えます
( -- ここからサブクエリ
SELECT 名前
FROM 部活テーブル
WHERE 部活 = '野球'
) -- ここまで
LIMIT 10
サブクエリ内の「野球部の名前を抽出するクエリ」だけを抽出してみましょう
※LIMIT句を使わないと大量にデータが出てしまうので要注意です
まとめ
今回は基本的な「サブクエリ」の使い方についてご紹介してきました
サブクエリを使うことで、あなたのSQLの可能性を広げることができます
しっかりと頭の中で「イメージ」を立て、SQLを書いてみましょう