こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

sqlの副問合せについて

初級シスアドの勉強をしている者ですが、SQLの副問合せがさっぱり理解できません。副問合せとは、どのように抽出する文なのでしょうか?解る方、お手数かけますが教えていただければ幸いです。

投稿日時 - 2008-02-28 22:56:47

QNo.3818816

困ってます

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

そうですねー。括弧の中のSQL、これが副問い合わせで、それを先に実行すると、その結果が返ってきます。データ1件かもしれませんし、複数かも知れません。で、それを、私が挙げた例の前者の場合は「テーブルの代わり」として、また、後者の場合は「検索条件の一覧」として利用するわけです。

前者の場合がわかりやすいと思います。普通、SELECT文はテーブルからデータを持ってきます。が、この場合、副問い合わせで得た結果を、テーブルの代わりに使ってしまうわけです。

投稿日時 - 2008-02-29 03:49:37

お礼

回答ありがとうございます。
副問合せの結果をテーブルの代わりとして使うのですね。理解できました。ありがとうございました。

投稿日時 - 2008-02-29 09:01:21

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

SQLそのものについての知識をどれくらいお持ちかが判らないので、どの程度の回答が適切か判りませんが...

とりあえず、簡単に言うと「SQL文の中に、もう一つSQL文がある」といった形になるものの「もう一つのSQL」の部分を副問い合わせ(Sub Query、サブクエリ)と言います。

たとえば、以下のような形です(具体的な例はちょっと大変なので、例の列名やテーブル名等は適当です。あしからず)。

■ケース1: テーブル代わりに副問い合わせ結果を使う
SELECT * FROM (SELECT ~ FROM ~ WHERE...) WHERE ...

■ケース2: 検索条件を副問い合わせで列挙する
SELECT * FROM ~ WHERE 名字 IN (SELECT 名字 FROM 名前テーブル WHERE 年齢が20歳以上)


上記の例は、いずれも簡単なSELECTなので実感がわかないかもしれませんが、ケース1の場合、あらかじめ、何かしらの条件で複雑なテーブル群から情報を洗い出しておき、さらに、もう1度そこから検索する、といったSQLを一文で書くことができます。

ケース2の場合、条件として使う情報、たとえば上記だと「条件になる名字」をあらかじめ列挙しておき、それと一致するものを別のテーブルから取り出す、といった場合に使います。

いずれも、たとえばプログラミング言語からデータベースを操作する場合であれば、副問い合わせを使わなくても

1. あらかじめSELECTで検索し
2. その結果を利用して再度SELECTする

といった2段階の処理で実現できます。が、そうしたプログラムによる処理ができない場合や、データベースが動いているサーバーの性能が非常に高く、プログラムが動くコンピュータに処理をやらせるよりも、SQL文として一気に指示したほうが高速である場合など、いくつかのケースで副問い合わせは有効です。

いずれのも場合も、最初混乱するのは「副」という名前がついているから、「親の次に副」かと思いがちですが、実際にデータベースがデータを取り出す際には「副のほうのSQL文が先に処理されて、親になるSQL文の中で利用される」という順番になるということですね。

投稿日時 - 2008-02-28 23:17:10

お礼

回答ありがとうございます。
たぶんSQLは超初心者のなので、理解していなかったらすみません。副問合せは、まず()の中で指定された条件を探してから、()の中の条件と、前で記述されているSELECT * FROM ~ WHEREの条件と一致するものを抽出する文ということで合っていますか?

投稿日時 - 2008-02-29 00:53:15

あなたにオススメの質問