アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLを勉強中の者ですが、副問合せの部分を勉強中に
「副問合せを使う理由」がわからないので教えて欲しいと思い投稿しました。
副問合せ自体は理解したのですが、参考書やネットで副問合せについての説明や例題などをみると、
副問合せを使わなくても同等の結果を得られるような例題が多く、
なぜ副問合せを使うのか、その理由がよくわかりません。
場面場面で「使う理由」は違ってくるんだとは思いますが。。。。
処理効率の問題とかあるんでしょうか?

自分自身もSQL初心者な上に、会社の新人にSQLの基礎を教えてくれと
頼まれて引き受けた以上、わかりやすく教えてあげたい(自分も勉強したい)と思っています。
すみませんが、どなたか宜しくお願いします。

A 回答 (2件)

大きくは3つあるとおもいます。



(1)副問い合わせでしかできない処理をおこなうため
(2)副問い合わせの方で行う方が効率的な処理をおこなうため=高速化
(3)副問い合わせを行った方がフローがわかりやすい処理をおこなうため=汎用化

上記でない場合、SQL使用者のスキルがひくく、非効率な副問い合わせを
している可能性は否定できません。
    • good
    • 0
この回答へのお礼

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_tblTBL
,shohin_mstMST
WHERE TBL.shohin_cd= MST.shohin_cd
AND MST.shohin_tnka= 100

ご回答頂いて、とても助かりました。
またひとつ勉強になりましたし、新人君にも説明できる自信が持てました。
本当にありがとうございました。

お礼日時:2009/07/30 16:24

ちょっと勘違いをしているようなので


下の例にあったSQLでSQL1が非効率なのは
副問合せを行っているからではなく、INを使用しているから
だと思います。

INDEX情報が分からないのですが、INを使用するとINDEXを無視します
そのため、実行公立は悪くなることが多々あります。
    • good
    • 0
この回答へのお礼

なるほど、そうでしたか。
IN句を使わずに「=」で試してみたところ、おっしゃるとおりINDEXを使うようになり
「Consistent gets」も、今度はSQL1の方が効率的になっています。

何のプログラムでもそうだとは思いますが、覚えるのに苦労し、覚えたら覚えたで
今度はパフォーマンスを意識しなければと、特にSQLはこの「パフォーマンス」が
命取りになりそうな気がしています。
しっかり勉強したいと思います。

Kazma_hkさん、
ありがとうございました。

お礼日時:2009/07/31 18:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!