副問合せでどれかにマッチする場合は ANY で | データベース初心者の基礎知識ブログ

副問合せでどれかにマッチする場合は ANY で

さて、副問合せの問題では、こんな表を使いましょう。

20100902_08.jpg

生徒テーブルと、成績のテーブルですね。

この2つのテーブルから、国語でも算数でもいいから、50点以上取った生徒を検索したい、

とすると。

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

こんな風に、ANY を使います。

副問合せ(サブクエリ)で、点数の結果を出しておいて、それらが50点以上だったら、という検索をします。

これを副問合せを使わない方法でも書けます。

SELECT DISTINCT 生徒テーブル.名前
FROM 生徒テーブル, 成績テーブル
WHERE 生徒テーブル.生徒ID = 成績テーブル.生徒ID
AND 成績テーブル.点数

成績テーブルから点数を検索した後に、重複をDISTINCTで省きます。

どちらも同じ結果が得られますね。