本書では、“ほかに類を見ない”高度なSQLプログラミングテクニックを、全75問の楽しいパズルを通じて解説します。パズルの主な題材は販売管理や売上ランキング、財務計算といった日常業務からとられ、標準規格SQL-89/92/99ベースの解答SQL文は非常に実践的。斬新なアイデアと知的な魅力にもあふれています。また、紹介されるテクニックはRDBの本質である集合論/集合演算をしっかり踏まえたもので、身に付いたコーディングスキルは幅広く応用が効きます。現場のDBエンジニアやアプリケーション開発者に必携の1冊です。
パズル1 会計年度テーブル―範囲外の日付を入力しないための制約
パズル2 欠勤―条件付きのUPDATE/DELETE
パズル3 忙しい麻酔医―重複する期間の抽出(その1)
パズル4 入館証―UPDATEで相関サブクエリを使用する
パズル5 アルファベット―あいまい検索と正規表現検索
パズル6 ホテルの予約―重複する期間の抽出(その2)
パズル7 ファイルのバージョン管理―順序を入れ子集合で表す
パズル8 プリンタの割り当て―値の範囲に応じた結果を返す
パズル9 席空いてますか?―テーブルサイズを最小限に抑える
パズル10 年金おくれよ―連続と直近を表現する
パズル11 作業依頼―HAVING句の力(その1)
パズル12 訴訟の進行状態―最大値の集合からその最小値を取り出す
パズル13 2人かそれ以上か、それが問題だ―CASE式の中に集約関数を組み込む(その1)
パズル14 電話とFAX―外部結合の上手な使いこなし
パズル15 現在の給料と昇給前の給料―極値関数(MAX/MIN)の一般化
パズル16 主任とアシスタント―参照整合性制約の正しい設定
パズル17 人材紹介会社―関係除算と標準形
パズル18 ダイレクトメール―行同士を比較してDELETEする
パズル19 セールスマンの売上ランキング―上位3位を取り出す
パズル20 テストの結果―HAVING句の力(その2)
パズル21 飛行機と飛行士―関係除算の使い方/考え方
パズル22 大家の悩み―複雑な外部結合(その1)
パズル23 雑誌と売店―手続き型から宣言型へ考え方を切り換える(その1)
パズル24 10個のうち1つだけ―擬似配列の扱い方
パズル25 マイルストーン―行と列を入れ替える
パズル26 DFD―存在しない組み合わせを見つける
パズル27 等しい集合を見つける―集合の相等性チェック
パズル28 正弦関数を作る―内挿法を行う
パズル29 最頻値を求める―HAVING句の力(その3)
パズル30 買い物の平均サイクル―過去の直近の日付を求める
パズル31 すべての製品を購入した顧客―関係除算の応用
パズル32 税金の計算―木構造/階層構造を扱う
パズル33 機械の平均使用コスト―複雑な条件での集約計算(平均値)
パズル34 コンサルタントの請求書―複雑な条件での集約計算(期間データ)
パズル35 在庫調整―再帰集合で累計を求める
パズル36 1人2役―CASE式の中に集約関数を組み込む(その2)
パズル37 移動平均―行同士を比較するSELECT文
パズル38 記録の更新―行同士を比較してUPDATEする
パズル39 保険損失―列持ちから行持ちへ
パズル40 序列―自己結合で順列を作る
パズル41 予算―複雑な外部結合(その2)
パズル42 魚のサンプリング調査―存在しないデータの集計
パズル43 卒業―CASE式の高度な応用
パズル44 商品のペア―順列から組み合わせに変換する
パズル45 ペパロニピザ―期間別合計を求める
パズル46 販売促進―期間内での最大値
パズル47 座席のブロック―CHECK制約の中でサブクエリを使う
パズル48 非グループ化―GROUP BYの逆演算
パズル49 部品の数―データを等分割する
パズル50 3分の2―GROUP BYの効果とありがたみ
パズル51 予算と実支出の比較―集約と外部結合の合わせ技
パズル52 部署の平均人数―2段階の集約
パズル53 テーブルを列ごとに折りたたむ―自己結合とCASE式(その1)
パズル54 隠れた重複行―自己結合とCASE式(その2)
パズル55 競走馬の入賞回数―外部結合で行と列を変換
パズル56 ホテルの部屋番号―連番を入れていくUPDATE文
パズル57 欠番探し バージョン1―集合指向言語で数列を扱う(その1)
パズル58 欠番探し バージョン2―集合指向言語で数列を扱う(その2)
パズル59 期間を結合する―重複する期間をまとめる
パズル60 バーコード―手続き型から宣言型へ考え方を切り換える(その2)
パズル61 文字列をソートする―ループを使わないでソート
パズル62 レポートの整形―結果を列数固定で表示する
パズル63 連続的なグルーピング―結合条件でサブクエリを実行する
パズル64 ボックス―多次元の重複範囲を見つける
パズル65 製品の対象年齢の範囲―範囲の合算と網羅性チェック
パズル66 数独パズル―2次元配列を使う
パズル67 安定な結婚―手続き型言語と宣言型言語の違いを知る
パズル68 バスを待ちながら―時間データの扱い方(その1)
パズル69 後入れ先出しと先入れ先出し―部分和問題の解き方
パズル70 株価の動向―相関サブクエリで行同士を比較する
パズル71 計算―自己結合でクエリの見通しをよくする
パズル72 サービスマンの予約管理―時間データの扱い方(その2)
パズル73 データのクリーニング―COALESCE関数で擬似配列を扱う
パズル74 導出テーブルを減らせ―複数の外部結合を効果的に使う
パズル75 もう1軒行こう―座標と距離を扱う
湊 さん
2019-05-16
この本マジでよかったです、一日一問ペースで読んでたんでかなり時間掛かっちゃったけど。 様々な業務パターンにおけるベストプラクティスだけでなくてアンチパターン、そして別解も登場する所がいい。一番使い勝手良さそうで身についた部分はスカラサブクエリだな。業務でSQL使ってる人(まぁエンジニアだろうけど)は一度読んどくと世界広がります。再読予定。
のぶ さん
2015-03-13
SQLはネットの裏側で我々の生活を支える重要なコンピュータ言語(プログラミング言語と呼ぶかどうかは保留するとして)です。タイトルにパズルと謳われてますが、なんと本当にパズルでした。パズルを題材にとかパズル仕立てで言語を学びましょう、というスタンスの本(ならばたまに見かけますが)ではなく、パズルです。なのでSQLをある程度理解していても、時間と心の余裕がなければ入り込むことができないハードさを持っています。が、(手続き型でなく)宣言的なパラダイムでどこまでできるか見極めようという志に溢れた、興味深い本です。
HANA さん
2014-05-22
SQLの技術を発展させるためのクイズ本。クイズの内容はあるデータからある形で取り出す場合のSQL文を考えるもの。最低限SQLの機能を知っていれば解説をしっかり読んで動作を試してみれば理解出来るかも。