SQLポケットガイド 第4版

Book description

現場で重宝するSQLリファレンス。ソフトウェア開発の現場では、「SQLの構文をすぐに確認したい」「データベースによって異なるSQLの書き方を知りたい」「久しぶりにSQLを使うので簡単に復習したい」といったことがよくあります。本書では、仕事でSQLを利用しているプロの開発者を対象に、主要な5つのデータベース――MySQL、SQL Server、Oracle、PostgreSQL、SQLite――で使われるSQLの構文およびデータベースの基本を簡潔に解説します。PythonやRからSQLを利用する方法も解説しているので、データアナリストやデータサイエンティストなど、開発者以外のSQLユーザーにも有用でしょう。

Table of contents

  1.  大扉
  2.  原書大扉
  3.  クレジット
  4.  まえがき
  5.      よくある(SQLの)質問
  6.  1章 SQL速修講座
  7.   1.1 データベースとは何か?
  8.    1.1.1 SQL
  9.    1.1.2 NoSQL
  10.    1.1.3 データベース管理システム(DBMS)
  11.      SQL構文をGoogleで検索する
  12.   1.2 SQLクエリーとは何か?
  13.    1.2.1 SQL文
  14.    1.2.2 SQLクエリー
  15.    1.2.3 SELECT文
  16.      この順序を覚えておいてください
  17.    1.2.4 実行の順序
  18.   1.3 データモデル
  19.      これで速修講座は終わりです!
  20.  2章 SQLコードはどこに記述できるか?
  21.   2.1 RDBMSソフトウェア
  22.    2.1.1 どのRDBMSを選ぶべきか?
  23.      SQLiteを用いたクイックスタート
  24.    2.1.2 ターミナルウィンドウとは何か?
  25.    2.1.3 SQLite
  26.    2.1.4 MySQL
  27.    2.1.5 Oracle
  28.    2.1.6 PostgreSQL
  29.    2.1.7 SQL Server
  30.   2.2 データベースツール
  31.    2.2.1 データベースツールをデータベースに接続する
  32.      選択肢1:新しいデータベースを作成する
  33.      選択肢2:データベースファイルを開く
  34.      選択肢3:既存のデータベースに接続する
  35.      データベース接続フィールド
  36.   2.3 他のプログラミング言語
  37.      データ分析の基本的なワークフロー
  38.      データ分析のよりよいワークフロー
  39.    2.3.1 Pythonをデータベースに接続する
  40.      ステップ1:Python用のデータベースドライバーをインストールする
  41.      ステップ2:Python内でデータベース接続を設定する
  42.      Pythonでパスワードを安全に保管する
  43.      ステップ3:Python内でSQLコードを記述する
  44.      Python愛好者のためのSQLAlchemy
  45.    2.3.2 Rをデータベースに接続する
  46.      ステップ1:R用のデータベースドライバーをインストールする
  47.      ステップ2:R内でデータベース接続を設定する
  48.      Rでパスワードを安全に保管する
  49.      ステップ3:R内でSQLコードを記述する
  50.  3章 SQL言語
  51.   3.1 他の言語との比較
  52.      SQLの拡張機能
  53.   3.2 ANSI規格
  54.      SQLとANSI SQLとMySQLと...
  55.      読者も規格に従うべきか?
  56.      どの規格を選択すべきか?
  57.   3.3 SQLの用語
  58.    3.3.1 キーワードと関数
  59.     3.3.1.1 キーワード
  60.      SQLは大文字と小文字を区別しない
  61.     3.3.1.2 関数
  62.    3.3.2 識別子とエイリアス
  63.     3.3.2.1 識別子
  64.     3.3.2.2 エイリアス
  65.    3.3.3 文と句
  66.     3.3.3.1 文
  67.     3.3.3.2 句
  68.    3.3.4 式と述語
  69.     3.3.4.1 式
  70.     3.3.4.2 述語
  71.    3.3.5 コメント、引用符、空白文字
  72.     3.3.5.1 コメント
  73.     3.3.5.2 引用符
  74.     3.3.5.3 空白文字
  75.   3.4 サブ言語
  76.      SQL言語のまとめ
  77.  4章 クエリーの基礎
  78.   4.1 SELECT句
  79.    4.1.1 列を選択する
  80.    4.1.2 すべての列を選択する
  81.    4.1.3 式を選択する
  82.    4.1.4 関数を選択する
  83.    4.1.5 列に別名を付ける
  84.     4.1.5.1 大文字・小文字の区別や句読点を持つ列エイリアス
  85.    4.1.6 列を修飾する
  86.     4.1.6.1 テーブルを修飾する
  87.      列エイリアスとテーブルエイリアス
  88.    4.1.7 サブクエリーを選択する
  89.      非相関サブクエリーと相関サブクエリー
  90.     4.1.7.1 相関サブクエリーでのパフォーマンスの問題
  91.    4.1.8 DISTINCTキーワード
  92.     4.1.8.1 COUNTとDISTINCT
  93.   4.2 FROM句
  94.    4.2.1 複数のテーブルから検索する
  95.     4.2.1.1 テーブルエイリアス
  96.     4.2.1.2 JOIN .. ON ..
  97.     4.2.1.3 結果テーブル
  98.     4.2.1.4 JOINのバリエーション
  99.      JOINのデフォルトはINNER JOIN
  100.    4.2.2 サブクエリーから検索する
  101.      ステップ1:サブクエリーが実行される
  102.      ステップ2:クエリー全体が実行される
  103.      サブクエリーかWITH句か?
  104.    4.2.3 なぜFROM句の中でサブクエリーを使うのか?
  105.   4.3 WHERE句
  106.    4.3.1 複数の述語
  107.    4.3.2 サブクエリーによるフィルタリング
  108.     4.3.2.1 なぜWHERE句の中でサブクエリーを使うのか?
  109.      最適化より動作することを優先
  110.     4.3.2.2 データをフィルタリングするためのその他の方法
  111.   4.4 GROUP BY句
  112.      ステップ1:行の収集
  113.      ステップ2:行の集約
  114.      GROUP BY句の実際の使い方
  115.   4.5 HAVING句
  116.      WHERE句とHAVING句
  117.   4.6 ORDER BY句
  118.      COALESCE関数
  119.      ORDER BY句はサブクエリー内では使用できない
  120.   4.7 LIMIT句
  121.  5章 作成、更新、削除
  122.   5.1 データベース
  123.    5.1.1 データモデルとスキーマ
  124.    5.1.2 既存のデータベース名の表示
  125.    5.1.3 現在のデータベース名の表示
  126.    5.1.4 別のデータベースへの切り替え
  127.    5.1.5 データベースの作成
  128.    5.1.6 データベースの削除
  129.   5.2 テーブルの作成
  130.    5.2.1 簡単なテーブルの作成
  131.    5.2.2 既存のテーブル名の表示
  132.    5.2.3 まだ存在していないテーブルの作成
  133.    5.2.4 制約を持つテーブルの作成
  134.     5.2.4.1 制約:列内にNULL値を許可しないNOT NULL
  135.     5.2.4.2 制約:列内のデフォルト値を設定するDEFAULT
  136.     5.2.4.3 制約:列内の値を制限するCHECK
  137.     5.2.4.4 制約:列内で一意の値を要求するUNIQUE
  138.    5.2.5 主キーと外部キーを持つテーブルの作成
  139.     5.2.5.1 主キーの指定
  140.      主キーのベストプラクティス
  141.     5.2.5.2 外部キーの指定
  142.    5.2.6 自動的に生成されるフィールドを持つテーブルの作成
  143.    5.2.7 クエリーの結果をテーブルに挿入する
  144.    5.2.8 テキストファイルからテーブルにデータを挿入する
  145.      デスクトップのファイルパスの例
  146.     5.2.8.1 欠落データとNULL値
  147.   5.3 テーブルの変更
  148.    5.3.1 テーブルや列の名前の変更
  149.     5.3.1.1 テーブル名の変更
  150.     5.3.1.2 列名の変更
  151.    5.3.2 列の表示、追加、削除
  152.     5.3.2.1 テーブルの列を表示する
  153.     5.3.2.2 テーブルに列を追加する
  154.     5.3.2.3 テーブルから列を削除する
  155.      SQLiteでの手作業による変更
  156.    5.3.3 行の表示、追加、削除
  157.     5.3.3.1 テーブルの行を表示する
  158.     5.3.3.2 テーブルに行を追加する
  159.     5.3.3.3 テーブルから行を削除する
  160.    5.3.4 制約の表示、追加、変更、削除
  161.     5.3.4.1 テーブルの制約を表示する
  162.     5.3.4.2 テーブルに制約を追加する
  163.     5.3.4.3 テーブルの制約を変更する
  164.     5.3.4.4 テーブルから制約を削除する
  165.    5.3.5 データの列の更新
  166.    5.3.6 データの行の更新
  167.    5.3.7 クエリーの結果を用いてデータの行を更新する
  168.    5.3.8 テーブルの削除
  169.     5.3.8.1 外部キーで参照されているテーブルの削除
  170.   5.4 インデックス
  171.    5.4.1 本の索引とSQLのインデックスの比較
  172.    5.4.2 インデックスの作成によるクエリーの高速化
  173.     5.4.2.1 インデックスの削除
  174.   5.5 ビュー
  175.      サブクエリーかビューか?
  176.    5.5.1 ビューを作成してクエリーの結果を保存する
  177.     5.5.1.1 既存のビューの表示
  178.     5.5.1.2 ビューの更新
  179.     5.5.1.3 ビューの削除
  180.   5.6 トランザクション管理
  181.      トランザクションを利用すると、なぜ安全なのか?
  182.    5.6.1 COMMITの前に変更を再確認する
  183.    5.6.2 ROLLBACKを使って変更を取り消す
  184.  6章 データ型
  185.      NULLリテラル
  186.   6.1 データ型の選び方
  187.   6.2 数値データ
  188.    6.2.1 数値
  189.     6.2.1.1 整数
  190.     6.2.1.2 小数
  191.     6.2.1.3 浮動小数点数
  192.    6.2.2 整数データ型
  193.    6.2.3 小数データ型
  194.    6.2.4 浮動小数点データ型
  195.     6.2.4.1 ビットとバイトと数値
  196.   6.3 文字列データ
  197.    6.3.1 文字列値
  198.     6.3.1.1 文字列の基礎
  199.     6.3.1.2 単一引用符の代替手段
  200.     6.3.1.3 エスケープシーケンス
  201.    6.3.2 文字データ型
  202.    6.3.3 Unicodeデータ型
  203.      ASCIIエンコードとUnicodeエンコード
  204.   6.4 日時データ
  205.    6.4.1 日時値
  206.     6.4.1.1 日付
  207.     6.4.1.2 時刻
  208.     6.4.1.3 日時
  209.    6.4.2 日時データ型
  210.     6.4.2.1 MySQLの日時データ型
  211.     6.4.2.2 Oracleの日時データ型
  212.     6.4.2.3 Oracleでの日時フォーマットの確認
  213.     6.4.2.4 PostgreSQLの日時データ型
  214.     6.4.2.5 SQL Serverの日時データ型
  215.     6.4.2.6 SQLiteの日時データ型
  216.   6.5 その他のデータ
  217.    6.5.1 ブールデータ
  218.     6.5.1.1 ブールデータ型
  219.    6.5.2 外部ファイル(画像、ドキュメントなど)
  220.      方法1:ファイルへのリンクを保持する
  221.      方法2:ファイルをバイナリー値として保持する
  222.     6.5.2.1 バイナリー値と16進値
  223.     6.5.2.2 バイナリーデータ型
  224.  7章 演算子と関数
  225.      演算子と関数
  226.   7.1 演算子
  227.    7.1.1 論理演算子
  228.    7.1.2 比較演算子
  229.      演算子と述語
  230.     7.1.2.1 BETWEEN
  231.     7.1.2.2 EXISTS
  232.      EXISTSかJOINか?
  233.     7.1.2.3 IN
  234.     7.1.2.4 IS NULL
  235.     7.1.2.5 LIKE
  236.    7.1.3 数学演算子
  237.   7.2 集計関数
  238.      MIN/MAXとLEAST/GREATEST
  239.   7.3 数値関数
  240.    7.3.1 数学関数の適用
  241.    7.3.2 乱数の生成
  242.    7.3.3 数値の丸め
  243.    7.3.4 データを数値データ型に変換する
  244.   7.4 文字列関数
  245.    7.4.1 文字列の長さを求める
  246.    7.4.2 文字列の大文字・小文字を変換する
  247.    7.4.3 文字列の前後の不要な文字を取り除く
  248.     7.4.3.1 文字列の前後のスペースを取り除く
  249.     7.4.3.2 文字列の前後のその他の文字を取り除く
  250.     7.4.3.3 文字列の左側または右側から文字を取り除く
  251.      選択肢1:TRIM(LEADING ..)とTRIM(TRAILING ..)
  252.      選択肢2:LTRIMとRTRIM
  253.    7.4.4 文字列の連結
  254.    7.4.5 文字列内のテキストの検索
  255.      SQLでのカウントは1から始まる
  256.    7.4.6 文字列の一部を抽出する
  257.    7.4.7 文字列内のテキストの置換
  258.    7.4.8 文字列からテキストを削除する
  259.    7.4.9 正規表現の利用
  260.     7.4.9.1 MySQLでの正規表現
  261.     7.4.9.2 Oracleでの正規表現
  262.     7.4.9.3 PostgreSQLでの正規表現
  263.      SIMILAR TOと~
  264.     7.4.9.4 SQL Serverでの正規表現
  265.    7.4.10 データを文字列データ型に変換する
  266.   7.5 日時関数
  267.    7.5.1 現在の日付または時刻を返す
  268.    7.5.2 日付間隔や時間間隔の加算と減算
  269.    7.5.3 2つの日付または時刻の差を求める
  270.     7.5.3.1 日付の差を求める
  271.     7.5.3.2 時刻の差を求める
  272.     7.5.3.3 日時の差を求める
  273.    7.5.4 日付や時刻の一部を抽出する
  274.    7.5.5 日付の曜日を判別する
  275.    7.5.6 日付を最も近い時間単位に丸める
  276.     7.5.6.1 Oracleでの丸め
  277.     7.5.6.2 PostgreSQLでの丸め
  278.    7.5.7 文字列を日時データ型に変換する
  279.     7.5.7.1 CAST関数
  280.     7.5.7.2 STR_TO_DATE関数、TO_DATE関数、CONVERT関数
  281.     7.5.7.3 日時関数を文字列の列に適用する
  282.   7.6 NULL関数
  283.    7.6.1 NULL値が存在する場合に代わりの値を返す
  284.  8章 高度なクエリーの概念
  285.   8.1 CASE文
  286.    8.1.1 単一列に関して、if-elseロジックを基に値を表示する
  287.    8.1.2 複数列に関して、if-elseロジックを基に値を表示する
  288.   8.2 グループ化と集約
  289.    8.2.1 GROUP BYの基礎
  290.     8.2.1.1 複数列によるグループ化
  291.      効率を上げるためにGROUP BYのリストを減らす
  292.    8.2.2 複数の行を1つの値またはリストに集約する
  293.    8.2.3 ROLLUP、CUBE、GROUPING SETS
  294.     8.2.3.1 ROLLUP
  295.     8.2.3.2 CUBE
  296.     8.2.3.3 GROUPING SETS
  297.   8.3 ウィンドウ関数
  298.    8.3.1 集計関数の例
  299.    8.3.2 ウィンドウ関数の例
  300.      ウィンドウ関数を分解する
  301.    8.3.3 テーブル内の行をランク付けする
  302.      ROW_NUMBERとRANKとDENSE_RANK
  303.    8.3.4 各グループ内の最初の値を返す
  304.      ステップ1:各性別で最も人気のある名前を表示する
  305.      ステップ2:各性別で最も人気のある名前を含んでいる2行だけを返す
  306.    8.3.5 各グループ内の2番目の値を返す
  307.      ステップ1:各性別で2番目に人気のある名前を表示する
  308.      ステップ2:各性別で2番目に人気のある名前を含んでいる2行だけを返す
  309.    8.3.6 各グループ内の最初の2つの値を返す
  310.      ステップ1:各性別での人気ランキングを表示する
  311.      ステップ2:各性別で順位が1位と2位の行をフィルタリングする
  312.    8.3.7 前の行の値を返す
  313.    8.3.8 移動平均を計算する
  314.    8.3.9 累計を計算する
  315.      ROWSとRANGE
  316.   8.4 ピボットとピボット解除
  317.    8.4.1 1つの列の値を複数の列に分割する
  318.      PIVOTの代替手段:CASE
  319.    8.4.2 複数の列の値を1つの列にリストする
  320.      UNPIVOTの代替手段:UNION ALL
  321.  9章 複数のテーブルおよびクエリーの操作
  322.   9.1 テーブルの結合
  323.      JOIN句を分解する
  324.    9.1.1 結合の基礎とINNER JOIN
  325.     9.1.1.1 結合の基礎
  326.      ステップ1:テーブル内の行のすべての組み合わせを表示する
  327.      ステップ2:名前が一致している行をフィルタリングする
  328.     9.1.1.2 INNER JOIN
  329.    9.1.2 LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN
  330.     9.1.2.1 LEFT JOIN
  331.     9.1.2.2 RIGHT JOIN
  332.     9.1.2.3 FULL OUTER JOIN
  333.    9.1.3 USINGとNATURAL JOIN
  334.     9.1.3.1 USING
  335.     9.1.3.2 NATURAL JOIN
  336.    9.1.4 CROSS JOINと自己結合
  337.     9.1.4.1 CROSS JOIN
  338.     9.1.4.2 自己結合
  339.      例1:従業員と管理者のリストを返す
  340.      例2:それぞれの従業員と、同じ部署内の別の従業員とを結びつける
  341.   9.2 集合演算子
  342.    9.2.1 UNION
  343.      UNIONは、どのようなクエリーを結合できるか?
  344.     9.2.1.1 UNION ALL
  345.     9.2.1.2 UNIONとその他の句
  346.     9.2.1.3 3つ以上のテーブルのUNION
  347.    9.2.2 EXCEPTとINTERSECT
  348.     9.2.2.1 EXCEPT
  349.     9.2.2.2 INTERSECT
  350.      集合演算子:評価の順序
  351.   9.3 共通テーブル式
  352.    9.3.1 CTEとサブクエリー
  353.      ステップ1:それぞれの部署の平均給与を求めるクエリーを記述する
  354.      ステップ2:前のクエリーを使って、平均給与が最も高い部署を求めるCTEとサブクエリーを記述する
  355.      サブクエリーに対するCTEのメリット
  356.    9.3.2 再帰CTE
  357.     9.3.2.1 一連のデータ内で欠けている行を埋める
  358.      ステップ1:再帰CTEを使って、my_datesという一連の日付を生成する
  359.      ステップ2:再帰CTEと元のテーブルを左外部結合する
  360.      ステップ3(オプション):NULL値を前日の価格で埋める
  361.     9.3.2.2 子の行のすべての親を返す
  362.  10章 こんなときは...
  363.   10.1 重複する値を含んでいる行を探す
  364.    10.1.1 すべての一意の組み合わせを返す
  365.      拡張のためのヒント
  366.    10.1.2 重複する値を持つ行だけを返す
  367.      説明
  368.      クエリー内のキーワード
  369.      拡張のためのヒント
  370.   10.2 別の列の最大値を持つ行を選択する
  371.      解決策
  372.      説明
  373.      クエリー内のキーワード
  374.      拡張のためのヒント
  375.   10.3 複数のフィールドから1つのフィールドにテキストを連結する
  376.    10.3.1 1つの行の複数のフィールドからテキストを連結する
  377.      拡張のためのヒント
  378.    10.3.2 複数行のフィールドからテキストを連結する
  379.      拡張のためのヒント
  380.   10.4 特定の列名を含んでいるすべてのテーブルを探す
  381.      解決策
  382.      拡張のためのヒント
  383.   10.5 別のテーブルとIDが一致するテーブルを更新する
  384.      解決策
  385.      拡張のためのヒント
  386.      最後に
  387.  付録A サンプルテーブルの定義と内容
  388.   A.1 countyテーブル
  389.      定義
  390.      データ
  391.   A.2 ownerテーブル
  392.      定義
  393.      データ
  394.   A.3 waterfallテーブル
  395.      定義
  396.      データ
  397.   A.4 tourテーブル
  398.      定義
  399.      データ
  400.  付録B Oracle Database 23aiの新機能について
  401.      FROM句なしのSELECT文
  402.      ブールデータ型のサポート
  403.      IF [NOT] EXISTS構文のサポート
  404.      GROUP BY句やHAVING句でのエイリアスの使用
  405.      UPDATE文の直接結合
  406.      日付の丸めに関するCEILとFLOORのサポート
  407.      複数のデータ行の一括挿入
  408.  著者紹介
  409.  奥付

