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文の中で利用される」という順番になるということですね。
質問者
お礼
回答ありがとうございます。
たぶんSQLは超初心者のなので、理解していなかったらすみません。副問合せは、まず()の中で指定された条件を探してから、()の中の条件と、前で記述されているSELECT * FROM ~ WHEREの条件と一致するものを抽出する文ということで合っていますか?
お礼
回答ありがとうございます。 副問合せの結果をテーブルの代わりとして使うのですね。理解できました。ありがとうございました。