学習記録:12月2日(日):達人に学ぶSQL徹底指南書 第1部 魔法のSQL 1.CASE式のススメ
これは 俺のインプットアウトプット記録 Advent Calendar 2018 の2日目のエントリーです。
常日頃からSQL力(ちから)不足を感じていたところ、以前に購入して積ん読になっていた 達人に学ぶSQL徹底指南書 の第二版が出版されました。
最新のWindow関数も掲載されているということで見た瞬間に購入。しかしこのまま積ん読も怖い…。
と思っていたら、[秋葉原] 達人に学ぶSQL徹底指南書 輪読&勉強会 第1部 魔法のSQL で輪読会をやるということに。なんとありがたいことだ…。
ということで、これは参加しない手はない、読み進めよう!ということで進めています。
まずCASE式から
CASE式だけで24ページあります。正直あんまり使いこなしていなかった式からがっつり入るんだな、と思いつつ、読み進めていく。 これが非常に丁寧でわかりやすい。
- なぜ必要なのか
- どういう場面で使うのか
- IFやDECODEと比べてどうなのか
- 応用すると真価を発揮する
- Oracleなどにもきてほしいね
ということが実際のデータとSQLを例に解説されていきます。
僕自身も実際にデータを作ってSQLを実行してやってみているんですが、ちょうど今の仕事でPostgreSQLを使っているので、そちらで試しています。
試したコードも貼っていこうと思うんですが、まずは読み進めということで、書籍に準ずる形でメモを残してます。
感想Tweet
今日は気分を変えて「達人に学ぶSQL徹底指南書」を開く。第1部の最初の章で、24ページに渡って「CASE式」について書かれている。SQLを普通に(初学者から中級者の間)使っている人ならすんなりわかる内容なのがありがたい。CASE式の基本構文を理解し、IFやDECODEと比較したところで真価の話に入る
— まみー (@mamy1326) 2018年12月1日
CASE式は単体で使うならIFなどと大差ない。が、集約関数やGROUP BYと一緒に使うと絶大な効果がある。CASE式に別名をつけることができ、たとえばGROUP BYで使える。これによりCASE式を1箇所にできる。(Oracleは使えないと書いてある)
— まみー (@mamy1326) 2018年12月1日
SELECT句のCASE式を先にスキャンして列の計算を事前に行い、別名で定義、それをGROUP BYという理解でいいんだろうな。この先も続くが今日は昼間にぺちオブでOOPの情報を大量にインプットしたので頭に入らなくなってきたのでここまで。明日続きをやってアドベントカレンダーに書こうっと。
— まみー (@mamy1326) 2018年12月1日
いただいたリプ
なんとMySQLユーザー会副会長の 坂井 恵(SAKAI Kei) さん!
むむ。それは初版をお読みですね。可能であれば、10年後に発売された第2版がいいですよー。1章の主張はそれほど変わりませんが、特にその後の章で、Window関数推しが強くなっていて、よりモダンです。
— 坂井 恵(SAKAI Kei) (@sakaik) 2018年12月2日
安心してください!第二版です!!!!
ありがとうございます!でも安心してください!第二版の最新版です!CASE式の次にバッチリWindows関数が出てくるので、MySQL8.0を手元にインストールしつつ、PostgreSQLと比べながら試してみようと思ってます!
— まみー (@mamy1326) 2018年12月2日
感想
書籍の導入部分に 実務でのSQLプログラミング半年〜1年 と書かれている通り、SQLの基本的な構文は一通りやっている前提なのかな、と思います。
その上で、じゃあどんな場面でどんな式を使うのか、という内容を歴史や実例を伴って解説してくれています。
まだまだ第1章の途中までしか読んでいませんが、ずっと前から名著と呼ばれる理由をしょっぱなから実感してます。
もしSQL力(ちから)を高めたい、雰囲気で使ってる部分をわかりたい、 プログラマのためのSQL を読んで難しすぎて投げ出した!って人は必読かなって思います。
あと、次のページに出てくるんですが、 WHERE句で条件分岐させるのは素人のやること、プロはSELECT句で分岐させる と明言されていて、非常に使い勝手のいいテクニックとのこと。
ひとつずつ基礎が身についていくこの感覚、すごく楽しいです。