Product information

  • Title: SQLポケットガイド 第4版
  • Author(s): Alice Zhao, 原 隆文
  • Release date: July 2024
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784814400805

You might also like

book

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

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

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

book

Pythonクイックリファレンス 第4版

by Alex Martelli, Anna Martelli Ravenscroft, Steve Holden, Paul McGuire, 鈴木 駿, 株式会社クイープ

本書はPythonの機能を十分に活用するためのリファレンスです。チュートリアルとしての「Pythonを使ってみる」、型アノテーションや文字列といった「Python言語と組み込み機能」、ファイルやテキスト、時間の操作、数値処理などをまとめた「Pythonの標準ライブラリと拡張モジュール」、HTTPの処理や構造化テキストを学ぶ「ネットワークとWebプログラミング」、バージョン移行などに関する「拡張、配布、バージョンのアップグレードと移行」という5部構成となっています。Pythonを本格的に学びたい人から、さらなるスキルアップを目指したい人まで、Pythonを最大限に活用するための有益な情報がぎっちり詰まった1冊です。Python 3.11対応。

book

行動を変えるデザイン ―心理学と行動経済学をプロダクトデザインに活用する

by Stephen Wendel, 武山 政直, 相島 雅樹, 反中 望, 松村 草也

深津貴之氏推薦!「行動経済学、データ分析、サービス設計のエッセンスが高度に統合された行動変容デザインの良書です」 本書は、行動経済学と心理学をもとに、人々の行動、日常習慣を変える“行動変容”を促すプロダクトをデザインするための書籍です。主にヘルスケア(健康管理)、金融(資産管理)など、これまでITプロダクト(サービス、アプリなど)がなかなか使われてこなかった分野を対象に、ユーザーがやりたいと思っていたものの実行できなかった行動の実現を助けるプロダクトを作り出すための、実践的な視点や知識を提供します。

book

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

by Anthony Molinaro, Robert de Graaf, 嶋田 健志, 木下 哲也

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