条件にSELECTを入れるのが副問合せ
RDBMS の R(Relational)な部分へ突入します。
データベースでSQL文を作るときは、2つ以上のテーブルを組み合わせて作ることがとても多いです。
このテーブルの組み合わせで、たいていの場合は、WHERE 句で条件を繋げていきます。
こんな結果を得る場合は、
SELECT 手帳テーブル.名前
FROM 手帳テーブル, 趣味テーブル
WHERE 手帳テーブル.趣味ID = 趣味テーブル.ID
AND 趣味テーブル.趣味 = '車'
この例で、副問い合わせを使ってみましょう。
副問い合わせっていうのは、WHERE 句に SELECT 文が入る、特殊なパターンです。
基本は、副問い合わ(サブクエリともいう)を使わないパターンが良いのですが、どうしてもうまくいかない、という時に使います。
SELECT 手帳テーブル.名前
FROM 手帳テーブル
WHERE 手帳テーブル.趣味ID = (
SELECT 趣味テーブル.ID
FROM 趣味テーブル
WHERE 趣味テーブル.趣味 = '車 )
こんな風になります。
これを解説すると、まず、副問い合わせで、趣味が車の ID を検索します。
SELECT 手帳テーブル.名前
FROM 手帳テーブル
WHERE 手帳テーブル.趣味ID = (
SELECT 趣味テーブル.ID
FROM 趣味テーブル
WHERE 趣味テーブル.趣味 = '車 )
これを検索すると、「1」になりますね。
SELECT 手帳テーブル.名前
FROM 手帳テーブル
WHERE 手帳テーブル.趣味 = (
1 )
そして、手帳テーブルから趣味IDが、「1」な人を検索しする、という手順です。
この副問合せ、これだけだと意味がないように見えるのですが(事実、できるだけ、副問合せを使わない書き方のほうが分かり易いです)、限定比較述語ってのを使うときに役に立ちます。