nekoTheShadow’s diary

IT業界の片隅でひっそり生きるシステムエンジニアです(´・ω・`)

ジョー・セルコ著、ミック訳『SQLパズル 第2版 プログラミングが変わる書き方/考え方』を読んだ

honto.jp

年末年始やお盆休みやゴールデンウィークといった長期連休はまとまった時間がとりやすいということもあって、地元の関西に帰省しつつ、プログラミングや情報科学の分厚い本に取り組むようにしています。ただし今年のゴールデンウィークは3回目の緊急事態宣言真っ盛りということで、帰省はあきらめて、神奈川県のアパートで一人さみしく『SQLパズル 第2版 プログラミングが変わる書き方/考え方』を解いていました。実はこの本は2-3年前に買って以来、ずっと積読状態でした。ただ最近になってSQL力をもっと身に着けねばと思う機会があり、それでこの本に手を付けたというわけです。

この本ではSQLに関する実践的な問題が75問用意されています。パズルというと、いかにも数学の問題のような実務からかけ離れたものを想像するかもしれません。実際そういう問題もあるのですが、ほとんどが現実のシステム開発で直面しそうなものばかりで、かなり実践的な内容になっています。

紹介されている問題の種類は豊富で、複雑なSQLで解決するものから、テーブル設計の見直しを迫るものまで取りそろっています。またひとつの問題に対して、解答・アプローチ法が複数紹介されていて、自分で問題を解きつつ、答え合わせで紹介されている解答を読むと、自分のSQLやDBについての知識が広がっていくことが感じられます。

欠点をあげるとすると、出版年が2007年とやや古く、SQL-92準拠で書かれていることです。たとえば共通表式や再帰SQL、Window関数のようなSQL-92以降に標準SQLに導入された機能については記述がありません。これらを利用したアプローチについても知りたいという人は多いでしょう。むしろこういった機能を利用すれば、本書で問題とされているものがさほど問題とはならなかったり、簡単に解けてしまったりいうこともあります。

ただその欠点を差し置いても、本書はとても良い本ですし、内容も普遍的で、自分のSQL力は大きく向上したと感じています。自分の場合は、上述した「新しい機能」もばりばりに利用して、本書の問題に取り組みました。その自分なりの回答集は以下のGithubレポジトリで管理しています。内容は無保証ですが、何かの役に立つかもしれないので、リンクを張り付けておきますね。

github.com