📝

技術書読書ログ「達人に学ぶ SQL徹底指南書」

2024/04/21に公開

概要

https://www.shoeisha.co.jp/book/detail/9784798157825

SQLのベースは宣言型・集合指向。
SQLには代入やループなどの手続きはない。
データもレコードではなく、もっと複合的な集合の単位で扱われる。

そこで肝心なのは、順序から集合へ思考パターンを変えること。
そのための7ヶ条が以下。

  1. IF文やCASE文は、CASE式で置き換える SQLはむしろ関数型言語と考え方が近い
  2. ループはGROUP BY句とウィンドウ関数で置き換える
  3. テーブルの行に順序はない
  4. テーブルを集合をみなそう
  5. EXISTS述語と「量化」の概念を理解しよう
  6. HAVING句の真価を学ぶ
  7. 四角を描くな、円を描け

個人的な学び・気付きポイント3点

ウィンドウ関数

  • カーソルの機能をSQLに持ち込める
  • カレントレコードを中心に、レコード集合の範囲を定義できる
  • 行間比較に相関サブクエリはもう使う必要はない、ウィンドウ関数を使う

EXISTS

  • 集合を引数にとり、真理値を返す関数
  • 高階関数のように扱う
  • NOT EXISTSを使いこなす
    • 「すべての行について〜」という条件を「〜でない行が1つも存在しない」という条件に変換して表現する

HAVING

  • HAVINGは集合自身の性質を調べるための道具
    • WHEREは集合の要素の性質を調べるための道具
  • GROUP BY が無くても使え、その場合はテーブル全体が1行に集約される

感想

"おわりに"で書いてあった
"SQLはライトな使い方にとどめてやりくりしていた"
というのが、まさに自分のことだなあと感じました。

そして、SQLをもっと使いこなすには、考え方を切り替えないといけないなとも思いました。
なので、その戒めのためにも、概要は19章の内容をそのまま持ってきました。

あとはSQLを書くときはの意識。
個人的な学び・気付きポイント3点のそれぞれの機能をもっと積極的に試してみようと思います。

Discussion