SQLポケットガイド 第4版

[cover photo]
TOPICS
Database
発行年月日
PRINT LENGTH
328
ISBN
978-4-8144-0080-5
原書
SQL Pocket Guide, 4th Edition
FORMAT
Print PDF EPUB
Ebook
2,860円
Ebookを購入する
Print
2,860円

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

関連ファイル

目次

まえがき

1章 SQL速修講座
    1.1 データベースとは何か?
        1.1.1 SQL
        1.1.2 NoSQL
        1.1.3 データベース管理システム(DBMS)
    1.2 SQLクエリーとは何か?
        1.2.1 SQL文
        1.2.2 SQLクエリー
        1.2.3 SELECT文
        1.2.4 実行の順序
    1.3 データモデル

2章 SQLコードはどこに記述できるか?
    2.1 RDBMSソフトウェア
        2.1.1 どのRDBMSを選ぶべきか?
        2.1.2 ターミナルウィンドウとは何か?
        2.1.3 SQLite
        2.1.4 MySQL
        2.1.5 Oracle
        2.1.6 PostgreSQL
        2.1.7 SQL Server
    2.2 データベースツール
        2.2.1 データベースツールをデータベースに接続する
    2.3 他のプログラミング言語
        2.3.1 Pythonをデータベースに接続する
        2.3.2 Rをデータベースに接続する

3章 SQL言語
    3.1 他の言語との比較
    3.2 ANSI規格
    3.3 SQLの用語
        3.3.1 キーワードと関数
        3.3.2 識別子とエイリアス
        3.3.3 文と句
        3.3.4 式と述語
        3.3.5 コメント、引用符、空白文字
    3.4 サブ言語

4章 クエリーの基礎
    4.1 SELECT句
        4.1.1 列を選択する
        4.1.2 すべての列を選択する
        4.1.3 式を選択する
        4.1.4 関数を選択する
        4.1.5 列に別名を付ける
        4.1.6 列を修飾する
        4.1.7 サブクエリーを選択する
        4.1.8 DISTINCTキーワード
    4.2 FROM句
        4.2.1 複数のテーブルから検索する
        4.2.2 サブクエリーから検索する
        4.2.3 なぜFROM句の中でサブクエリーを使うのか?
    4.3 WHERE句
        4.3.1 複数の述語
        4.3.2 サブクエリーによるフィルタリング
    4.4 GROUP BY句
    4.5 HAVING句
    4.6 ORDER BY句
    4.7 LIMIT句

5章 作成、更新、削除
    5.1 データベース
        5.1.1 データモデルとスキーマ
        5.1.2 既存のデータベース名の表示
        5.1.3 現在のデータベース名の表示
        5.1.4 別のデータベースへの切り替え
        5.1.5 データベースの作成
        5.1.6 データベースの削除
    5.2 テーブルの作成
        5.2.1 簡単なテーブルの作成
        5.2.2 既存のテーブル名の表示
        5.2.3 まだ存在していないテーブルの作成
        5.2.4 制約を持つテーブルの作成
        5.2.5 主キーと外部キーを持つテーブルの作成
        5.2.6 自動的に生成されるフィールドを持つテーブルの作成
        5.2.7 クエリーの結果をテーブルに挿入する
        5.2.8 テキストファイルからテーブルにデータを挿入する
    5.3 テーブルの変更
        5.3.1 テーブルや列の名前の変更
        5.3.2 列の表示、追加、削除
        5.3.3 行の表示、追加、削除
        5.3.4 制約の表示、追加、変更、削除
        5.3.5 データの列の更新
        5.3.6 データの行の更新
        5.3.7 クエリーの結果を用いてデータの行を更新する
        5.3.8 テーブルの削除
    5.4 インデックス
        5.4.1 本の索引とSQLのインデックスの比較
        5.4.2 インデックスの作成によるクエリーの高速化
    5.5 ビュー
        5.5.1 ビューを作成してクエリーの結果を保存する
    5.6 トランザクション管理
        5.6.1 COMMITの前に変更を再確認する
        5.6.2 ROLLBACKを使って変更を取り消す

6章 データ型
    6.1 データ型の選び方
    6.2 数値データ
        6.2.1 数値
        6.2.2 整数データ型
        6.2.3 小数データ型
        6.2.4 浮動小数点データ型
    6.3 文字列データ
        6.3.1 文字列値
        6.3.2 文字データ型
        6.3.3 Unicodeデータ型
    6.4 日時データ
        6.4.1 日時値
        6.4.2 日時データ型
    6.5 その他のデータ
        6.5.1 ブールデータ
        6.5.2 外部ファイル(画像、ドキュメントなど)

