SQLクックブック

―データベースエキスパートのための実践レシピ集

[cover photo]
TOPICS
クックブック , Programming , Database
発行年月日
PRINT LENGTH
548
ISBN
978-4-87311-315-9
原書
SQL Cookbook
FORMAT
PDF
Print
4,180円
この商品は品切れ再入荷未定です

SQLはデータベースの世界における最高の言語です。リレーショナルデータベースに関する開発を行っている場合やリレーショナルデータベースからレポートを作成する場合、データをデータベースに格納してそれを再び取り出す能力は、結局のところSQLの知識に依存します。しかし、多くの技術者はSQLを通り一遍な方法で使っており、その処理能力に気付いていません。本書はSQLが実際にどのように役に立つか解説することで、このような状況すべてを変えることを目的としています。 本書は、日々の仕事に役立つ一般的なSQLの問題とその解決策を集めています。各レシピは関連する話題ごとに章に分類されています。以前に解決したことのない新しいSQL問題に直面した際に、最も適切と思われる章を見つけ、レシピのタイトルに目を通せば、解決策を見つけることができます。

目次

はじめに

1章 レコードの取得
	レシピ1.1 テーブルからすべての行と列を取得する
	レシピ1.2 テーブルから行のサブセットを取得する
	レシピ1.3 複数の条件を満たす行を見つける
	レシピ1.4 テーブルから列のサブセットを取得する
	レシピ1.5 列に意味のある名前を付ける
	レシピ1.6 WHERE句の中でエイリアス付けされた列を参照する
	レシピ1.7 列値を連結する
	レシピ1.8 SELECT文で条件ロジックを使う
	レシピ1.9 返される行数を制限する
	レシピ1.10 テーブルからn個のランダムなレコードを返す
	レシピ1.11 NULL値を見つける
	レシピ1.12 NULLを実数に変換する
	レシピ1.13 パターンを検索する

2章 クエリ結果のソート
	レシピ2.1 クエリ結果を指定された順序で返す
	レシピ2.2 複数のフィールドでソートする
	レシピ2.3 部分文字列でソートする
	レシピ2.4 数字とアルファベットの混合データをソートする
	レシピ2.5 ソート時にNULLに対処する
	レシピ2.6 データ依存のキーに対してソートする

3章 複数テーブルの扱い
	レシピ3.1 ある行セットを別の行セットに積み重ねる
	レシピ3.2 関連する行を組み合わせる
	レシピ3.3 2つのテーブル間の共通行を見つける
	レシピ3.4 一方のテーブルから他方のテーブルには存在しない値を取得する
	レシピ3.5 一方のテーブルから他方のテーブル内に対応する行がない行を取得する
	レシピ3.6 他の結合を邪魔することなくクエリに結合を追加する
	レシピ3.7 2つのテーブルが同じデータを持つかどうかを判断する
	レシピ3.8 直積を特定して回避する
	レシピ3.9 集約の使用時に結合を実行する
	レシピ3.10 集約の使用時に外部結合を実行する
	レシピ3.11 複数テーブルから欠如データを返す
	レシピ3.12 演算や比較でNULLを使う

4章 挿入、更新、削除
	レシピ4.1 新しいレコードを挿入する
	レシピ4.2 デフォルト値を挿入する
	レシピ4.3 デフォルト値をNULLに置き換える
	レシピ4.4 あるテーブルから別のテーブルに行をコピーする
	レシピ4.5 テーブル定義をコピーする
	レシピ4.6 一度に複数のテーブルに挿入する
	レシピ4.7 特定の列への挿入を阻止する
	レシピ4.8 テーブル内のレコードを変更する
	レシピ4.9 対応する行が存在する場合に更新する
	レシピ4.10 別のテーブルの値で更新する
	レシピ4.11 レコードをマージする
	レシピ4.12 テーブルからすべてのレコードを削除する
	レシピ4.13 特定のレコードを削除する
	レシピ4.14 1つのレコードを削除する
	レシピ4.15 参照整合性違反を削除する
	レシピ4.16 重複レコードを削除する
	レシピ4.17 他のテーブルから参照されているレコードを削除する

5章 メタデータクエリ
	レシピ5.1 スキーマ内のテーブルを列挙する
	レシピ5.2 テーブルの列を列挙する
	レシピ5.3 テーブルのインデックス付けされた列を列挙する
	レシピ5.4 テーブルに対する制約を列挙する
	レシピ5.5 対応するインデックスがない外部キーを列挙する
	レシピ5.6 SQLを使ってSQLを生成する
	レシピ5.7 Oracleデータベースでデータディクショナリビューを表示する

6章 文字列の扱い
	レシピ6.1 文字列を渡り歩く
	レシピ6.2 文字列リテラル内に引用符を埋め込む
	レシピ6.3 文字列内の文字の出現回数を数える
	レシピ6.4 文字列から不要な文字を取り除く
	レシピ6.5 数値データと文字データを分離する
	レシピ6.6 文字列が英数字かどうかを判別する
	レシピ6.7 名前からイニシャルを抽出する
	レシピ6.8 文字列の一部でソートする
	レシピ6.9 文字列内の数字でソートする
	レシピ6.10 テーブル行から区切りリストを作成する
	レシピ6.11 区切りデータを複数値を持つINリストに変換する
	レシピ6.12 文字列をアルファベット順にする
	レシピ6.13 数値として扱える文字列を特定する
	レシピ6.14 n番目の区切り部分文字列を抽出する
	レシピ6.15 IPアドレスを解析する

