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

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

ルールズ・オブ・プログラミング ―より良いコードを書くための21のルール

by Chris Zimmerman, 久富木 隆一

全世界で1,000万本に迫る実売数を誇り、日本でも累計実売数100万本を突破(2023年5月時点)した大ヒットゲーム『Ghost of Tsushima (ゴースト・オブ・ツシマ) 』をはじめ、『怪盗スライ・クーパー』などで著名なゲーム制作スタジオ、Sucker Punch Productions(サッカーパンチプロダクションズ)の共同創設者であるChris Zimmermanによる、プログラミングのベストプラクティス集。 全部で21の「ルール」から成り立っており、すべてのプログラマーが知っておくべき本質的な知恵と、熟練したプログラマーにとって示唆に富む洞察を含んでいます。また、コードを書く際だけでなく、デバッグや最適化の際に有用な知識にも触れています。ゲーム領域に限らず、幅広いプログラマーを対象とした、必読のプログラミング哲学。 本書で触れられるコード例はC++で書かれていますが、C++の知識は必須ではなく、オブジェクト指向の基礎知識さえあれば問題なく読むことができます。また、付録に「Pythonプログラマー/JavaScriptプログラマーのためのC++コード読解法」を掲載しています。

book

Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築

by Travis Jeffery, 柴田 芳樹

本書は、Go言語で分散サービスを構築する方法を解説する書籍です。分散サービスの概要と基本を解説し、設計、開発、およびデプロイする方法をコードを使ってハンズオン形式で学びます。はじめに、ストレージレイヤの構築とデータ構造の定義を行い、gRPCを用いてAPIを定義したサービスをネットワーク上で動作させる方法を説明します。そしてサービスを分散させて、可用性、耐障害性、拡張性を実現する方法を解説し、本番環境のKubernetesへデプロイする方法を学びます。

book

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

by Eve Porcello, Alex Banks, 尾崎 沙耶, あんどうやすし

今日では多くのWebサービスがRESTアーキテクチャスタイルで実装されています。RESTは2000年にフィールディングの論文で提唱された後に爆発的に普及し洗練されてきました。一方で、本書で紹介するGraphQLは2015年にFacebookによって公開されたRESTとは異なるアプローチのアーキテクチャです。GraphQLの最大の特徴はクエリ言語を用いてデータを操作する点です。クエリ言語の表現力の高さによりクライアントは本当に必要なリクエストを送ることができます。本書ではGraphQLの概要とGraphQLを用いたWebサービスの開発方法を実装例に沿って紹介します。認証やファイルアップロードといった実践的なトピックまで踏み込んだGraphQLの実用的な入門書です。