kagamihogeの日記

kagamihogeの日記です。

達人に学ぶ SQL徹底指南書

少し前に仕事で書いたSQLが爆発したこともあり、そろそろSQLをまともに勉強しなおす良い機会かと思いこの本を買ってきた。書評とかを見ると、今風にSQLを学びなおすには丁度よさそうだったので本書をチョイスしたのだが、丁度良い塩梅の難易度だった。SQLの基礎までは行かずとも再入門するには程よい難しさ、具体的なクエリ例を挙げてのSQLのテクニック紹介とその意義の解説に練習問題とで中々に実用的ではないかと思う。

初っ端はCASE式から始まるのだけど、CASE「式」なので、式が書ける場所ならどこでも書けるというのは中々に目から鱗だった。条件付きUPDATEはともかく、CHECK制約にもCASEが使えるとかは驚き以外の何者でもなかった。他にも印象深い箇所はタクサンあり、自己結合によって集合論の理解を深める手法であるとか、肯定と二重否定の変換だとか、なるほどなーとの感想ばかりだった。

俺はこの本を読んでいて、はぁーとかほぉーとか感嘆しきりであり、つまるところ俺はSQLを全然理解していなかったのだなぁと反省した。確かに、日頃のアプリケーション開発ではDBというのは極論では巨大なグローバル変数にしか過ぎない、と侮っていたようだ。この感覚はOOPを再学習し始めた頃に通じるものがあるので、学習機会と捉えるのが良策なのだろう。切欠をくれたという意味では本書にはかなりの感謝をしなければいけない。

本書は独特の言い回しが多いのだが、それが逆に俺には新鮮だった。集合の世界では周知のことなのかもしれないが、なるほどと唸る記述が多かった。手続き的から集合の世界へ頭を切り替えるにはフローではなく円で考えよとか、テーブルの行には順序はないとか、もしnullが値であるとしたら型は何なのか? とか。nullがなぜややこしい事態を生みがちなのか、なぜSQLはnullを許容することになったのかの背景までも書かれており、非情に興味深かった。

この本は3/4が具体的なSQLとその解説なんだが、残り1/4はSQLの歴史や背景の理論にまで踏み入ってのやや抽象的な話題になっている。特におもしろかったのは、「アドレス、この巨大な怪物」の章で、関係モデルはデータの取得をその位置であるアドレスから開放し、データを名前によって取得できるようにすることにあった、という下りは本当に驚きだった。俺のような手続き型から入ったプログラマには、ポインタのような概念が無いことが奇異に見えてとっつき辛ささえ覚えるSQLの世界が、実はコンピュータをより使いやすくするための試みなことのところは、半ば感動すら覚えた。

割と感情的な記述が続いたんで、最後はバランスを取る意味で少しだけ客観視点で本書の評価をしておきたい。まず、SQLを学びなおすための糸口としてはかなり有用なのは先述したとおり。ただし、前半でSQLのテクニック、後半ではややマニアックともいえるトピックに触れる構成をとったのは、少し微妙に感じた。一冊に収めようとすることで、理論と実践の両方ともが中途半端になっている感が無くもない。とはいえ、本書の目的がそもそもSQLの世界へのイントロダクションとなるべくよう作られたもののようなので、このくらいの密度が丁度良いのだろう。実際、俺はこの本読み終わってから参考文献に手を出そうという気になっているんで。

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)