【SQL】副問合せ文のイメージを掴む

【SQL】副問合せ文のイメージを掴む

はじめに

コジマです。

会社のslack覗いてたらSQLの副問合せって結構難しいのかなーって思ったので
まとめてみることにしました。

確かにSQLを勉強するときに
SELECT,UPDATE,INSERT,DELETEと基本的なことを覚えた後に
WHERE句の条件指定方法の幅を広げていくことになります。

後述しますが、副問合せってSQLの中にSQLがいるもんだから慣れないと
読みづらかったりするかな、という感じはします。

副問合せってなんぞ

SQLの書き方の一種です。
SQLの検索条件にSQLの実行結果を使うのが特徴です。

正直、これに尽きると思います。
なので、できあがるSQLはSQLの中にSQLが埋め込まれた長い構造になることが世の常です。

副問合せを使用しためちゃめちゃに長いSQLを読んだり書いたりすることも稀にありますが、
SQLのまとまりに分解して考えることさえできれば長くてもへっちゃらです。

どういうときに使える?

テーブルのレコードを検索条件に使用したいときに使用します。


サンプルを用意しました。

このサンプルからデータを取得することを考えます。
副問合せを使用することができればどのようなことができるか考えてみたいと思います。

副問合せを身に付けたらできるようになること

  • コジマの英数国の成績
  • 得点が最大の教科

などなど

今回はこの2つのSQLを考えてみようかと思います。

他にも色々考えられるけど、他のテクニックを使用するものだったりするので
今回はパス(眠くなってる at 深夜1:30)

コジマの英数国の成績

実際にSQLを作成するときはどのデータとどのデータが結びつくかを考えます。

この場合はuserテーブルのIDカラムとscoreテーブルのUSERIDカラムを紐づけることができそうです。

SELECT SUBJECT, SCORE FROM user
    WHERE USERID = ( -- userテーブルのIDカラムと紐づける
        SELECT ID FROM user
        WHERE NAME = "コジマ"
    );

結果はこんな感じ。

コジマの成績を取ってくることができました。

カッコがあることによってとっても読みづらく感じてしまいますが、
このカッコの中が表すのはコジマのユーザIDってだけです。

置き換えてみましょう。

SELECT SUBJECT, SCORE FROM user WHERE USERID = (コジマのユーザID);

副問合せってこんだけです。
条件にSQLを使ってるから長く見えるけど、意味は一個だけなので慣れるまでは
副問合せのSQLが意味してるものを一言で置き換えることで読みやすくできると思います。

得点が最大の教科

これはまた違ったデータの結びつき方をします。
scoreテーブルのSCOREカラムとscoreテーブルのSCOREの最大値が結びつきます。

SELECT SUBJECT FROM score
    WHERE SCORE in (
        SELECT max(SCORE) FROM score
    );

結果はこんな感じ。

数学で最大スコアが出たことがわかりました。
100点が複数ある場合も考慮してinを使っています。

これもカッコ内が示すものはSCOREの最大値というだけです。
先ほど同様にカッコ内を一言で置き換えてみると

SELECT SUBJECT FROM score
    WHERE SCORE in (SCOREの最大値);

となり、だいぶ見やすくなってると思います。

情報を整理して副問合せ苦手な人は克服していきましょう。

さいごに

副問合せについてまとめます

副問合せのポイント

  • 副問合せはSQLの中にSQLがあるもの
  • どのデータとどのデータが結びつくかを考える
  • 慣れるまでは副問合せ文を一言に置き換えてみる

明日はよく寝ようと思います。

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

もっと学びたい人はこちら

SQLをもっと学びたいエンジニアのためにおすすめのUdemy講座を紹介いたします!

SQLはじめましての人!まずあなたの3時間をください。
この講座でまずこれだけは覚えてくれ!という内容をしっかり押さえることができます。
SQLはプログラミング言語がなんであれ、システム開発に必要になります。
この講座を見て最低限必要な知識を身に着けて実践で貢献できるようになりましょう!
3時間で学ぶ SQL ・データベース 超入門【丁寧な解説+演習問題で SQL データ抽出の基本が身につく】標準 SQL

データベースの設計について学べる講座です。
設計について学べる教材は少ないので、実務でデータベースを触る人にはとてもうれしい講座です。
データベース講座1:データベース論理設計

ちょっとニッチに感じるかもしれませんが、SQLのインデックスを学ぶことができる講座です。
よい性能でSQLを運用するためにはインデックスの理解は必要不可欠です。
CRUD書いて満足するエンジニアを出し抜きましょう。
SQLServerのインデックスを理解して検索を速くする方法

気になった人はぜひ見てみてくださいね!
以上、コジマでした。


SQLカテゴリの最新記事