• ベストアンサー

sqlの副問合せについて

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

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

  • ベストアンサー
  • _backyarD
  • ベストアンサー率34% (199/580)
回答No.2

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

lamm
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • _backyarD
  • ベストアンサー率34% (199/580)
回答No.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文の中で利用される」という順番になるということですね。

lamm
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A