SQLクックブック 第2版 ―データベースエキスパート、データサイエンティストのための実践レシピ集

Book description

トップデータサイエンティストと統計のエキスパートによる、実践に役立つSQLのレシピ集。第1版を全面的にアップデートし、さらにデータサイエンティスト向けのレシピを追加、補強しています。巨大医療コングロマリットで長年データ分析とデータベースの特性評価を行っている著者たちの経験に基づき、SQLを使う上でよく遭遇する問題と、広く使われているMySQL、Oracle、PostgreSQL、SQL Server、Db2による解決策を提示。各データベースの持つ長所と短所、特性などもわかるため、データベースの導入や変更を検討する際の資料としての利用にも役立ちます。逆引きリファレンスとして常に手元に置いておきたい一冊です。

Table of contents

  1. 大扉
  2. 原書大扉
  3. クレジット
  4. 謝辞
  5. はじめに
    1. 本書の対象読者
    2. 本書に含まれていない項目
    3. プラットフォームとバージョン
    4. 本書で使うテーブル
    5. 本書における規約
    6. 連絡先
    7. 第2版の謝辞
    8. 第1版の謝辞
  6. 1章 レコードの取得
    1. レシピ1.1 テーブルからすべての行と列を取得する
    2. レシピ1.2 テーブルから行の一部を取得する
    3. レシピ1.3 複数の条件を満たす行を取得する
    4. レシピ1.4 テーブルから列の一部を取得する
    5. レシピ1.5 列に意味のある名前を付ける
    6. レシピ1.6 WHERE句の中でエイリアス化された列を参照する
    7. レシピ1.7 列値を連結する
    8. レシピ1.8 SELECT文で条件ロジックを使う
    9. レシピ1.9 返す行数を制限する
    10. レシピ1.10 テーブルからn個のランダムなレコードを返す
    11. レシピ1.11 NULLを探す
    12. レシピ1.12 NULLを実際の値に変換する
    13. レシピ1.13 パターンを検索する
    14. まとめ
  7. 2章 クエリ結果のソート
    1. レシピ2.1 クエリ結果を指定の順序で返す
    2. レシピ2.2 複数のフィールドでソートする
    3. レシピ2.3 部分文字列でソートする
    4. レシピ2.4 英数字の混合データをソートする
    5. レシピ2.5 ソート時にNULLを扱う
    6. レシピ2.6 データ依存のキーに対してソートする
    7. まとめ
  8. 3章 複数テーブルの扱い
    1. レシピ3.1 ある行セットを別の行セットの上にスタックする
    2. レシピ3.2 関連する行を組み合わせる
    3. レシピ3.3 2つのテーブルに共通する行を取得する
    4. レシピ3.4 テーブルAからテーブルBには存在しない値を取得する
    5. レシピ3.5 テーブルAからテーブルB内に対応する行がない行を取得する
    6. レシピ3.6 他の結合を妨げずにクエリに結合を追加する
    7. レシピ3.7 2つのテーブルが同じデータを持つかどうかを判断する
    8. レシピ3.8 直積を特定して回避する
    9. レシピ3.9 集約の使用時に結合を実行する
    10. レシピ3.10 集約の使用時に外部結合を実行する
    11. レシピ3.11 複数テーブルから欠損データを返す
    12. レシピ3.12 演算や比較でNULLを使う
    13. まとめ
  9. 4章 挿入、更新、削除
    1. レシピ4.1 新しいレコードを挿入する
    2. レシピ4.2 デフォルト値を挿入する
    3. レシピ4.3 デフォルト値をNULLにオーバーライドする
    4. レシピ4.4 別のテーブルに行をコピーする
    5. レシピ4.5 テーブル定義をコピーする
    6. レシピ4.6 一度に複数のテーブルに挿入する
    7. レシピ4.7 特定の列への挿入をブロックする
    8. レシピ4.8 テーブル内のレコードを変更する
    9. レシピ4.9 対応する行が存在する場合に更新する
    10. レシピ4.10 別のテーブルの値で更新する
    11. レシピ4.11 レコードをマージする
    12. レシピ4.12 テーブルからすべてのレコードを削除する
    13. レシピ4.13 特定のレコードを削除する
    14. レシピ4.14 1つのレコードを削除する
    15. レシピ4.15 参照整合性違反を削除する
    16. レシピ4.16 重複レコードを削除する
    17. レシピ4.17 他のテーブルから参照されているレコードを削除する
    18. まとめ
  10. 5章 メタデータクエリ
    1. レシピ5.1 スキーマ内のテーブルの一覧を表示する
    2. レシピ5.2 テーブルの列の一覧を表示する
    3. レシピ5.3 テーブルのインデックス付けされた列の一覧を表示する
    4. レシピ5.4 テーブルに対する制約の一覧を表示する
    5. レシピ5.5 対応するインデックスがない外部キーを一覧表示する
    6. レシピ5.6 SQLを使ってSQLを生成する
    7. レシピ5.7 Oracleでデータディクショナリビューを表示する
    8. まとめ
  11. 6章 文字列
    1. レシピ6.1 文字列を反復処理する
    2. レシピ6.2 文字列リテラル内にクォートを埋め込む
    3. レシピ6.3 文字列内の文字の出現回数をカウントする
    4. レシピ6.4 文字列から不要な文字を取り除く
    5. レシピ6.5 数値データと文字データを分離する
    6. レシピ6.6 文字列が英数字かどうかを判別する
    7. レシピ6.7 名前からイニシャルを抽出する
    8. レシピ6.8 文字列の一部でソートする*2
    9. レシピ6.9 文字列内の数字でソートする
    10. レシピ6.10 テーブル行から区切りリストを作成する
    11. レシピ6.11 区切りデータから複数値を持つINリストへ変換する
    12. レシピ6.12 文字列をアルファベット順にする
    13. レシピ6.13 数値として扱える文字列を特定する
    14. レシピ6.14 n番目の区切り部分文字列を抽出する
    15. レシピ6.15 IPアドレスをパースする
    16. レシピ6.16 発音で文字列を比較する
    17. レシピ6.17 パターンにマッチしないテキストを探す
    18. まとめ
  12. 7章 数値
    1. レシピ7.1 平均値を計算する
    2. レシピ7.2 列の最大値と最小値を探す
    3. レシピ7.3 列の値を合計する
    4. レシピ7.4 テーブルの行数をカウントする
    5. レシピ7.5 列の値の数をカウントする
    6. レシピ7.6 累積和を求める
    7. レシピ7.7 累積積を求める
    8. レシピ7.8 値を平滑化する
    9. レシピ7.9 最頻値を計算する
    10. レシピ7.10 中央値を計算する
    11. レシピ7.11 総計に対する割合を求める
    12. レシピ7.12 NULLを許容する列を集約する
    13. レシピ7.13 最高値と最低値を除いた平均値を計算する
    14. レシピ7.14 英数字文字列を数字に変換する
    15. レシピ7.15 累積和の値を変更する
    16. レシピ7.16 中央絶対偏差を使って外れ値を探す
    17. レシピ7.17 ベンフォードの法則を使って異常を特定する
    18. まとめ
  13. 8章 日付の演算
    1. レシピ8.1 日、月、年の加算や減算を行う
    2. レシピ8.2 2つの日付間の日数を求める
    3. レシピ8.3 2つの日付間の平日の日数を求める
    4. レシピ8.4 2つの日付間の月数や年数を求める
    5. レシピ8.5 2つの日付間の秒数、分数、時間数を求める
    6. レシピ8.6 1年間の各曜日の出現回数をカウントする
    7. レシピ8.7 現在のレコードと次のレコードの日付の差を求める
    8. まとめ
  14. 9章 日付の操作
    1. レシピ9.1 ある年がうるう年かどうかを判定する
    2. レシピ9.2 1年の日数を計算する
    3. レシピ9.3 日付から単位時間を抽出する
    4. レシピ9.4 月の最初の日と最終日を求める
    5. レシピ9.5 1年の中の特定の曜日のすべての日付を求める
    6. レシピ9.6 ある月に特定の曜日が最初と最後に出現する日付を求める
    7. レシピ9.7 カレンダーを作成する
    8. レシピ9.8 年の四半期の開始日と終了日を表示する
    9. レシピ9.9 指定された四半期の開始日と終了日を求める
    10. レシピ9.10 欠損日付を埋める
    11. レシピ9.11 特定の単位時間を探す
    12. レシピ9.12 日付の特定の部分を使ってレコードを比較する
    13. レシピ9.13 重複する日付範囲を特定する
    14. まとめ
  15. 10章 範囲
    1. レシピ10.1 連続した値の範囲を特定する
    2. レシピ10.2 同じグループやパーティション内の行間の差を求める
    3. レシピ10.3 連続する値の範囲の最初と最後を求める
    4. レシピ10.4 値の範囲内の欠損値を埋める
    5. レシピ10.5 連続する数値を生成する
    6. まとめ
  16. 11章 高度な検索
    1. レシピ11.1 結果セットをページネーションする
    2. レシピ11.2 テーブルからn行をスキップする
    3. レシピ11.3 外部結合の使用時に論理和ロジックを組み込む
    4. レシピ11.4 逆関係の行を判別する
    5. レシピ11.5 上位n個のレコードを取得する
    6. レシピ11.6 最高値と最低値を持つレコードを探す
    7. レシピ11.7 先の行を調べる
    8. レシピ11.8 行の値をシフトする
    9. レシピ11.9 結果をランク付けする
    10. レシピ11.10 重複を取り除く
    11. レシピ11.11 ナイト値を探す
    12. レシピ11.12 簡単な予測を行う
    13. まとめ
  17. 12章 レポート作成と形状変換
    1. レシピ12.1 結果セットを1行にピボットする
    2. レシピ12.2 結果セットを複数行にピボットする
    3. レシピ12.3 結果セットをアンピボットする
    4. レシピ12.4 結果セットを1列にアンピボットする
    5. レシピ12.5 結果セットから反復値を取り除く
    6. レシピ12.6 結果セットをピボットして行をまたいだ計算を容易にする
    7. レシピ12.7 固定長のデータグループを作成する
    8. レシピ12.8 所定の数のグループを作成する
    9. レシピ12.9 水平ヒストグラムを作成する
    10. レシピ12.10 垂直ヒストグラムを作成する
    11. レシピ12.11 非GROUP BY列を返す
    12. レシピ12.12 簡単な小計を計算する
    13. レシピ12.13 考えられるすべての表現の組み合わせに対する小計を計算する
    14. レシピ12.14 小計ではない行を識別する
    15. レシピ12.15 CASE式を使って行にフラグを付ける
    16. レシピ12.16 疎行列を作成する
    17. レシピ12.17 単位時間で行をグループ化する
    18. レシピ12.18 次元が異なるグループやパーティションに対して同時に集約を実行する
    19. レシピ12.19 値の移動範囲に対して集約を実行する
    20. レシピ12.20 小計を含む結果セットをピボットする
    21. まとめ
  18. 13章 階層クエリ
    1. レシピ13.1 親子関係を表す
    2. レシピ13.2 親子孫関係を表す
    3. レシピ13.3 テーブルの階層的なビューを作成する
    4. レシピ13.4 ある親行に対するすべての子行を探す
    5. レシピ13.5 行がリーフノード、ブランチノード、ルートノードのいずれであるかを判別する
    6. まとめ
  19. 14章 その他
    1. レシピ14.1 SQL ServerのPIVOT演算子を使ってクロス集計レポートを作成する
    2. レシピ14.2 SQL ServerのUNPIVOT演算子を使ってクロス集計レポートをアンピボットする
    3. レシピ14.3 OracleのMODEL句を使って結果セットを転置する
    4. レシピ14.4 任意の場所から文字列要素を抽出する
    5. レシピ14.5 1年の日数を求める(Oracle用の別の解決策)
    6. レシピ14.6 英数字の混合文字列を探す
    7. レシピ14.7 Oracleを使って整数を2進数に変換する
    8. レシピ14.8 ランク付けされた結果セットをピボットする
    9. レシピ14.9 変換した2つの結果セットに列ヘッダを追加する
    10. レシピ14.10 Oracleでスカラサブクエリを複合サブクエリに変換する
    11. レシピ14.11 シリアル化されたデータを複数の行に分割する
    12. レシピ14.12 総計に対する割合を求める
    13. レシピ14.13 グループ内の値の存在を調べる
    14. まとめ
  20. 付録A ウィンドウ関数の再確認
    1. A.1 グループ化
    2. A.2 ウィンドウ化
  21. 付録B 共通テーブル式
    1. B.1 サブクエリ
    2. B.2 共通テーブル式
    3. B.3 まとめ
  22. 著者・訳者紹介
  23. 奥付

