• ベストアンサー

SQL副問合せを使う理由

SQLを勉強中の者ですが、副問合せの部分を勉強中に 「副問合せを使う理由」がわからないので教えて欲しいと思い投稿しました。 副問合せ自体は理解したのですが、参考書やネットで副問合せについての説明や例題などをみると、 副問合せを使わなくても同等の結果を得られるような例題が多く、 なぜ副問合せを使うのか、その理由がよくわかりません。 場面場面で「使う理由」は違ってくるんだとは思いますが。。。。 処理効率の問題とかあるんでしょうか? 自分自身もSQL初心者な上に、会社の新人にSQLの基礎を教えてくれと 頼まれて引き受けた以上、わかりやすく教えてあげたい(自分も勉強したい)と思っています。 すみませんが、どなたか宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

大きくは3つあるとおもいます。 (1)副問い合わせでしかできない処理をおこなうため (2)副問い合わせの方で行う方が効率的な処理をおこなうため=高速化 (3)副問い合わせを行った方がフローがわかりやすい処理をおこなうため=汎用化 上記でない場合、SQL使用者のスキルがひくく、非効率な副問い合わせを している可能性は否定できません。

sigesl
質問者

お礼

yambejpさん、早速のご回答ありがとうございます。 (1)、(2)は、それこそSQL使用者のスキルがもの言う判断だと思います。 初心者からすると、副問合せはチョッとカッコいいSQL文になるかな? とも考えがちで、そちらで組んでしまおうと思ったりもすると思うのですが(私だけですかね(^^;; yambejpさんのご回答を読んで、不用意に副問合せを使わないという意識を持っておいたほうが良いのかなと 思いました。 ちなみに、参考書の例題を元にして以下の二つのSQLを実行して、 Object Browserの実行計画を見てみました。 結果、「recursive calls」の項や、「consistent gets」の項で大きな違いが現れていました。 (下記SQL2の方が効率的?でした) これは、副問合せを使ってはいけない典型的な例となるんでしょうね。 (SQL1) SELECT SUM(siire_suryo) FROM siire_tbl WHERE shohin_cd IN(SELECT shohin_cd FROM shohin_mst WHERE shohin_tnka = 100) (SQL2) SELECT SUM(TBL.siire_suryo) siire_suryo FROM siire_tbl TBL ,shohin_mst MST WHERE TBL.shohin_cd = MST.shohin_cd AND MST.shohin_tnka = 100 ご回答頂いて、とても助かりました。 またひとつ勉強になりましたし、新人君にも説明できる自信が持てました。 本当にありがとうございました。

その他の回答 (1)

  • Kazma_hk
  • ベストアンサー率26% (115/428)
回答No.2

ちょっと勘違いをしているようなので 下の例にあったSQLでSQL1が非効率なのは 副問合せを行っているからではなく、INを使用しているから だと思います。 INDEX情報が分からないのですが、INを使用するとINDEXを無視します そのため、実行公立は悪くなることが多々あります。

sigesl
質問者

お礼

なるほど、そうでしたか。 IN句を使わずに「=」で試してみたところ、おっしゃるとおりINDEXを使うようになり 「Consistent gets」も、今度はSQL1の方が効率的になっています。 何のプログラムでもそうだとは思いますが、覚えるのに苦労し、覚えたら覚えたで 今度はパフォーマンスを意識しなければと、特にSQLはこの「パフォーマンス」が 命取りになりそうな気がしています。 しっかり勉強したいと思います。 Kazma_hkさん、 ありがとうございました。

関連するQ&A