7章 演算子と関数
    7.1 演算子
        7.1.1 論理演算子
        7.1.2 比較演算子
        7.1.3 数学演算子
    7.2 集計関数
    7.3 数値関数
        7.3.1 数学関数の適用
        7.3.2 乱数の生成
        7.3.3 数値の丸め
        7.3.4 データを数値データ型に変換する
    7.4 文字列関数
        7.4.1 文字列の長さを求める
        7.4.2 文字列の大文字・小文字を変換する
        7.4.3 文字列の前後の不要な文字を取り除く
        7.4.4 文字列の連結
        7.4.5 文字列内のテキストの検索
        7.4.6 文字列の一部を抽出する
        7.4.7 文字列内のテキストの置換
        7.4.8 文字列からテキストを削除する
        7.4.9 正規表現の利用
        7.4.10 データを文字列データ型に変換する
    7.5 日時関数
        7.5.1 現在の日付または時刻を返す
        7.5.2 日付間隔や時間間隔の加算と減算
        7.5.3 2つの日付または時刻の差を求める
        7.5.4 日付や時刻の一部を抽出する
        7.5.5 日付の曜日を判別する
        7.5.6 日付を最も近い時間単位に丸める
        7.5.7 文字列を日時データ型に変換する
    7.6 NULL関数
        7.6.1 NULL値が存在する場合に代わりの値を返す

8章 高度なクエリーの概念
    8.1 CASE文
        8.1.1 単一列に関して、if-elseロジックを基に値を表示する
        8.1.2 複数列に関して、if-elseロジックを基に値を表示する
    8.2 グループ化と集約
        8.2.1 GROUP BYの基礎
        8.2.2 複数の行を1つの値またはリストに集約する
        8.2.3 ROLLUP、CUBE、GROUPING SETS
    8.3 ウィンドウ関数
        8.3.1 集計関数の例
        8.3.2 ウィンドウ関数の例
        8.3.3 テーブル内の行をランク付けする
        8.3.4 各グループ内の最初の値を返す
        8.3.5 各グループ内の2番目の値を返す
        8.3.6 各グループ内の最初の2つの値を返す
        8.3.7 前の行の値を返す
        8.3.8 移動平均を計算する
        8.3.9 累計を計算する
    8.4 ピボットとピボット解除
        8.4.1 1つの列の値を複数の列に分割する
        8.4.2 複数の列の値を1つの列にリストする

9章 複数のテーブルおよびクエリーの操作
    9.1 テーブルの結合
        9.1.1 結合の基礎とINNER JOIN
        9.1.2 LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN
        9.1.3 USINGとNATURAL JOIN
        9.1.4 CROSS JOINと自己結合
    9.2 集合演算子
        9.2.1 UNION
        9.2.2 EXCEPTとINTERSECT
    9.3 共通テーブル式
        9.3.1 CTEとサブクエリー
        9.3.2 再帰CTE

10章 こんなときは...
    10.1 重複する値を含んでいる行を探す
        10.1.1 すべての一意の組み合わせを返す
        10.1.2 重複する値を持つ行だけを返す
    10.2 別の列の最大値を持つ行を選択する
    10.3 複数のフィールドから1つのフィールドにテキストを連結する
        10.3.1 1つの行の複数のフィールドからテキストを連結する
        10.3.2 複数行のフィールドからテキストを連結する
    10.4 特定の列名を含んでいるすべてのテーブルを探す
    10.5 別のテーブルとIDが一致するテーブルを更新する

付録A サンプルテーブルの定義と内容
    A.1 countyテーブル
    A.2 ownerテーブル
    A.3 waterfallテーブル
    A.4 tourテーブル

付録B Oracle Database 23aiの新機能について

索引

コラム目次
    SQL構文をGoogleで検索する
    この順序を覚えておいてください
    これで速修講座は終わりです!
    SQLiteを用いたクイックスタート
    データベース接続フィールド
    データ分析の基本的なワークフロー
    データ分析のよりよいワークフロー
    Pythonでパスワードを安全に保管する
    Python愛好者のためのSQLAlchemy
    Rでパスワードを安全に保管する
    SQLの拡張機能
    SQLとANSI SQLとMySQLと...
    読者も規格に従うべきか?
    どの規格を選択すべきか?
    SQLは大文字と小文字を区別しない
    SQL言語のまとめ
    列エイリアスとテーブルエイリアス
    非相関サブクエリーと相関サブクエリー
    JOINのデフォルトはINNER JOIN
    サブクエリーかWITH句か?
    最適化より動作することを優先
    GROUP BY句の実際の使い方
    WHERE句とHAVING句
    COALESCE関数
    ORDER BY句はサブクエリー内では使用できない
    主キーのベストプラクティス
    デスクトップのファイルパスの例
    SQLiteでの手作業による変更
    サブクエリーかビューか?
    トランザクションを利用すると、なぜ安全なのか?
    NULLリテラル
    ASCIIエンコードとUnicodeエンコード
    演算子と関数
    演算子と述語
    EXISTSかJOINか?
    MIN/MAXとLEAST/GREATEST
    SQLでのカウントは1から始まる
    SIMILAR TOと~
    効率を上げるためにGROUP BYのリストを減らす
    ウィンドウ関数を分解する
    ROW_NUMBERとRANKとDENSE_RANK
    ROWSとRANGE
    PIVOTの代替手段:CASE
    UNPIVOTの代替手段:UNION ALL
    JOIN句を分解する
    UNIONは、どのようなクエリーを結合できるか?
    集合演算子:評価の順序
    サブクエリーに対するCTEのメリット
    最後に

