2008年02月03日 04:00 [Edit]

書評x3 - SQL本三大対決

404 Blog Not Found:この発想はなかった - 書評 - 逆算式SQL教科書を書いたら、「いや、うちも」とばかりにどっさりSQL本が来た。

まずオライリー・ジャパンの矢野様からは、「STATISTICS HACKS(和訳)」と一緒に「SQLクックブック」と「SQL Hacks 」を、そしてC&R研究所の吉成様からは「SQL実践活用大事典 」を献本いただいた。

これだけ頂くと、まとめないわけには行かないだろうということで、まとめてみた。


まず、「SQLクックブック」。こちらは申し訳ないのだけど、かなり期待はずれ。確かに「逆算式SQL教科書」よりは用例も多かったのだけど、Cookbookを特徴づけていた綿密なDiscussionがスカスカ。他ならとにかく、オライリーでこれはいただけない。

それを補ってあまりあったのが、「SQL Hacks」。これはちょー使える。

目次 - oreilly.co.jp -- Online Catalog: SQL Hacksより
訳者まえがき
クレジット
はじめに
1章 SQLの基本
  1. コマンドラインからSQLを実行する
  2. プログラムからデータベースに接続する
  3. 条件付きINSERTコマンドを実行する
  4. データベースの更新
  5. SQLを利用してクロスワードパズルを解く
  6. 同じ計算を繰り返さない
2章 JOIN、UNION、VIEW
  1. 既存のクエリに手を付けずにデータ構造を変更する
  2. 行と列を絞り込む
  3. インデックスで絞り込む
  4. サブクエリをJOINに変更する
  5. 集計用のサブクエリをJOINに変更する
  6. 複雑なデータ更新を単純化する
  7. 適切なJOIN形式を選択する
  8. 組み合わせを作成する
3章 文字列の処理
  1. LIKEを使わずにキーワードを検索する
  2. 複数の列から文字列を検索する
  3. アナグラムを解く
  4. メールアドレスをソートする
4章 日付の処理
  1. 文字列を日付に変換する
  2. データの傾向をつかむ
  3. 日付単位でレポートを作成する
  4. 四半期レポートを作成する
  5. 第2火曜日を取得する
5章 数値の処理
  1. 行をまたいで乗算する
  2. 残高を求める
  3. JOINが返さない行も結果に含める
  4. 重なる範囲を特定する
  5. ゼロ除算を避ける
  6. COUNT関数を使わずに件数を数える
  7. 複数列の最大値を求める
  8. 集約された値をバラバラにする
  9. 「丸め誤差」に対処する
  10. 明細と小計を一度で取得する
  11. 中央値を求める
  12. 集計結果を図で表現する
  13. 2点間の距離を計算する
  14. 請求書と振込額の帳尻を合わせる
  15. ミスによる桁の入れ替わりを発見する
  16. 累進課税を適用する
  17. 順位を求める
6章 オンラインアプリケーション
  1. Webサイトをテーブルに取り込む
  2. SVGを使用してデータからグラフを作成する
  3. Webアプリケーションにページナビゲーションを追加する
  4. Microsoft. AccessからMySQLに接続する
  5. Webサーバのログを処理する
  6. データベースに画像を保存する
  7. SQLインジェクションの脆弱性とは
  8. SQLインジェクション攻撃を防ぐ
7章 さまざまなデータ構成
  1. 過去のデータも保存しておく
  2. 構造の異なるテーブルを結合する
  3. 行を列として表示する
  4. 列を行として表示する
  5. 矛盾するデータを削除する
  6. テーブルを非正規化する
  7. 外部データをインポートする
  8. 二人の仲を取り持つ
  9. 一意の連番を作成する
8章 小さいデータの格納
  1. データベースにパラメータを保存する
  2. ユーザごとのパラメータを定義する
  3. ユーザごとのパラメータリストを作成する
  4. 行単位でセキュリティを設定する
  5. テーブルを参照せずにクエリを実行する
  6. テーブルを使わずに行を生成する
9章 ロックとパフォーマンス
  1. 分離レベルを決定する
  2. 悲観的ロックを使用する
  3. 楽観的ロックを使用する
  4. トランザクションで暗黙的にロックする
  5. 送信ボタンの連続クリックに対処する
  6. データベース内で各処理を実行する
  7. クエリの実行結果を結合する
  8. 大量の行を取得する
  9. 指定件数の結果を取得する
  10. データの保存先としてファイルも利用する
  11. テーブルを比較して同期をとる
  12. 1対多形式のJOINが返すデータ量を減らす
  13. 大きなデータは圧縮する
10章 レポートの作成
  1. データのないカテゴリもピボットテーブルに含める
  2. データを範囲ごとに区切る
  3. 更新する行を特定する
  4. 「ケビン・ベーコンの6次」を表現する
  5. ディシジョンテーブルを作成する
  6. 連続値や欠測値を生成する
  7. 各グループの上位の値を取得する
  8. 列にカンマ区切りリストを保存する
  9. ツリーを横断する
  10. データベースでキューを利用する
  11. カレンダーを生成する
  12. サブクエリの抽出条件に2つの値を使う
  13. 5つの項目から3つを選択する
