- 締切済み
【達人に学ぶSQL徹底指南書】についての質問
【達人に学ぶSQL徹底指南書】という本の以下のSQLについての質問です。 ---------------------------------------- --【95ページのSQL】 --算数の点数が80点以上かつ --国語の点数が50点以上の生徒を取得 ---------------------------------------- SELECT DISTINCT student_id FROM TestScores TS1 WHERE subject IN('算数','国語') AND NOT EXISTS( SELECT * FROM TestScores TS2 WHERE TS2.student_id = TS1.student_id AND 1 = CASE WHEN subject = '算数' AND score < 80 THEN 1 WHEN subject = '国語' AND score < 50 THEN 1 ELSE 0 END ) このSQLの ---------------------------------------------------------- AND 1 = CASE WHEN subject = '算数' AND score < 80 THEN 1 WHEN subject = '国語' AND score < 50 THEN 1 ELSE 0 END ---------------------------------------------------------- は ---------------------------------------------------------- AND ((subject = '算数' AND score < 80) OR (subject = '国語' AND score < 50)) ---------------------------------------------------------- と同じ意味ですよね? CASE式を使っている意味は何かあるのでしょうか? 他のSQLにも同様にORに書き換えられそうなところがあったので何か意味があるのかなと思ったのですが。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- maiko04
- ベストアンサー率17% (345/1956)
データのスキャン回数が違うかな。 subject = '算数' AND score < 80 で1回 subject = '国語' AND score < 50 で1回 計2回 AND 1 = CASE WHEN subject = '算数' AND score < 80 THEN 1 WHEN subject = '国語' AND score < 50 THEN 1 ELSE 0 END は1回 データが100万件とかになると格段に変わってきます。