Product information

  • Title: SQLクックブック 第2版 ―データベースエキスパート、データサイエンティストのための実践レシピ集
  • Author(s): Anthony Molinaro, Robert de Graaf, 嶋田 健志, 木下 哲也
  • Release date: February 2022
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873119779

You might also like

book

マスタリングLinuxシェルスクリプト 第2版 ―Linuxコマンド、bashスクリプト、シェルプログラミング実践入門

by Mokhtar Ebrahim, Andrew Mallett, 萬谷 暢崇, 原 隆文

Linuxシェルスクリプトの解説書。その中でも特にbashのシェルスクリプティングに焦点を当てています。シェルスクリプトの書き方、デバッグ方法、bashプログラミングの基本といったシェルスクリプティングの基礎から、sedやAWKなど各種ツールとの連携といった実践的な応用までを体系的に解説します。WebサーバーなどのLinuxシステムの管理を任されるようになった初級の管理者にも、もっと高度で実践的なテクニックを必要としている中級の管理者や開発者にも広く役に立つ内容です。

book

詳解 システム・パフォーマンス 第2版

by Brendan Gregg, 西脇 靖紘, 長尾 高弘

本書は、エンタープライズとクラウド環境を対象としたオペレーティングシステムとアプリケーションのパフォーマンス分析と向上について解説します。 主にLinuxベースのオペレーティングシステムに含まれるツールとその使用例を通じてシステムパフォーマンスを引き出す手法を説明します。システム評価のためのベンチマーク、キャパシティプランニング、ボトルネックの解消について解説しスケーラビリティを制限する要因を発見、分析し、解決する方法を学びます。 第2版では、perf、Ftrace、BPFの解説が加わり、Linuxとクラウドコンピューティングについての説明が充実しました。 システムのパフォーマンスを向上させ、コストを削減し、レイテンシの外れ値を減らすための方法を学ぶ本書はエンジニア必携の一冊です。

