SQLを勉強中の者ですが、副問合せの部分を勉強中に
「副問合せを使う理由」がわからないので教えて欲しいと思い投稿しました。
副問合せ自体は理解したのですが、参考書やネットで副問合せについての説明や例題などをみると、
副問合せを使わなくても同等の結果を得られるような例題が多く、
なぜ副問合せを使うのか、その理由がよくわかりません。
場面場面で「使う理由」は違ってくるんだとは思いますが。。。。
処理効率の問題とかあるんでしょうか?
自分自身もSQL初心者な上に、会社の新人にSQLの基礎を教えてくれと
頼まれて引き受けた以上、わかりやすく教えてあげたい(自分も勉強したい)と思っています。
すみませんが、どなたか宜しくお願いします。
No.1ベストアンサー
- 回答日時:
大きくは3つあるとおもいます。
(1)副問い合わせでしかできない処理をおこなうため
(2)副問い合わせの方で行う方が効率的な処理をおこなうため=高速化
(3)副問い合わせを行った方がフローがわかりやすい処理をおこなうため=汎用化
上記でない場合、SQL使用者のスキルがひくく、非効率な副問い合わせを
している可能性は否定できません。
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
ご回答頂いて、とても助かりました。
またひとつ勉強になりましたし、新人君にも説明できる自信が持てました。
本当にありがとうございました。
No.2
- 回答日時:
ちょっと勘違いをしているようなので
下の例にあったSQLでSQL1が非効率なのは
副問合せを行っているからではなく、INを使用しているから
だと思います。
INDEX情報が分からないのですが、INを使用するとINDEXを無視します
そのため、実行公立は悪くなることが多々あります。
なるほど、そうでしたか。
IN句を使わずに「=」で試してみたところ、おっしゃるとおりINDEXを使うようになり
「Consistent gets」も、今度はSQL1の方が効率的になっています。
何のプログラムでもそうだとは思いますが、覚えるのに苦労し、覚えたら覚えたで
今度はパフォーマンスを意識しなければと、特にSQLはこの「パフォーマンス」が
命取りになりそうな気がしています。
しっかり勉強したいと思います。
Kazma_hkさん、
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- 大学受験 お急ぎの質問です。 現在高3受験生です。次の金曜日に明治大学総合数理学部(現象数理科)の学部別試験が 3 2023/02/13 23:38
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- 大学受験 自己推薦書の添削や意見・アドバイスお願いします 2 2022/08/27 19:34
- その他(パソコン・スマホ・電化製品) マクロを仕事で使用する為、勉強を初めたいと思います。参考書が欲しいのですが、ネットで参考問題をダウン 3 2023/05/10 18:40
- 大学受験 3浪しようと思うので、アドバイスお願いします。 自分としては結構メンタルきつくて後期でいいから、東京 3 2023/02/13 21:47
- 高校受験 【受験まで残り3日】誰かアドバイス下さい。もう参考書を全て終わらせる時間が無いです。 私は理社の点数 2 2023/02/11 18:12
- その他(職業・資格) 来年、仕事の都合でエネルギー管理士の資格試験を受験しようと考えているのですが、難易度について教えて下 1 2022/09/24 12:14
- 大学受験 真面目な質問です。 今年、東京工科大学の医療保険学部を総合型で受けたのですが、数学が基礎かと思ったら 2 2022/11/03 22:22
- 国家公務員・地方公務員 公務員試験の数的処理で苦戦しています。 1 2023/01/30 08:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
VBAでループ内で使う変数名を可...
-
VBA SaveChanges 上書きされない
-
レジ返品交換について(時間がか...
-
リョウ・・・量?料?
-
VBの質問#if 0 then ってどう...
-
VB6,Ifから抜けるには?
-
VB6 DoEventsの代わりは?
-
フォーム上のすべてのTextBoxを...
-
Do~Loopした回数をカウントしたい
-
Select Case文でこのようなこと...
-
Webアプリや業務アプリのデータ...
-
VBAで処理フラグの立て方
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
月度は何て読みますか?
-
switch の範囲指定
-
VBの質問#if 0 then ってどう...
-
セルの値が0はクリアするマクロ
-
VB.NET Excelを読み込んでDataT...
-
Do~Loopした回数をカウントしたい
-
Loadイベント中にほかのイベン...
-
Select Case文でこのようなこと...
-
findは動くがfindnextがマクロ...
-
緊急です。 知り合いから50kgの...
-
リョウ・・・量?料?
-
理不尽、行き場のないイライラ...
おすすめ情報