WIP 達人に学ぶSQL徹底指南書の書評とか要約

1章

学び

CASE式には、単純CASE式と検索CASE式がある。

単純CASE式は、できることが限られている。

CASE式は、短絡評価。(真になった時点で処理終了)

- 各分岐のデータフォーマットを揃える
- ENDの書き忘れに注意
- ELSEを書かないとデフォルトのNULLが生成される。バグの原因になるのでNULLを明示する

CASE式でSELECT句つけた別名をAS句でつけて再利用。
データベースによっては使えない

SELECT CASE column_name
  WHEN '愛媛' THEN '四国'
  WHEN '徳島' THEN '四国'
  WHEN '長崎' THEN '九州'
  WHEN '佐賀' THEN '九州'
  ELSE 'その他'  END AS district
  SUM(population)
FROM PopTbl
GROUP BY district

CASE式は、CHECK制約と相性がいい。
CHECK制約とは、条件を満たさないデータを禁止する。

条件法は、論理積よりゆるい制約


なぜCASE式の中に集約関数を書けるか
=> 
集約関数もまた関数である以上
SELECT句においては最終的に1つの数値に評価されるので
外側のCASE式は結局、1つの数値を入力に取っているだけだから。

2章

学び

Window関数の機能
- PARTITION BY句によるレコード集合のカット
- ORDER BY句によるレコードの順序付け
- フレーム句によるカレントレコードを中心としたサブセットの定義


ROWS : 移動単位を行で設定
RANGE : 移動単位を列の値で設定
n PRECEDING : nだけ前へ移動
n FOLLOWING : nだけ後へ移動
UNBOUNDED PRECEDING : 無制限にさかのぼるほうへ移動
UNBOUNDED FOLLOWING : 無制限に下るほうへ移動
CURRENT ROW : 現在行

3章

学び

自己結合 Cross Join

内部結合 Innter Join(テーブル間で一致したものを返す)

外部結合 Outer Join(片方のテーブルにない要素も返す)

組み合わせを得る方法
=>
P1.name <> P2.name
つまり、P1.name ≠ P2.nameということ

フールプルーク(fool proof)
=> 
間違えた使い方になったとしても大事に至らない設計

非等値結合
=> 
"="以外の比較演算子で結合を行う

4章

学び

NULLは値でも変数でもない。目印である。

UNKNOWN AND TRUE => UNKNOWN
UNKNOWN OR FALSE => UNKNOWN
ANDとORでTRUEとFALSEの強さが逆になることに注意

FALSE UNKNOWN TRUE

極値関数は集計時にNULLを削除する
=> MAXやMIN関数

NULLの変換はCOALESCE関数を使う

5章

学び

EXISTS => 量化

述語
=>
戻り値が真理値になる関数

テーブルは行の集合。つまり命題の集合ともみなせる
EXISTSは高階関数