第1部 魔法のSQL 1-3 3値理論とNULL|達人に学ぶSQL徹底指南書
1-3 3値理論とNULL
1. 比較述語とNULL その1:排中律が成立しない
「命題とその否定を「または」でつなげてできる命題はすべて真である」というのが排中律。
2. 比較述語とNULL その2:CASE式とNULL
単純CASE式のCASE col_1 WHEN NULL
は、col_1 = NULL
の省略形なので、trueにならず思ったような動作にならない。
3. NOT INとNOT EXISTSは同値ではない
NOT INのサブクエリで使用されるテーブルの選択列にNULLが存在する場合、 SQL全体の結果は常に空になる。
EXITSはtrue とfalse しか返さない。そのため、INとEXISTSは同値変換が可能だが、NOT INとNOT EXISTSは同値ではない。
4. 限定述語とNULL
ALL述語は条件をANDで連結した論理式の省略形。
5. 限定述語と極値関数は同値ではない
極値関数は 集計の際にNULLを排除する、 入力が空集合だった場合はNULLを返す。
比較対象が存在しない場合、全行を返すべきか1行も返さないべきか、判断が必要。
6. 集約関数とNULL
COUNT関数以外の集約関数も、入力が空の場合NULLを返す。
NULLを何らかの値に変換するか、帰ってきたNULLに対処するのかのどちらかを選ぶ必要がある。
まとめ
NULLみな死すべし、慈悲はない
Link
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型