7章 数値の扱い
	レシピ7.1 平均を計算する
	レシピ7.2 列の最大値と最小値を見つける
	レシピ7.3 列の値を合計する
	レシピ7.4 テーブルの行数を数える
	レシピ7.5 列の値の数を数える
	レシピ7.6 累積計を作成する
	レシピ7.7 累積積を作成する
	レシピ7.8 累積差を計算する
	レシピ7.9 モードを計算する
	レシピ7.10 メジアンを計算する
	レシピ7.11 総計に対する割合を算出する
	レシピ7.12 NULLが利用可能な列を集約する
	レシピ7.13 最高値と最低値を除いた平均を計算する
	レシピ7.14 英数字文字列を数字に変換する
	レシピ7.15 累積計の値を変更する

8章 日付演算
	レシピ8.1 日、月、年の足し算や引き算を行う
	レシピ8.2 2つの日付間の日数を算出する
	レシピ8.3 2つの日付間の平日の日数を算出する
	レシピ8.4 2つの日付間の月数や年数を算出する
	レシピ8.5 2つの日付間の秒数、分数、時間数を算出する
	レシピ8.6 1年での各曜日の出現回数を数える
	レシピ8.7 現在のレコードと次のレコードの日付の差を算出する

9章 日付操作
	レシピ9.1 ある年がうるう年かどうかを判別する
	レシピ9.2 1年の日数を算出する
	レシピ9.3 日付から単位時間を抽出する
	レシピ9.4 月の初日と最終日を割り出す
	レシピ9.5 1年の中の特定の曜日のすべての日付を割り出す
	レシピ9.6 ある月にある特定の曜日が最初と最後に出現する日付を割り出す
	レシピ9.7 カレンダーを作成する
	レシピ9.8 年の四半期の開始日と終了日を列挙する
	レシピ9.9 指定された四半期の開始日と終了日を割り出す
	レシピ9.10 欠けている日付を埋める
	レシピ9.11 特定の単位時間を探す
	レシピ9.12 日付の特定の部分を使ってレコードを比較する
	レシピ9.13 重なっている日付範囲を識別する

10章 範囲の扱い
	レシピ10.1 連続した値の範囲を特定する
	レシピ10.2 同じグループや区分内の行間の差を求める
	レシピ10.3 連続する値の範囲の最初と最後を求める
	レシピ10.4 値の範囲内の欠けている値を埋める
	レシピ10.5 連続する数値を作成する

11章 高度な検索
	レシピ11.1 結果セットをページ割りする
	レシピ11.2 テーブルからn行を読み飛ばす
	レシピ11.3 外部結合の使用時に論理和ロジックを組み込む
	レシピ11.4 逆関係の行を判別する
	レシピ11.5 先頭のn個のレコードを取得する
	レシピ11.6 最高値と最低値を持つレコードを見つける
	レシピ11.7 先の行を調べる
	レシピ11.8 行の値間を移動する
	レシピ11.9 結果をランク付けする
	レシピ11.10 重複を取り除く
	レシピ11.11 ナイト値を見つける
	レシピ11.12 簡単な予測を作成する

12章 レポート作成とウェアハウス化
	レシピ12.1 結果セットを1行に回転させる
	レシピ12.2 結果セットを複数行に回転させる
	レシピ12.3 結果セットを逆回転させる
	レシピ12.4 結果セットを1列に逆回転させる
	レシピ12.5 結果セットから反復値を取り除く
	レシピ12.6 結果セットを回転させて行をまたいだ計算を容易にする
	レシピ12.7 固定サイズのデータグループを作成する
	レシピ12.8 予め決められた数のグループを作成する
	レシピ12.9 水平方向の棒グラフを作成する
	レシピ12.10 垂直方向の棒グラフを作成する
	レシピ12.11 非GROUP BY列を返す
	レシピ12.12 簡単な小計を計算する
	レシピ12.13 考えられるすべての表現の組み合わせに対する小計を計算する
	レシピ12.14 小計ではない行を識別する
	レシピ12.15 CASE式を使って行にフラグを付ける
	レシピ12.16 疎行列を作成する
	レシピ12.17 単位時間で行をグループ化する
	レシピ12.18 異なるグループや区分に対して同時に集約を実行する
	レシピ12.19 値の移動範囲に対して集約を実行する
	レシピ12.20 小計を含む結果セットを回転させる

13章 階層クエリ
	レシピ13.1 親子関係を表す
	レシピ13.2 親子孫関係を表す
	レシピ13.3 テーブルの階層的なビューを作成する
	レシピ13.4 所定の親行に対するすべての子行を返す
	レシピ13.5 行がリーフノード、ブランチノード、またはルートノードかを判別する

14章 その他
	レシピ14.1 SQL ServerのPIVOT演算子を使ってクロスタブレポートを作成する
	レシピ14.2 SQL ServerのUNPIVOT演算子を使ってクロスタブレポートを逆回転させる
	レシピ14.3 OracleのMODEL句を使って結果セットを転置させる
	レシピ14.4 不定の位置から文字列要素を抽出する
	レシピ14.5 1年の日数を求める(Oracle用の別の解決策)
	レシピ14.6 英数字の混合文字列を探す
	レシピ14.7 Oracleを使って整数を2進数に変換する
	レシピ14.8 ランク付けされた結果セットを回転させる
	レシピ14.9 回転させた2つの結果セットに列ヘッダを追加する
	レシピ14.10 Oracleでスカラサブクエリを複合サブクエリに変換する
	レシピ14.11 直列化されたデータを行に分解する
	レシピ14.12 総計に対する割合を算出する
	レシピ14.13 OracleでCSV出力を作成する
	レシピ14.14 パターンに合致しないテキストを見つける(Oracle)
	レシピ14.15 インラインビューを使ってデータを変換する
	レシピ14.16 グループ内の値の存在を調べる

索引