名著と名高い「達人に学ぶSQL徹底指南書」をようやく読んだ感想

ひしぶりにしっかりとSQLを何本も書く機会があったので、せっかくなので積読となっていた「達人に学ぶSQL徹底指南書」を読んでみました。

SQLについても(?)完全に独学&我流でやってきていたので、何気にちゃんとDBとかSQLの技術書を読むのはじめてでしたが、思っていた以上にこの本に書かれていることを色々な方から日々ご指摘頂いていたり、自分でも意識していたこともありスラスラと読み進めることができました。

どちらかと言えば、技術書というカテゴリよりもSQLを題材とした読み物といったほうがわかりやすいかもしれません。

こんな人におすすめ

  • 初心者を卒業したばかりな人
  • 初級レベルのSQLは理解してるけど次のステップは難しい人
  • 現場でゴリゴリ書いているけど実は勉強したことない人
  • そろそろちゃんとSQLを勉強したい人

などなど。

要するに初級者向けの参考書では物足りないけどまだ上級者向けのは厳しい……という、とりあず中級者にステップアップしたい人向けの本です。

まさに、指南書といったところでしょうか。

ちなみに、こちらのページをよく読ませて頂いていたので本書を購入前から著者のミック氏のことは知っていました。(DB関連では有名ですからね)

SQLのチューニングに関して大変参考になることばかりなので、興味ある方は合わせて読んで見ることをおすすめします。

リレーショナル・データベースの世界

CASE式ちゃんと使ってます?

こんなやつですね。

--単純CASE式 
 CASE sport
  WHEN '0' THEN '蹴球'
  WHEN '1' THEN '野球'
  WHEN '2' THEN '卓球'
  ELSE 'その他'
 END

--検索CASE式
 CASE
  WHEN sport = '0' THEN '蹴球'
  WHEN sport = '1' THEN '野球'
  WHEN sport = '2' THEN '卓球'
  ELSE 'その他'
 END

僕は今までこの手のCASE式はselectに書いて、group byして集計みたいなことをやっていました。(というか、この方法以外知らなかった……)

これは別に問題なさそうなのですが、実はこのパターン以外にもwhere句だったりgroup by句だったりにも書けるんですね!

まあ、本書の流れとしてはどうも僕の使い方は”ハック”的な方法で、本来の利用方法ではなかったみたいなのですが、逆に勉強になりました(笑)

この辺の話もミック氏のHPで紹介されています。

CASE式のススメ

~省略~

これは集計表を作るときに非常に便利な機能です。この技をスローガン的に表現するならば、

WHERE句で条件分岐させるのは素人のやること。プロはSELECT句で分岐させる

ということです。使いでのある技なので、多用してください。

CASE式のススメ

本書のいいところ

  1. 各章の終わりに「演習問題」がついているところ
  2. 内容がめちゃめちゃ深いところ
  3. 凝っていて実用的なSQLが学べるところ

指南書と謳っているだけあって、なんと演習問題までつけてくれています。

ちょっとしたパズル感覚でチャレンジしてみると面白いと思います。僕はこれのために、自宅のPCにPostgresSQLをインストールしました。

DWHを運用したりしていると、ときに複雑なSQLを組まなくてはいけなくなる場面もあります。後付でテーブルを追加したり、Viewを作ったりしているとやはりSQL的に無理がくるんですよね~。

インデックス張ってない列同士をJoinしたりとか。

そんなときに、本書で紹介されているようなチューニング方法は大変参考になると思います。

ただし、ハックしすぎ(笑)

SQL1つでどこまでできるのかと、色々凝りまくってます。

それはそれで面白いのですが、正直に実用的にはどうなんでしょうね(笑)

周りのエンジニアがみんなSQLバリバリな人なら問題ないのかもしれませんが、僕が参加するようなプロジェクトや、僕のチームでやったらひかれそうです。

まあ、チームのレベルアップとか考えたらいいのかもしれませんが、やはり色んな壁が……。

でも、スマートなSQLさらっと書いてみたいなぁ。

まとめ

めちゃめちゃおすすめです。

DB界隈で有名なミック氏によるSQL解説本であると同時に、SQLの楽しさも学べる技術書だと思います。

そもそも、DBとを「論理」「集合」などの数学的なキーワードを用いて解説してくれていますので、入門系のSQL本とは少し色合いが違うところも新しい気づきがあるかもしれません。

特に、NULLの扱いについては必読です。

また、姉妹本としてDB設計について解説している「達人に学ぶDB設計 徹底指南書」もあり、こちらについても僕は積読状態です。

どこかのタイミングで読んでみようと思います。