表目次
    表1-1 RDBMSの比較表
    表1-2 データモデルに含まれているものを説明するために使われる用語
    表2-1 データベースツールの比較表
    表2-2 pipまたはcondaを使って、Python用のドライバーをインストールする
    表2-3 データベース接続を設定するためのPythonコード
    表2-4 R用のドライバーをインストールする
    表2-5 データベース接続を設定するためのRコード
    表3-1 SQLのサブ言語
    表5-1 既存のデータベース名を表示するためのコード
    表5-2 現在のデータベース名を表示するためのコード
    表5-3 別のデータベースに切り替えるためのコード
    表5-4 データベースを作成するためのコード
    表5-5 データベースを削除するためのコード
    表5-6 複数行のデータを挿入するためのコード
    表5-7 既存のテーブル名を表示するためのコード
    表5-8 一意のIDを自動的に生成するためのコード
    表5-9 .csvファイルからデータを挿入するためのコード
    表5-10 テーブル名を変更するためのコード
    表5-11 列名を変更するためのコード
    表5-12 テーブルの列を表示するためのコード
    表5-13 テーブルに列を追加するためのコード
    表5-14 テーブルから列を削除するためのコード
    表5-15 テーブルの制約を表示するためのコード
    表5-16 制約を追加するためのコード
    表5-17 テーブル内の制約を変更するためのコード
    表5-18 テーブルから制約を削除するためのコード
    表5-19 外部キーで参照されているテーブルを削除するためのコード
    表5-20 本の索引とSQLのインデックスの比較
    表5-21 インデックスを削除するためのコード
    表5-22 既存のビューを表示するためのコード
    表5-23 ビューを更新するためのコード
    表6-1 SQLでのデータ型
    表6-2 SQLでのリテラル
    表6-3 整数データ型の例
    表6-4 整数データ型
    表6-5 PostgreSQLでのSERIALの選択肢
    表6-6 小数データ型
    表6-7 浮動小数点データ型
    表6-8 よく使われるエスケープシーケンス
    表6-9 文字データ型
    表6-10 Unicodeデータ型
    表6-11 クエリー内での日付の参照
    表6-12 クエリー内での時刻の参照
    表6-13 クエリー内での日時の参照
    表6-14 MySQLの日時データ型
    表6-15 Oracleの日時データ型
    表6-16 PostgreSQLの日時データ型
    表6-17 SQL Serverの日時データ型
    表6-18 SQLiteの日時データ型
    表6-19 バイナリーデータ型
    表7-1 よく使われる演算子
    表7-2 よく使われる関数
    表7-3 論理演算子
    表7-4 NOTの例
    表7-5 ANDとORの例
    表7-6 比較演算子(記号)
    表7-7 比較演算子(キーワード)
    表7-8 数学演算子
    表7-9 基本的な集計関数
    表7-10 数学関数(OracleではFROM dualを追加)
    表7-11 乱数ジェネレーター
    表7-12 数値の丸めの選択肢(OracleではFROM dualを追加)
    表7-13 文字列内でのテキストの位置を調べる関数
    表7-14 昨日の日付を返す
    表7-15 現在から3時間後の日時を返す
    表7-16 2つの日付の間の日数
    表7-17 2つの時刻の間の秒数
    表7-18 2つの日時の間の時間数
    表7-19 日付から月を抽出する
    表7-20 時間単位の選択肢
    表7-21 曜日の数値を返す
    表7-22 曜日を返す
    表7-23 文字列を日付に変換する
    表7-24 文字列を時刻に変換する
    表7-25 文字列を日時に変換する
    表7-26 文字列から日付への変換関数と文字列から時刻への変換関数
    表7-27 日時フォーマット指定子
    表7-28 文字列から年を抽出する
    表8-1 高度なクエリーの概念
    表8-2 グループ化と集約の概念
    表8-3 それぞれのRDBMSで、複数の行を1つのリストに集約する方法
    表8-4 それぞれのRDBMSで、ソートされた値のリストや一意の値のリストを返す方法
    表9-1 複数のテーブルやクエリーの操作
    表9-2 テーブルを結合するための各種の方法
    表9-3 テーブルを結合するための構文
    表9-4 それぞれのRDBMSで日付の列を生成する
    表9-5 それぞれのRDBMSですべての親を列挙する
    表10-1 特定の列名を含んでいるすべてのテーブルを検索する
    表10-2 別のテーブルとIDが一致するテーブルを更新する