条件にSELECTを入れるのが副問合せ | データベース初心者の基礎知識ブログ

条件にSELECTを入れるのが副問合せ

RDBMS の R(Relational)な部分へ突入します。

データベースでSQL文を作るときは、2つ以上のテーブルを組み合わせて作ることがとても多いです。

このテーブルの組み合わせで、たいていの場合は、WHERE 句で条件を繋げていきます。

20100819_05.jpg

こんな結果を得る場合は、

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」な人を検索しする、という手順です。

この副問合せ、これだけだと意味がないように見えるのですが(事実、できるだけ、副問合せを使わない書き方のほうが分かり易いです)、限定比較述語ってのを使うときに役に立ちます。