<< DB2 9.5小ネタ - ファイルシステムキャッシュ不使用がデフォルトに | main | データベースパフォーマンスアップの教科書 基本原理編 >>

SQLパズル 第2版 プログラミングが変わる書き方/考え方

最近は読んだ本を全然紹介していなかったので、ちょっとまとめて紹介しようと思います。
まずは「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の実力を付けたい、勉強したいと思っている人には非常にお勧めです。

コメント
おー! 第二版ですね。早速買わねば……
  • 「た」
  • 2007/12/03 11:46 AM
> 本の例)CHECK((end_date - start_date) = INTERVAL '359' DAY)
> DB2の例)CHECK ((end_date - start_date) = 359)
Celkoの本が見当たらないので見当違いのコメントになったら申しわけ有りませんが。。。
end_date 及び start_dateのデータ・タイプは DATEと思いますが、
そうであるならば、end_date - start_dateの結果は、yyyymmdd.の形式のDECIMAL(8,0)である date durationとなるので、
日数の差を求める場合は、DAYS(end_date) - DAYS(start_date) とすべきと考えます。
或いは、
(end_date - start_date) = INTERVAL '359' DAY
の代わりに
end_date = start_date + 359 DAYS
としても良いと思います。
  • とんくま
  • 2007/12/05 4:12 PM
とんくまさん、コメントありがとうございます。

本の定義はDATE型です、ですのでご指摘どおり
そのまま引き算だとDECIMAL(8,0)になってしまいますね。

SQLエラーにならないので、ちゃんと確認していませんでした。
ご指摘感謝です。

> end_date = start_date + 359 DAYS

こちらの方が書き方としては美しいですねえ。
  • SIM
  • 2007/12/05 11:11 PM
丁寧な紹介をありがとうございます。
SIMさんは多分、日本で最もこの本を読み込んでいる読者じゃないですか(笑)。
> SIMさんは多分、日本で最もこの本を読み込んでいる読者じゃないですか

いえいえ、読んでもまだちゃんと理解できないところがたくさんあります。自分のSQL力不足を感じます。
  • SIM
  • 2007/12/08 1:05 PM
コメントする(emailやurlは無記入でもOKです)









この記事のトラックバックURL (※SPAM対策のため、元記事のPermalink URLへのリンクがないものはトラックバックされません)
トラックバック
著書
「AWSではじめるデータレイク」
データレイクの本を書きました(共著)
DB2cover_small.jpg
DB2の管理方法を解説した本を書きました。
ad
無料のDb2 Community Edition
リンク集
about this site
recommend
プログラマのためのSQL 第4版
プログラマのためのSQL 第4版 (JUGEMレビュー »)
ジョー・セルコ
名著が第4版として、内容拡充されて発売されました。SQLの考え方を基礎からしっかり学習したい方にお勧めです。
recommend
recommend
WebSphere Application Server 構築・運用バイブル 【WAS8.5/8.0/7.0対応】
WebSphere Application Server 構築・運用バイブル 【WAS8.5/8.0/7.0対応】 (JUGEMレビュー »)
串宮 平恭,達見 圭介,田中 孝清,原口 知子,福崎 哲郎,盛林 哲
WebSphere Application Serverの運用管理本が出ました!WAS v7〜v8.5まで幅広いバージョンに対応しています。
recommend
recommend
Effective Java 第2版 (The Java Series)
Effective Java 第2版 (The Java Series) (JUGEMレビュー »)
Joshua Bloch
すべてのJava開発者必読の書が大幅改訂されて第2版になりました!。
文法などは解説していませんが、Java言語でプログラムを書くにはどういう事に気をつけるべきかという事が非常に端的に、かつ明確な理由とともに解説されています。
第2版ではJava SE 6対応がなされ、第1版で提案してJava SEに取り込まれた部分は整理され、新しい機能であるGenericsやアノテーションについての記述が多数追加されています。以前に増してお勧めできる書になりました。
まだ読んだことが無いJava開発者はぜひ読んでみてください。
recommend
 (JUGEMレビュー »)

基礎的なSQLは書けるようになったけど、今ひとつSQLのルールになんとなくしっくりこない、腑に落ちない。そんな人にお勧めの入門書です。SQLの根底に流れる基本的な考え方をやさしく解説してくれています。(レビューはこちら)
recommend
SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方 (JUGEMレビュー »)
ジョー・セルコ,Joe Celko
SQL入門を終えて、SQL中級/上級者になりたいと考えている方にぴったりのトレーニング本です(レビューはこちら)
recommend
XML-DB開発 実技コース
XML-DB開発 実技コース (JUGEMレビュー »)
下佐粉 昭,野間 愛一郎,久保 俊彦,高橋 賢司
XML-DBのやさしい入門書です。XMLの基礎から、XPath,XQueryの解説、設計の基礎、Javaでのプログラミング等盛りだくさんの内容です。
recommend
データベースパフォーマンスアップの教科書 基本原理編
データベースパフォーマンスアップの教科書 基本原理編 (JUGEMレビュー »)
エンコアコンサルティング
DBMSの基本的な内部構成、動作についての考え方をやさしく解説してくれています。(レビューはこちら)
recommend
メインフレーム実践ハンドブック z/OS(MVS),MSP,VOS3のしくみと使い方
メインフレーム実践ハンドブック z/OS(MVS),MSP,VOS3のしくみと使い方 (JUGEMレビュー »)
神居 俊哉
メインフレームの技術について、基礎概念から、実践的な使い方までを網羅した初めての解説書です。
recommend
 (JUGEMレビュー »)

CSSの概念/基礎をしっかりと解説してくれるCSS入門書。サイトへの実践的な適用方法も解説されています(レビューはこちら)
recent entries
categories
recent comments
  • Db2 11.5 Base Edition の標準サポート提供は2025年9月30日まで (Standard EditionやAdvanced Editionとは別です)
    sim (02/09)
  • Db2 11.5 Base Edition の標準サポート提供は2025年9月30日まで (Standard EditionやAdvanced Editionとは別です)
    oda (02/07)
  • ORDER BYでNULLを最小に持ってくるには
    通りすがり (03/15)
  • Db2をAWS上に構築する際のヒント&TIPS (2021年2月版)
    Jiyong, Jung (12/09)
  • DB2小ネタ - ALLOW REVERSE SCANS
    meijik (06/24)
  • DB2の正式名称が"Db2"に変更。dashDB for TransactionもDb2 on Cloudに名称変更
    Taco (06/24)
  • DB2でインスタンスを追加で作成するには
    SIM (03/18)
  • DB2でインスタンスを追加で作成するには
    晩衛 (03/17)
  • SQLの学習サイト
    SIM (03/26)
  • SQLの学習サイト
    DB (03/25)
recent trackbacks
archives