これは良い質問であり、良い答えがない質問です。 NULL
の扱い 2つの例では異なります。
基本的な問題は、NULL
が何であるかです。 意味。一般的に、これは欠落を示すために使用されます 値。ただし、ANSI規格では、不明を表します。 価値。哲学者は、「行方不明」と「不明」の違いに焦点を当てることができると確信しています。
単純な式(ブール値、算術演算、または別の種類のスカラー)では、ANSIは、オペランドのいずれかが「不明」であるほとんどすべての場合に「不明」の結果を定義します。いくつかの例外があります:NULL AND FALSE
はfalseで、NULL IS NULL
本当ですが、これらはまれです。
集計操作については、SUM()
を考えてください。 「すべての既知の値を合計する」など。 SUM()
NULL
を扱います +
とは異なる値 。ただし、この動作も標準であるため、すべてのデータベースが機能します。
NULL
が必要な場合 anyの場合の集計の値 そのオペランドのNULL
、次にCASE
を使用する必要があります 。単一の列を作成する最も簡単な方法は次のとおりです。
(CASE WHEN COUNT(col) = COUNT(*) THEN SUM(COL) END)