まずは「SQLパズル 第2版」です。これは翻訳者であるミックさんから献本していただいたものです(しかもサイン付き)。
内容はタイトル通り、用意された問題に対してSQLを回答するパズル本で、全部で75問用意されています。SQLの基礎的な技術力を試されるような内容や、現実でよくあるケース(列と行の入れ替えとか)、また本来的な使い方ではないSQLのパズルまで非常にバリエーション豊かに用意されています。
また、回答が複数個用意されているのも良いところです。SQLの書き方は本当に色々なパターンがありえますので、多様な書き方を見るだけでも勉強になります。問題の難易度は全体的に高く、SQL上級者を自認している人でも歯ごたえのあるものが揃っています。私は多くの問題で回答を見るまでSQLの見当がつきませんでした。
掲載されているSQLは、基本的に標準SQL準拠のものが多いので多くがDB2で実行できます。DB2で試す上で一番引っかかるのが、第一問の時間/日時の計算問題です。
(2007.12.05追記:コメント欄のとんくまさんにご指摘いただいた内容に修正しました)
例えばDB2には、日時の差分を表すINTERVALがありません。無いのにどうやって差を計算するのかというとDAYS関数を使用するのが簡単です。(DAYS関数は西暦1年1月1日を1として順に数えた日数を返す関数です)
本の例)CHECK((end_date - start_date) = INTERVAL '359' DAY)
DB2の例)CHECK (DAYS(end_date) - DAYS(start_date) = 359)
また日時から年だけなどを取り出すEXTRACTもありません。代わりにYEAR()やMONTH(),DAY()といった関数が用意されています。
本の例)EXTRACT(MONTH FROM end_date)
DB2の例)MONTH(end_date)
このように時刻計算の周辺だけ注意しておけば、DB2で試しながら読む事ができると思います。
SQLは入門をうたう本が非常にたくさん出版されていますが、その次の段階を解説してくれる本は非常に少ないので、このような内容の本が出版された事自体うれしく思っています。
元々この本の評価は第一版の時点で折り紙つきでしたが、それに加えて第二版で多くの問題が増量された上に翻訳者のミックさんにより原著の間違いが多く修正され、より完成度の高い本になっています。
SQLの実力を付けたい、勉強したいと思っている人には非常にお勧めです。