【SQL初級編5】SQLのサブクエリについて理解しよう

SQL入門

本記事では、サブクエリについて解説します。

前回はCONCATなどの関数について解説しました。

今回では、サブクエリ(クエリの中に他のクエリを入れる)についてみていきましょう。

SQLのサブクエリとは?

サブクエリ(副問合せ)とは、クエリの中に入っているクエリのことを言います。

クエリの中でクエリを実行することで、より複雑な処理をすることが可能です。

サブクエリ(副問合せ)はWHEREの中で使うこともできますし、SELECTやFROM内で使うときもあります。

ただ、最も多いのはWHEREで使うときでしょう。

WHERE内でサブクエリを使うことで、今まではできなかった条件でレコードを絞り込むことが可能です。

SQLのサブクエリの使い方

サブクエリ(副問合せ)の具体的な使い方についてみていきましょう。

次の項目に従って解説していきます。

  • サブクエリをWHEREで使う
  • サブクエリをSELECTで使う
  • サブクエリをHAVINGで使う
  • サブクエリを使う場合の注意点

なお、今回は『SQL入門編1』で作成したテーブルを使って解説します。『SQL入門編1』で演習用のテーブルを作っていない方は、【SQL入門編1】初心者必見!SQLのクエリの書き方を学ぼうを読んで予め作成してくださいね。

サブクエリをWHEREで使う

サブクエリをWHERE句で使う方法を解説します。

まずこちらのコードをごらんください。

○コード例

SELECT TestScore FROM TEST.Student WHERE name = "渡辺";

○実行結果

このSQL文では、nameが「渡辺」の人のTestScoreを出力していますね。

こちらのSQL文を他のSQL文の中に入れてみましょう

○コード例

SELECT name FROM TEST.Student WHERE TestScore <
(
    SELECT TestScore FROM TEST.Student WHERE name = "渡辺"
)
;

○実行結果

上記のコードはサブクエリとなっています。

先程のSQL文が()の中に入っていることがおわかり頂けるでしょう。

上記のコードはTestScoreが「渡辺」のTestScoreよりも低い人のみを出力しています。

サブクエリの場合は、まず()内のSQL文が実行されます。

()内のSQL文は「50」という数値を出力します。

その後WHERE句により、TestScoreが50未満のレコードのみ抽出しています。

これがサブクエリの基本形となります。

WHERE句でサブクエリを使うことで、「他の人のTestScoreと比べてどうか?」でレコードを抽出できるようになりました。

サブクエリをSELECTで使う

サブクエリをSELECTで使う方法を解説します。

○コード例

SELECT gender,AVG(TestScore) AS 性別ごと,
(
SELECT AVG(TestScore) FROM TEST.Student
) AS 全体
FROM TEST.Student GROUP BY gender;

○実行結果

上記のコードは、性別ごとの平均点と、全体の平均点を横に並べて出力しています。

「SELECT AVG(TestScore) FROM TEST.Student」によって、全体の平均点を取得し、それを、SELECT文で全ての列に表示しています。

このように、別々の集計データを同時に出力する際も、サブクエリが便利ですね。

SELECT文でも同じようにサブクエリが使えます。

サブクエリをHAVINGで使う

最後にサブクエリをHAVINGで使う方法をみていきましょう。

HAVINGで使うのも、WHEREと基本的なやり方は一緒です。

○コード例

SELECT age,AVG(TestScore) FROM TEST.Student GROUP BY age having AVG(TestScore) >
(
SELECT AVG(TestScore) FROM TEST.Student
)
ORDER BY age
;

○実行結果

上記のコードではまず、年齢ごとのTestScoreの平均点を集計しています。

その後HAVINGによって、全体の平均よりも大きい場合のみ絞り込んでいます

「SELECT AVG(TestScore) FROM TEST.Student」によって、全体の平均点を算出し、HAVINGによって、年齢ごとの平均点と比較しています。

このように、HAVING内でもサブクエリは使えます。

サブクエリを使う場合の注意点

サブクエリを使うにあたって注意点がいくつかあります。

それは、サブクエリの方のSQLには「;」を付ける必要はないということです。

上記のSQL文にも「;」はついていません。

ただし、サブクエリではない方のSQLには必ず「;」を付けないといけません

まとめ

本記事では、サブクエリついて解説しました。

サブクエリによって高度な処理ができることが、お分かり頂けたかと思います。

SQL文の中でSQL文を使うのは慣れないと難しいかもしれませんが、使い慣れると便利なものです。

次回は、UNIONを解説していきます。

挫折率が高い??プログラミング学習のポイント
駆け出しエンジニアが一緒に学ぶ
CANITは、Progateやドットインストールで独学している人達同士をつなげます。駆け出しエンジニアのあなたのためのSNSです。
SQL入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

CANIT
タイトルとURLをコピーしました