新著が出ます:ジョー・セルコ『プログラマのためのSQL 第4版』

 皆さん、お久しぶりです。長らくブログの更新が止まっていたのは、少し大きな仕事をしていたためです。ジョー・セルコ『プログラマのためのSQL 第4版』の翻訳。これに集中するため、ブログもやらずTwitterもやらず(こっちはちょっとやってしまった)頑張っておりました。

 長かった。

 本当に長かった。

 原著が800ページ以上あるうえ内容も簡単ではないので、もともと楽な仕事とは思っていませんでしたが、いや大変でした。ですが無事今月刊行とあいなりました。すでにAmazonはじめオンラインショップでも予約受付を開始しています。あらかじめ言っておきますが「表紙のおっさん誰?」という質問は私にはしないように。私も答えられないので(笑)。

 さて、本書の内容を紹介する代わりに、少し長くなりますが訳者前書きを引用します。購入するか判断の参考にしていただければと思います。なお、実行環境としては前書きでも書いていますが、PostgreSQLがおすすめです。

本書は、米国データベース界を代表するエンジニアであるジョー・セルコ氏の著書『JoeCelko’s SQL for Smarties』第4 版の邦訳である。SQLに関して、おそらく世界で最も網羅的かつ体系的に記述された本であり、また高度で実践的なテクニックを満載していることから、英語圏SQLを学んだり仕事で使う人々にとっては、不動のバイブルとして位置づけられている本である。


 原書第2版の邦訳は、2001年にピアソン・エデュケーションから刊行されたが、それから第3版を飛ばして、久々の訳出となる。著者も述べるように、この間のSQLの進歩には目覚しいものがあり、本書もSQLの新機能に対応するべく大幅なアップグレードが行われている。「新しいSQL」を学ぶすべての人にとっての導きの書となるに相応しい重厚な内容であり、本書を訳出できたことは、一人のDBエンジニアとして非常に嬉しく思う。


 さて、本書を読む人々のために、ここで本書の内容について簡単なガイドを行いたい。本書は、全39 章からなるが、大きく前半と後半に分けられる。前半は第12章まで、後半は第13章以降である。前半は主にSQLおよびリレーショナルデータベースの基礎的な概念や理論的枠組みについての解説が行われる。後半は、それを踏まえたうえでSQLの持つ多彩な機能の解説と高度な応用テクニックが紹介される。基本的には第1章から順に読んでいくシーケンシャルな読み方でかまわないが、もし読者が手っ取り早くSQLのテクニックを知りたい、あるいは前半をパラパラめくってみて、内容をある程度承知していると感じたならば、第13章から読み始めて、適宜必要な前半を参照する、という読み方をしてもよい。第13章は正確にはSQLのテクニックを解説した章ではないが、必ずすべての読者に読んでもらいたい。「本書の中で最も重要な章は?」と訊ねられたら、迷わず第13章と答えるだろう。


 第12章までの前半では、テーブル、ビュー、プロシージャ、トリガーといったデータベースで扱われるオブジェクト、SQLのデータ型、および制約といった概念が扱われる。そのとき核となるのは、リレーショナルモデルと、ファイルシステムや手続き型に基礎を持つ言語との考え方の違いである。私たちはまず、こうした伝統的な言語で身につけた考え方をいったん忘れて、まったく新しい観点で物事を見ることを要求される(SQLに限らず、何の分野であれ、これが一番難しい奥義なのだが)。第13章以降では、EXISTS、LIKE、結合、HAVING、ウィンドウ関数、CASE式といった、SQLの持つ強力な武器の多彩な応用方法を学んでいく。


 なお、本書ではいわゆるモデリングや正規化についてはほとんど触れられない。正規化については第9章で取り上げているが、主に理論的解説にとどまり、実践的なケーススタディなどは扱われない。また、トランザクションや同時実行制御についても、第2章で簡単に触れられるのみであるため、こうしたテーマについては別に適切な書籍にあたってもらいたい。


 また、本書は原則として標準SQL に準拠する構文で書かれているため、基本的には特定のDBMSに依存しないSQLを学ぶことができる。「基本的には」と留保を付けたのは、標準SQLに対する準拠のレベルは実装によってバラつきがあり、特定のDBMSではそのままの形では使えない構文も含まれているからだ。そのような場合は、適宜訳注にて説明を補っているので参考にしてもらいたい。願わくば、次の版ではこのような訳注の数が減ってほしいものだ。ちなみに、本書のサンプルコードをそのままの形で最も多く実行できる実装は、おそらくPostgreSQLであろう(翻訳時に動作確認環境としてPostgreSQL 9.1.1を使用した)。


 ただし、例外的にストアドプロシージャやファンクションについては、Oracle Database のPL/SQLによる構文を掲載している。この理由は、標準SQLによる構文はどの実装でも動作しないため、原著に掲載されているプロシージャやファンクションのサンプルコードを動かせる実装がなかったためである。そこで本書では、動かないコードを載せるよりは実際に動くコードのほうがよいと考え、シェアの高いDBMSであるOracle DatabaseのPL/SQLを採用した(悪いことに、プロシージャやファンクションの構文はDBMS間でもバラバラである)。


 最初に述べたように、本書はSQLの教科書としては疑いなく最高峰の水準である。だがそれだけに、本書を読み進めるのに難しさを感じる人もいるかもしれない。その場合は、あわせて読むことを推奨したい本がある。1つは、同じ著者による『SQLパズル 第2版』(翔泳社、2007)である。これは、さまざまなパズルを通じてSQLのテクニックを身につけるという、いわば「練習問題集」にあたる本である。もう1 つが、拙著『達人に学ぶ SQL徹底指南書』(翔泳社、2008)である。これは、もともと本書の理解を助けるための「副読本」として書いたものである。肝心の教科書の登場が一番遅れてしまったが、ともあれ、これで教科書、問題集、副読本が揃ったことになる。


 最後に、本書を買うかどうか迷っている人に対して、判断の指針を与えたい。もしパラパラとめくってみて、「これはちょっと、まだ歯が立たなそうだ」と感じたならば、いったん本書を棚に戻し力を蓄えてから戻ってくる、というのは賢明な判断である。著者も言うように、本書はお世辞にも初心者に優しい書き方はしていない。だが、もし本書の値段を見て躊躇しているならば、間違いなく本書は「買い」であると背中を押したい。というのも、見かけの値段に反して、実は本書は「安い」本だからだ。その理由は、本書をとことん読み込んでしまえば、あとは中途半端なSQLの参考書など1冊も読む必要がなくなるからだ。その点で、本書は非常に「コスパ」の良い本なのだ。

 本書が日本のデータベースエンジニアにとっても導きの書となることを祈っています。