SQLパズル 第2版 プログラミングが変わる書き方/考え方(ジョー・セルコ ミック ミック)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. SQLパズル 第2版 プログラミングが変わる書き方/考え方

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


翻訳
原著

形式:
書籍
発売日:
ISBN:
9784798114132
定価:
3,080(本体2,800円+税10%)
仕様:
B5変・304ページ
カテゴリ:
データベース
キーワード:
#データ・データベース,#ネットワーク・サーバ・セキュリティ,#システム運用,#開発環境

目の覚めるような超高等テクニック

本書では、“ほかに類を見ない”高度な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軒行こう―座標と距離を扱う

付属データはこちら

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

追加情報はありません。
この商品の「よくある質問」はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2015年01月22日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 009
上部の囲み内
8刷
cal_type :「平日」「週末」「祝日」といった日の種類
date_type :「平日」「週末」「祝日」といった日の種類
2015.01.22
1刷 052
SELECT文の5行目
2刷
ELSE 'C1' END
ELSE 'CL' END
2009.03.17
1刷 178
[パズル42]問題文:<br>先頭のCREATE TABLE文
2刷
fish_name CHAR(20) NOT NULL,
fish_name VARCHAR(20) NOT NULL,
2007.11.01
1刷 204
[パズル48]答えその4:<br>先頭のSQL文
2刷
WHILE increment < maxnum     DO INSERT INTO Sequence         SELECT seq + increment FROM Sequence;               SET increment = increment + increment;     END WHILE;
WHILE increment < maxnum     DO INSERT INTO Sequence         SELECT seq + increment FROM Sequence;               SET increment = increment + increment; END WHILE;
END;
2007.11.01
1刷 213
[パズル50]答えその5:<br>2つ目のSQL文
2刷
HAVING (SELECT SUM(DISTINCT                               CASE WHEN category = :cat_1                                       THEN 1                                       WHEN category = :cat_2                                       THEN 2                                       WHEN category = :cat_3                                       THEN -3 ELSE NULL END)) = 3;
HAVING (SUM(DISTINCT                     CASE WHEN category = :cat_1                             THEN 1                             WHEN category = :cat_2                             THEN 2                             WHEN category = :cat_3                             THEN -3 ELSE NULL END)) = 3;
2007.11.01
1刷 251
[パズル61]答えその1:<br>見出し
2刷
答えその1
答えその3
2007.11.01
1刷 267
[パズル64]答えその2:<br>「--2次元の場合:第2案」のSQL文<br>(7行目)
2刷
OR (B2.high BETWEEN B1.low and B1.high));

※末尾のセミコロンが不要
OR (B2.high BETWEEN B1.low and B1.high))
2007.11.01
1刷 302
[パズル70]答えその3:<br>2つ目のCREATE VIEW文
2刷
CREATE VIEW StockTrends (ticker_sym, sale_date, closing_price, trend) AS SELECT H1.ticker_sym, H1.sale_date, H1.closing_price,                   COALESCE(SIGN(MAX(H2.closing_price)                   - H1.closing_price), 0) AS trend         FROM StockHistory AS H1                   LEFT OUTER JOIN StockHistory AS H2                   ON H1.ticker_sym = H2.ticker_sym                   AND H2.sale_date < H1.sale_date       GROUP BY H1.ticker_sym, H1.sale_date, H1.closing_price;
CREATE VIEW StockTrends (ticker_sym, sale_date, closing_price, trend) AS SELECT ticker_sym, sale_date, closing_price,             SIGN(closing_price -                 (SELECT closing_price                     FROM StockHistory H2                   WHERE H1.ticker_sym = H2.ticker_sym                       AND H2.sale_date =                             (SELECT MAX(H3.sale_date)                                 FROM StockHistory H3                               WHERE H2.ticker_sym = H3.ticker_sym                                   AND H3.sale_date < H1.sale_date)))
            AS trend   FROM StockHistory H1;
2007.11.01
1刷 302
[パズル70]答えその4:<br>CREATE VIEW文<br>(7行目)
2刷
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)), )
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)), 0)
2007.11.01

感想・レビュー

さん

2019-05-16

この本マジでよかったです、一日一問ペースで読んでたんでかなり時間掛かっちゃったけど。 様々な業務パターンにおけるベストプラクティスだけでなくてアンチパターン、そして別解も登場する所がいい。一番使い勝手良さそうで身についた部分はスカラサブクエリだな。業務でSQL使ってる人(まぁエンジニアだろうけど)は一度読んどくと世界広がります。再読予定。

のぶ さん

2015-03-13

SQLはネットの裏側で我々の生活を支える重要なコンピュータ言語(プログラミング言語と呼ぶかどうかは保留するとして)です。タイトルにパズルと謳われてますが、なんと本当にパズルでした。パズルを題材にとかパズル仕立てで言語を学びましょう、というスタンスの本(ならばたまに見かけますが)ではなく、パズルです。なのでSQLをある程度理解していても、時間と心の余裕がなければ入り込むことができないハードさを持っています。が、(手続き型でなく)宣言的なパラダイムでどこまでできるか見極めようという志に溢れた、興味深い本です。

HANA さん

2014-05-22

SQLの技術を発展させるためのクイズ本。クイズの内容はあるデータからある形で取り出す場合のSQL文を考えるもの。最低限SQLの機能を知っていれば解説をしっかり読んで動作を試してみれば理解出来るかも。