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の基本
- コマンドラインからSQLを実行する
- プログラムからデータベースに接続する
- 条件付きINSERTコマンドを実行する
- データベースの更新
- SQLを利用してクロスワードパズルを解く
- 同じ計算を繰り返さない
- 2章 JOIN、UNION、VIEW
- 既存のクエリに手を付けずにデータ構造を変更する
- 行と列を絞り込む
- インデックスで絞り込む
- サブクエリをJOINに変更する
- 集計用のサブクエリをJOINに変更する
- 複雑なデータ更新を単純化する
- 適切なJOIN形式を選択する
- 組み合わせを作成する
- 3章 文字列の処理
- LIKEを使わずにキーワードを検索する
- 複数の列から文字列を検索する
- アナグラムを解く
- メールアドレスをソートする
- 4章 日付の処理
- 文字列を日付に変換する
- データの傾向をつかむ
- 日付単位でレポートを作成する
- 四半期レポートを作成する
- 第2火曜日を取得する
- 5章 数値の処理
- 行をまたいで乗算する
- 残高を求める
- JOINが返さない行も結果に含める
- 重なる範囲を特定する
- ゼロ除算を避ける
- COUNT関数を使わずに件数を数える
- 複数列の最大値を求める
- 集約された値をバラバラにする
- 「丸め誤差」に対処する
- 明細と小計を一度で取得する
- 中央値を求める
- 集計結果を図で表現する
- 2点間の距離を計算する
- 請求書と振込額の帳尻を合わせる
- ミスによる桁の入れ替わりを発見する
- 累進課税を適用する
- 順位を求める
- 6章 オンラインアプリケーション
- Webサイトをテーブルに取り込む
- SVGを使用してデータからグラフを作成する
- Webアプリケーションにページナビゲーションを追加する
- Microsoft. AccessからMySQLに接続する
- Webサーバのログを処理する
- データベースに画像を保存する
- SQLインジェクションの脆弱性とは
- SQLインジェクション攻撃を防ぐ
- 7章 さまざまなデータ構成
- 過去のデータも保存しておく
- 構造の異なるテーブルを結合する
- 行を列として表示する
- 列を行として表示する
- 矛盾するデータを削除する
- テーブルを非正規化する
- 外部データをインポートする
- 二人の仲を取り持つ
- 一意の連番を作成する
- 8章 小さいデータの格納
- データベースにパラメータを保存する
- ユーザごとのパラメータを定義する
- ユーザごとのパラメータリストを作成する
- 行単位でセキュリティを設定する
- テーブルを参照せずにクエリを実行する
- テーブルを使わずに行を生成する
- 9章 ロックとパフォーマンス
- 分離レベルを決定する
- 悲観的ロックを使用する
- 楽観的ロックを使用する
- トランザクションで暗黙的にロックする
- 送信ボタンの連続クリックに対処する
- データベース内で各処理を実行する
- クエリの実行結果を結合する
- 大量の行を取得する
- 指定件数の結果を取得する
- データの保存先としてファイルも利用する
- テーブルを比較して同期をとる
- 1対多形式のJOINが返すデータ量を減らす
- 大きなデータは圧縮する
- 10章 レポートの作成
- データのないカテゴリもピボットテーブルに含める
- データを範囲ごとに区切る
- 更新する行を特定する
- 「ケビン・ベーコンの6次」を表現する
- ディシジョンテーブルを作成する
- 連続値や欠測値を生成する
- 各グループの上位の値を取得する
- 列にカンマ区切りリストを保存する
- ツリーを横断する
- データベースでキューを利用する
- カレンダーを生成する
- サブクエリの抽出条件に2つの値を使う
- 5つの項目から3つを選択する
- 11章 ユーザと管理
- ユーザアカウントを実装する
- テーブル定義のエクスポートとインポート
- アプリケーションを配置する
- データベースユーザを自動作成する
- 一般ユーザと管理者を作成する
- 自動更新を実行する
- 行動監視用のログを記録する
- 12章 幅広いアクセス
- 匿名アクセスを許可する
- 長時間実行されているクエリに対処する
- ディスクを使い果たさないようにする
- ブラウザから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実践活用大事典よりこの本のすごさは、なんといってもレイアウト。これでわかんなかったらおまえクビ!ぐらいの勢いである。画像をPDFへのリンクにしてあるので、ぜひ一見のほどを。
一つ残念なのは、版型。このオライリーのデフォルト版型って、本棚への納まりがとてもわるいのだ。これならA4にしてもらうか、ページ数を増やしてでもHacksのようにA5にしてもらう方がいい。しかしこのわかりやすすぎさ、往年の「できる」シリーズを思い起こす。
というわけで、習熟度順に並べると、
- SQL実践活用大事典
- 逆算式SQL教科書
- SQL Hacks
という順番になる。
しかし本当のところ、私が一番驚いているのは、ここまでSQLが普及したことそのものだったりする。SQL以外にもデータベースというのはいくらでもあるし、現在でもSQLでは間に合わないような超速が要求されたり、逆に資源がカツカツでとてもSQLなどというぜいたくはしていられないという場面もあるのだが、そういった領域はSQLエンジンの高性能化やmemcachedなどの中間ソリューションの登場でどんどんカバーされつつある。それがなければ、PHPの普及もありえなかっただろう。
言語内言語としてこれだけ使われるようになったSQL。そうするともう一つの言語内言語、正規表現が気になる。しかしこちらの方はSQLと違って、現在のところ「フクロウ本」の一人勝ちのように思える。誰か書かない?
Dan the non-Standard Query webLogger
この記事へのトラックバックURL
Dの字の方が書いたらどうでしょう
いや割とマジで
# 言い出しっぺの法則