11章 ユーザと管理
  1. ユーザアカウントを実装する
  2. テーブル定義のエクスポートとインポート
  3. アプリケーションを配置する
  4. データベースユーザを自動作成する
  5. 一般ユーザと管理者を作成する
  6. 自動更新を実行する
  7. 行動監視用のログを記録する
12章 幅広いアクセス
  1. 匿名アクセスを許可する
  2. 長時間実行されているクエリに対処する
  3. ディスクを使い果たさないようにする
  4. ブラウザからSQLを実行する

見ての通り、ハックはかなり実践的なものばかり。言語系のHacksだと、「こんなハック知っててどんな意味があるんだろwww」というものも結構あるのだけど、こちらはNo NonsenseなSQL中級者向けの一冊に仕上がっている。またHacks本だけあって、考察もゆたかで、実例も「生SQL」だけでなく、PerlのDBI経由のコードサンプルもある。満足度あっぷっぷである。こうなると、「SQL Cookbook」のすかすかさが....すみません、ちょっとしつこくて。でもニッチはきちんと分けた方がいいと思う。

その逆に、基本的なことを徹底的にこれでもかとわかりやすく書いたのが、「SQL実践活用大事典」。正確な書名は「仕事力を10倍UPする! SQL実践活用大事典 Oracle/SQL Server/DB2/PostgreSQL/MySQL/Access対応」とかなりしつこいのだけど、それだけの価値が本書にはある。

目次 - 仕事力を10倍UPする!SQL実践活用大事典より
第1章 プロが教える表示の技
第2章 プロが教える集計の技
第3章 プロが教える抽出の技
第4章 プロが教える帳票出力の技
第5章 プロが教える登録/修正/削除の技
第6章 プロが教えるテーブルの新規作成/削除/ビューの作成
sample

この本のすごさは、なんといってもレイアウト。これでわかんなかったらおまえクビ!ぐらいの勢いである。画像をPDFへのリンクにしてあるので、ぜひ一見のほどを。

一つ残念なのは、版型。このオライリーのデフォルト版型って、本棚への納まりがとてもわるいのだ。これならA4にしてもらうか、ページ数を増やしてでもHacksのようにA5にしてもらう方がいい。しかしこのわかりやすすぎさ、往年の「できる」シリーズを思い起こす。

というわけで、習熟度順に並べると、

  1. SQL実践活用大事典
  2. 逆算式SQL教科書
  3. SQL Hacks

という順番になる。

しかし本当のところ、私が一番驚いているのは、ここまでSQLが普及したことそのものだったりする。SQL以外にもデータベースというのはいくらでもあるし、現在でもSQLでは間に合わないような超速が要求されたり、逆に資源がカツカツでとてもSQLなどというぜいたくはしていられないという場面もあるのだが、そういった領域はSQLエンジンの高性能化やmemcachedなどの中間ソリューションの登場でどんどんカバーされつつある。それがなければ、PHPの普及もありえなかっただろう。

言語内言語としてこれだけ使われるようになったSQL。そうするともう一つの言語内言語、正規表現が気になる。しかしこちらの方はSQLと違って、現在のところ「フクロウ本」の一人勝ちのように思える。誰か書かない?

Dan the non-Standard Query webLogger


この記事へのトラックバックURL

この記事へのトラックバック
技術評論社書籍編集部池本さんより献本御礼。 入門正規表現 岩谷宏 初出2008.03.05;販売開始まで掲載 404 Blog Not Found:書評x3 - SQL本三大対決言語内言語としてこれだけ使われるようになったSQL。そうするともう一つの言語内言語、正規表現が気になる。しかし...
get($one) if $you =~ /regexp user/;# - 書評 - 入門正規表現【404 Blog Not Found】at 2008年03月05日 22:57
オライリー矢野様より献本御礼。 Head First SQL Lynn Beighley 佐藤 直生監訳 / 松永多苗子訳 これはすごい。ここまで分かりやすく、面白く、そしてきちんと完結している入門書は、SQLの入門書に限らず前代未聞。 オライリー、おそるべし。
SELECT * from sqlbooks WHERE fun = 1 -- 書評 - Head First SQL【404 Blog Not Found】at 2008年06月03日 19:20
MS-Access(マイクロソフト・アクセス)を使ってSQLの勉強をするのが一番お手軽だと思います。しかしながら、MS-Accessは無料ではありません。おまけに、ワードとエクセルと違ってプレインストールされてることも少ないです。そこで、考えた挙句、SQLite3を用いて、SQLの勉強...
[SQL001]SQL(DB)入門の準備編【猫とプログラミング】at 2008年09月13日 20:25
書評リンク - SQL Hacks ―データベースを自由自在に操るテクニック
SQL Hacks ―データベースを自由自在に操るテクニック【書評リンク】at 2008年10月04日 17:05
この記事へのコメント
>正規表現
Dの字の方が書いたらどうでしょう
いや割とマジで
# 言い出しっぺの法則
Posted by mogera at 2008年02月03日 15:05
結局、正規表現は処理系に依存する部分が多いので、最新の情報を求めてWebを彷徨うことになりそうな悪寒。
Posted by takano32 at 2008年02月03日 18:33
難しそうですね
Posted by みき at 2008年02月03日 19:46