• 締切済み

【達人に学ぶ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に書き換えられそうなところがあったので何か意味があるのかなと思ったのですが。

みんなの回答

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

データのスキャン回数が違うかな。 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万件とかになると格段に変わってきます。

関連するQ&A