book

仕事ではじめる機械学習 第2版

by 有賀 康顕, 中山 心太, 西林 孝

2018年の発行以来、多くの読者に支持された書籍を全面改訂! 不確実性の高い機械学習プロジェクトについて、「仕事で使う」という観点から整理するコンセプトはそのままに、初版の発行後に登場した概念や課題を取り上げます。「機械学習でいい感じにしてくれ」と突然上司に言われたとき、本書で学んだことが読者の力になるはずです。本書で得た知識は読者が「いま」困っている問題を解決する助けとなるでしょう。 第2版では、機械学習システムの開発と運用の統合する「ML Ops」、機械学習モデルを解釈し、その妥当性や根拠を明らかにする「機械学習モデルの検証」、ユーザーの行動を学習しながら予測を進める「バンディットアルゴリズム」、意思決定における予測システムの役割や意思決定のデザインを扱う「オンライン広告での機械学習」といった新章を追加しています。

book

プログラミング・ビットコイン ―ゼロからビットコインをプログラムする方法

by Jimmy Song, 中川 卓俊, 住田 和則, 中村 昭雄, 星野 靖子

本書は、ひとつのビットコインライブラリに必要なすべての要素を実際にコーディングすることで、ビットコイン技術の理解を深めることを狙いとした技術学習書です。ゼロから順を追ってビットコインライブラリを作成していくことで、その内部構造を紐解き、ビットコインの動作を学ぶことができます。本書で学び終える頃には、トランザクションの作成ができるようになるのはもちろん、必要なデータをピアから受け取り、ネットワーク経由でトランザクションを送信できるようになります。数学、パース、ネットワーク接続、ブロック検証をはじめ、それらを可能にするために必要なものすべてを網羅しています。