副問合せで全てにマッチする場合は ALL で
お次も同じように副問合せの話です。
今度は、どの教科も50点以上の生徒を導き出してみましょう。
このようなテーブルの場合は、
SELECT 生徒テーブル.名前
FROM 生徒テーブル
WHERE 50 <=
ALL ( SELECT 点数 FROM 成績テーブル
WHERE 生徒テーブル.生徒ID = 成績テーブル.生徒ID )
違いは、「ANY」との違いですね。
ALL を付けると、「すべての」ということになります。
これも副問合せを使わずに書くことができます。
SELECT 生徒テーブル.名前
FROM 生徒テーブル, 成績テーブル 国語, 成績テーブル 算数
WHERE 生徒テーブル.生徒ID = 国語.生徒ID
AND 生徒テーブル.生徒ID = 算数.生徒ID
AND 国語.教科 = '国語' AND 国語.点数 >= 50
AND 算数.教科 = '算数' AND 算数.点数 >= 50
これはちょっと難しいですね。成績のテーブルを2つ使わないとうまくいきません。
これならば ALL を使ったほうが簡単そうです。