新著が出ます:『達人に学ぶ SQL徹底指南書 第2版』

本日、新著が発売となります。本書の初版は処女作ということもあり、色々と書き手として未熟な部分も多く出てしまった本なのですが、幸運にも長い期間読んでいただいたことでこのたび改訂版の刊行にこぎつけることが出来ました。

さすがに10年経過すると内容も古くなっており、多くのコードをリバイスしています。特に初版刊行時にはまだサポートが不十分だったウィンドウ関数が、現在では主要なDBMSではほぼ利用できるようになったことを受けて、全面的にこれを採用しました。これにより性能と表現力を両立させるモダンなSQLコーディングが可能になったので、ぜひ本書でその素晴らしさを確認いていただければと思います。

以下に本書の前書きを引用しますので、購入の際の参考にしてください。

 本書の初版が刊行されてから、10年が経過しました。筆者にとって、初版は初めて書いた本、いわゆる処女作であり、自分の知見や文章がどのような受け取られ方をするのかまったく見当がつかないまま書いていました。幸運なことに、多くの読者の方から好意的に受けとめていただき、SQLの解説書としてはちょっとしたロングセラーとなりました。そうした支持をいただいことで、このたびの改訂につながったわけで、まずは二度目の機会をいただいたことに感謝いたします。


 本書が長い期間読まれ続けている最大の理由は、RDBSQLが長命を保っているからです。NoSQLなどの台頭はありながらも、RDBはいまだに多くのシステムの永続層におけるファーストチョイスであり、SQLはすたれるどころか、その直観的で優れたインターフェイスを武器に、職業プログラマやエンジニア以外のエンドユーザー層へも広がりを見せています。とはいえ、SQLも10 年という流れの中で大きな変貌を遂げました。かつては考えられなかったほどの大量データ処理を行なうことが求められるようになり、分析業務は一部の専門家だけのタスクではなくなったことで、SQLサイドもまた時代の要請に応えるために大幅な機能追加が行なわれました。本書でも、こうした最新動向を反映し、モダンなSQLプログラミングに対応するべくアップデートを行ないました。特に、初版ではDBMSのサポートが不十分だったため大きく取り上げることのできなかったウィンドウ関数を全面的に採用しています。


 初版を読んだことがないという方に向けて、本書の概要を説明すると、本書のコンセプトは「中級SQLプログラミング入門」です。実務でのSQLプログラミングの経験が半年から1年くらいある方を読者に想定しています。もっと身もふたもない言い方をすると、J.セルコの『プログラマのためのSQL』を読んでみたけど投げ出した、というあたりのレベルです(もともと本書の初版は、同書の解説書として書いたところもあります)。


 本書には、CASE式、ウィンドウ関数、外部結合、相関サブクエリ、HAVING句、EXISTS述語などSQLの多くの道具が登場しますが、これらの基本的な構文はおよそ把握している、使ったことがある、というくらいのレベルであれば十分に読み進められます。本書の第1部では、こうしたSQL の道具を1 章につき1 つ取り上げて、それらの便利な使い方を、サンプルケースを通じて学んでいくというスタイルを採っています。皆さんもぜひ、実際に手を動かしてサンプルコードを実行しながら学習してください。基本的には前から順番に読んでもらうことを想定していますが、すでによく知っている内容の章は飛ばしたり、興味ある章から読んでもかまいません。


 ところで本書にはもう1つ、想定する読者層があります。こちらはレベルによらず、「SQLとは何なのか」を知りたいと思っている方々を対象としています。このような表現は奇妙に聞こえるかもしれませんが、実際のところ、SQLというのは不思議な言語です。初級者のうちは、簡単なことを簡単に実現できて便利な言語だ、くらいにしか思わなかったのが、ちょっと深く理解しようとすると合理的には理解できない言語仕様に突き当たったり、少し複雑なことをやろうとすると妙に構文が難しくなったりといった、不可思議な事態に遭遇し始めます。なぜ、NULLにまつわるSQLの動作はこうも混乱しているのか? なぜ、行間比較に相関サブクエリのような難しい構文が必要なのか? なぜ、手続き型言語のようなループや変数といった便利な道具がないのか? なぜSQL では「すべての」を表現することがこれほど難しいのか?……


 こうした疑問は、ある程度の割り切りを持って「そういうものだ」と受け入れてしまえば、回避して進むこともできます。実際多くのエンジニアやプログラマは、SQLに対してぶつぶつ文句をいいながらも、「深く絡むと面倒なやつだが適当に距離を保っていればそこそこ便利な仕事上の知り合い」くらいの付き合い方をします。しかし、なかには「自分の使っている道具の成り立ちを知りたい」と思う人もいるでしょう。本書は、そのような好奇心を持ってしまった読者に対して、SQLの原理となっている仕組みや、この言語を作った人々が何を考えて現在のような形にしたのか、というバックグラウンドを掘り起こして伝えることを目指しています。本書の第2部は、このような、SQLという言語そのものにまつわる疑問に答えようとしています。もちろん、すべての疑問に答えきった、と言い切る自信はありませんが、1つの言語の本質を理解していくヒントは示せたのではないかと思います。


 本書が、読者のSQLプログラミングの上達に貢献することはもちろん、プログラミング言語という、ある種の文化的産物の深奥をのぞき込む面白さを感じてもらえることを祈っています。


 不可思議にも面白い、SQLの世界へようこそ。

既存の書籍の改訂を除けば、おそらく本書が、私がRDBSQLについて書く最後の本になると思います(そのあたりの事情については次回エントリで触れます)。

皆さんが楽しみながら上達するような本になっていれば幸いです。