副問合せが行を返すかチェックは EXISTS で | データベース初心者の基礎知識ブログ

副問合せが行を返すかチェックは EXISTS で

副問合せの式で、特定の列を指定する場合は ANY を使いますが、行そのものがあるかどうかを調べるには、EXISTS を使うこともできます。

20100902_08.jpg

このテーブルから、50点以上取っている生徒を検索する場合、ANY を使えば、

SELECT 生徒テーブル.名前
FROM 生徒テーブル
WHERE 50 <=
ANY ( SELECT 点数 FROM 成績テーブル
WHERE 生徒テーブル.生徒ID = 成績テーブル.生徒ID )

こんな感じでしたね。

これを EXISTS(マッチする行が存在するかどうか)を使ってみると、

SELECT 生徒テーブル.名前
FROM 生徒テーブル
WHERE
EXISTS ( SELECT * FROM 成績テーブル
WHERE 生徒テーブル.生徒ID = 成績テーブル.生徒ID
AND 成績テーブル.点数 >= 50 )

こんな風に書きます。

条件の50点以上のところが、ANY の場合は服問汗の外側に、EXISTS の場合は内側になりますね。