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

  • 2019.05.14
  • 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カラムを紐づけることができそうです。

結果はこんな感じ。

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

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

置き換えてみましょう。

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

得点が最大の教科

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

結果はこんな感じ。

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

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

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

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

さいごに

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

副問合せのポイント

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

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

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

以上、コジマでした。


SQLカテゴリの最新記事