Book description
現場で重宝するSQLリファレンス。ソフトウェア開発の現場では、「SQLの構文をすぐに確認したい」「データベースによって異なるSQLの書き方を知りたい」「久しぶりにSQLを使うので簡単に復習したい」といったことがよくあります。本書では、仕事でSQLを利用しているプロの開発者を対象に、主要な5つのデータベース――MySQL、SQL Server、Oracle、PostgreSQL、SQLite――で使われるSQLの構文およびデータベースの基本を簡潔に解説します。PythonやRからSQLを利用する方法も解説しているので、データアナリストやデータサイエンティストなど、開発者以外のSQLユーザーにも有用でしょう。
Table of contents
- 大扉
- 原書大扉
- クレジット
- まえがき
- よくある(SQLの)質問
- 1章 SQL速修講座
- 1.1 データベースとは何か?
- 1.1.1 SQL
- 1.1.2 NoSQL
- 1.1.3 データベース管理システム(DBMS)
- SQL構文をGoogleで検索する
- 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を選ぶべきか?
- SQLiteを用いたクイックスタート
- 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 データベースツールをデータベースに接続する
- 選択肢1:新しいデータベースを作成する
- 選択肢2:データベースファイルを開く
- 選択肢3:既存のデータベースに接続する
- データベース接続フィールド
- 2.3 他のプログラミング言語
- データ分析の基本的なワークフロー
- データ分析のよりよいワークフロー
- 2.3.1 Pythonをデータベースに接続する
- ステップ1:Python用のデータベースドライバーをインストールする
- ステップ2:Python内でデータベース接続を設定する
- Pythonでパスワードを安全に保管する
- ステップ3:Python内でSQLコードを記述する
- Python愛好者のためのSQLAlchemy
- 2.3.2 Rをデータベースに接続する
- ステップ1:R用のデータベースドライバーをインストールする
- ステップ2:R内でデータベース接続を設定する
- Rでパスワードを安全に保管する
- ステップ3:R内でSQLコードを記述する
- 3章 SQL言語
- 3.1 他の言語との比較
- SQLの拡張機能
- 3.2 ANSI規格
- SQLとANSI SQLとMySQLと...
- 読者も規格に従うべきか?
- どの規格を選択すべきか?
- 3.3 SQLの用語
- 3.3.1 キーワードと関数
- 3.3.1.1 キーワード
- SQLは大文字と小文字を区別しない
- 3.3.1.2 関数
- 3.3.2 識別子とエイリアス
- 3.3.2.1 識別子
- 3.3.2.2 エイリアス
- 3.3.3 文と句
- 3.3.3.1 文
- 3.3.3.2 句
- 3.3.4 式と述語
- 3.3.4.1 式
- 3.3.4.2 述語
- 3.3.5 コメント、引用符、空白文字
- 3.3.5.1 コメント
- 3.3.5.2 引用符
- 3.3.5.3 空白文字
- 3.4 サブ言語
- SQL言語のまとめ
- 4章 クエリーの基礎
- 4.1 SELECT句
- 4.1.1 列を選択する
- 4.1.2 すべての列を選択する
- 4.1.3 式を選択する
- 4.1.4 関数を選択する
- 4.1.5 列に別名を付ける
- 4.1.5.1 大文字・小文字の区別や句読点を持つ列エイリアス
- 4.1.6 列を修飾する
- 4.1.6.1 テーブルを修飾する
- 列エイリアスとテーブルエイリアス
- 4.1.7 サブクエリーを選択する
- 非相関サブクエリーと相関サブクエリー
- 4.1.7.1 相関サブクエリーでのパフォーマンスの問題
- 4.1.8 DISTINCTキーワード
- 4.1.8.1 COUNTとDISTINCT
- 4.2 FROM句
- 4.2.1 複数のテーブルから検索する
- 4.2.1.1 テーブルエイリアス
- 4.2.1.2 JOIN .. ON ..
- 4.2.1.3 結果テーブル
- 4.2.1.4 JOINのバリエーション
- JOINのデフォルトはINNER JOIN
- 4.2.2 サブクエリーから検索する
- ステップ1:サブクエリーが実行される
- ステップ2:クエリー全体が実行される
- サブクエリーかWITH句か?
- 4.2.3 なぜFROM句の中でサブクエリーを使うのか?
- 4.3 WHERE句
- 4.3.1 複数の述語
- 4.3.2 サブクエリーによるフィルタリング
- 4.3.2.1 なぜWHERE句の中でサブクエリーを使うのか?
- 最適化より動作することを優先
- 4.3.2.2 データをフィルタリングするためのその他の方法
- 4.4 GROUP BY句
- ステップ1:行の収集
- ステップ2:行の集約
- GROUP BY句の実際の使い方
- 4.5 HAVING句
- WHERE句とHAVING句
- 4.6 ORDER BY句
- COALESCE関数
- 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.4.1 制約:列内にNULL値を許可しないNOT NULL
- 5.2.4.2 制約:列内のデフォルト値を設定するDEFAULT
- 5.2.4.3 制約:列内の値を制限するCHECK
- 5.2.4.4 制約:列内で一意の値を要求するUNIQUE
- 5.2.5 主キーと外部キーを持つテーブルの作成
- 5.2.5.1 主キーの指定
- 主キーのベストプラクティス
- 5.2.5.2 外部キーの指定
- 5.2.6 自動的に生成されるフィールドを持つテーブルの作成
- 5.2.7 クエリーの結果をテーブルに挿入する
- 5.2.8 テキストファイルからテーブルにデータを挿入する
- デスクトップのファイルパスの例
- 5.2.8.1 欠落データとNULL値
- 5.3 テーブルの変更
- 5.3.1 テーブルや列の名前の変更
- 5.3.1.1 テーブル名の変更
- 5.3.1.2 列名の変更
- 5.3.2 列の表示、追加、削除
- 5.3.2.1 テーブルの列を表示する
- 5.3.2.2 テーブルに列を追加する
- 5.3.2.3 テーブルから列を削除する
- SQLiteでの手作業による変更
- 5.3.3 行の表示、追加、削除
- 5.3.3.1 テーブルの行を表示する
- 5.3.3.2 テーブルに行を追加する
- 5.3.3.3 テーブルから行を削除する
- 5.3.4 制約の表示、追加、変更、削除
- 5.3.4.1 テーブルの制約を表示する
- 5.3.4.2 テーブルに制約を追加する
- 5.3.4.3 テーブルの制約を変更する
- 5.3.4.4 テーブルから制約を削除する
- 5.3.5 データの列の更新
- 5.3.6 データの行の更新
- 5.3.7 クエリーの結果を用いてデータの行を更新する
- 5.3.8 テーブルの削除
- 5.3.8.1 外部キーで参照されているテーブルの削除
- 5.4 インデックス
- 5.4.1 本の索引とSQLのインデックスの比較
- 5.4.2 インデックスの作成によるクエリーの高速化
- 5.4.2.1 インデックスの削除
- 5.5 ビュー
- サブクエリーかビューか?
- 5.5.1 ビューを作成してクエリーの結果を保存する
- 5.5.1.1 既存のビューの表示
- 5.5.1.2 ビューの更新
- 5.5.1.3 ビューの削除
- 5.6 トランザクション管理
- トランザクションを利用すると、なぜ安全なのか?
- 5.6.1 COMMITの前に変更を再確認する
- 5.6.2 ROLLBACKを使って変更を取り消す
- 6章 データ型
- NULLリテラル
- 6.1 データ型の選び方
- 6.2 数値データ
- 6.2.1 数値
- 6.2.1.1 整数
- 6.2.1.2 小数
- 6.2.1.3 浮動小数点数
- 6.2.2 整数データ型
- 6.2.3 小数データ型
- 6.2.4 浮動小数点データ型
- 6.2.4.1 ビットとバイトと数値
- 6.3 文字列データ
- 6.3.1 文字列値
- 6.3.1.1 文字列の基礎
- 6.3.1.2 単一引用符の代替手段
- 6.3.1.3 エスケープシーケンス
- 6.3.2 文字データ型
- 6.3.3 Unicodeデータ型
- ASCIIエンコードとUnicodeエンコード
- 6.4 日時データ
- 6.4.1 日時値
- 6.4.1.1 日付
- 6.4.1.2 時刻
- 6.4.1.3 日時
- 6.4.2 日時データ型
- 6.4.2.1 MySQLの日時データ型
- 6.4.2.2 Oracleの日時データ型
- 6.4.2.3 Oracleでの日時フォーマットの確認
- 6.4.2.4 PostgreSQLの日時データ型
- 6.4.2.5 SQL Serverの日時データ型
- 6.4.2.6 SQLiteの日時データ型
- 6.5 その他のデータ
- 6.5.1 ブールデータ
- 6.5.1.1 ブールデータ型
- 6.5.2 外部ファイル(画像、ドキュメントなど)
- 方法1:ファイルへのリンクを保持する
- 方法2:ファイルをバイナリー値として保持する
- 6.5.2.1 バイナリー値と16進値
- 6.5.2.2 バイナリーデータ型
- 7章 演算子と関数
- 演算子と関数
- 7.1 演算子
- 7.1.1 論理演算子
- 7.1.2 比較演算子
- 演算子と述語
- 7.1.2.1 BETWEEN
- 7.1.2.2 EXISTS
- EXISTSかJOINか?
- 7.1.2.3 IN
- 7.1.2.4 IS NULL
- 7.1.2.5 LIKE
- 7.1.3 数学演算子
- 7.2 集計関数
- MIN/MAXとLEAST/GREATEST
- 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.3.1 文字列の前後のスペースを取り除く
- 7.4.3.2 文字列の前後のその他の文字を取り除く
- 7.4.3.3 文字列の左側または右側から文字を取り除く
- 選択肢1:TRIM(LEADING ..)とTRIM(TRAILING ..)
- 選択肢2:LTRIMとRTRIM
- 7.4.4 文字列の連結
- 7.4.5 文字列内のテキストの検索
- SQLでのカウントは1から始まる
- 7.4.6 文字列の一部を抽出する
- 7.4.7 文字列内のテキストの置換
- 7.4.8 文字列からテキストを削除する
- 7.4.9 正規表現の利用
- 7.4.9.1 MySQLでの正規表現
- 7.4.9.2 Oracleでの正規表現
- 7.4.9.3 PostgreSQLでの正規表現
- SIMILAR TOと~
- 7.4.9.4 SQL Serverでの正規表現
- 7.4.10 データを文字列データ型に変換する
- 7.5 日時関数
- 7.5.1 現在の日付または時刻を返す
- 7.5.2 日付間隔や時間間隔の加算と減算
- 7.5.3 2つの日付または時刻の差を求める
- 7.5.3.1 日付の差を求める
- 7.5.3.2 時刻の差を求める
- 7.5.3.3 日時の差を求める
- 7.5.4 日付や時刻の一部を抽出する
- 7.5.5 日付の曜日を判別する
- 7.5.6 日付を最も近い時間単位に丸める
- 7.5.6.1 Oracleでの丸め
- 7.5.6.2 PostgreSQLでの丸め
- 7.5.7 文字列を日時データ型に変換する
- 7.5.7.1 CAST関数
- 7.5.7.2 STR_TO_DATE関数、TO_DATE関数、CONVERT関数
- 7.5.7.3 日時関数を文字列の列に適用する
- 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.1.1 複数列によるグループ化
- 効率を上げるためにGROUP BYのリストを減らす
- 8.2.2 複数の行を1つの値またはリストに集約する
- 8.2.3 ROLLUP、CUBE、GROUPING SETS
- 8.2.3.1 ROLLUP
- 8.2.3.2 CUBE
- 8.2.3.3 GROUPING SETS
- 8.3 ウィンドウ関数
- 8.3.1 集計関数の例
- 8.3.2 ウィンドウ関数の例
- ウィンドウ関数を分解する
- 8.3.3 テーブル内の行をランク付けする
- ROW_NUMBERとRANKとDENSE_RANK
- 8.3.4 各グループ内の最初の値を返す
- ステップ1:各性別で最も人気のある名前を表示する
- ステップ2:各性別で最も人気のある名前を含んでいる2行だけを返す
- 8.3.5 各グループ内の2番目の値を返す
- ステップ1:各性別で2番目に人気のある名前を表示する
- ステップ2:各性別で2番目に人気のある名前を含んでいる2行だけを返す
- 8.3.6 各グループ内の最初の2つの値を返す
- ステップ1:各性別での人気ランキングを表示する
- ステップ2:各性別で順位が1位と2位の行をフィルタリングする
- 8.3.7 前の行の値を返す
- 8.3.8 移動平均を計算する
- 8.3.9 累計を計算する
- ROWSとRANGE
- 8.4 ピボットとピボット解除
- 8.4.1 1つの列の値を複数の列に分割する
- PIVOTの代替手段:CASE
- 8.4.2 複数の列の値を1つの列にリストする
- UNPIVOTの代替手段:UNION ALL
- 9章 複数のテーブルおよびクエリーの操作
- 9.1 テーブルの結合
- JOIN句を分解する
- 9.1.1 結合の基礎とINNER JOIN
- 9.1.1.1 結合の基礎
- ステップ1:テーブル内の行のすべての組み合わせを表示する
- ステップ2:名前が一致している行をフィルタリングする
- 9.1.1.2 INNER JOIN
- 9.1.2 LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN
- 9.1.2.1 LEFT JOIN
- 9.1.2.2 RIGHT JOIN
- 9.1.2.3 FULL OUTER JOIN
- 9.1.3 USINGとNATURAL JOIN
- 9.1.3.1 USING
- 9.1.3.2 NATURAL JOIN
- 9.1.4 CROSS JOINと自己結合
- 9.1.4.1 CROSS JOIN
- 9.1.4.2 自己結合
- 例1:従業員と管理者のリストを返す
- 例2:それぞれの従業員と、同じ部署内の別の従業員とを結びつける
- 9.2 集合演算子
- 9.2.1 UNION
- UNIONは、どのようなクエリーを結合できるか?
- 9.2.1.1 UNION ALL
- 9.2.1.2 UNIONとその他の句
- 9.2.1.3 3つ以上のテーブルのUNION
- 9.2.2 EXCEPTとINTERSECT
- 9.2.2.1 EXCEPT
- 9.2.2.2 INTERSECT
- 集合演算子:評価の順序
- 9.3 共通テーブル式
- 9.3.1 CTEとサブクエリー
- ステップ1:それぞれの部署の平均給与を求めるクエリーを記述する
- ステップ2:前のクエリーを使って、平均給与が最も高い部署を求めるCTEとサブクエリーを記述する
- サブクエリーに対するCTEのメリット
- 9.3.2 再帰CTE
- 9.3.2.1 一連のデータ内で欠けている行を埋める
- ステップ1:再帰CTEを使って、my_datesという一連の日付を生成する
- ステップ2:再帰CTEと元のテーブルを左外部結合する
- ステップ3(オプション):NULL値を前日の価格で埋める
- 9.3.2.2 子の行のすべての親を返す
- 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の新機能について
- FROM句なしのSELECT文
- ブールデータ型のサポート
- IF [NOT] EXISTS構文のサポート
- GROUP BY句やHAVING句でのエイリアスの使用
- UPDATE文の直接結合
- 日付の丸めに関するCEILとFLOORのサポート
- 複数のデータ行の一括挿入
- 著者紹介
- 奥付
Product information
- Title: SQLポケットガイド 第4版
- Author(s):
- Release date: July 2024
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784814400805
You might also like
book
Pythonクイックリファレンス 第4版
本書はPythonの機能を十分に活用するためのリファレンスです。チュートリアルとしての「Pythonを使ってみる」、型アノテーションや文字列といった「Python言語と組み込み機能」、ファイルやテキスト、時間の操作、数値処理などをまとめた「Pythonの標準ライブラリと拡張モジュール」、HTTPの処理や構造化テキストを学ぶ「ネットワークとWebプログラミング」、バージョン移行などに関する「拡張、配布、バージョンのアップグレードと移行」という5部構成となっています。Pythonを本格的に学びたい人から、さらなるスキルアップを目指したい人まで、Pythonを最大限に活用するための有益な情報がぎっちり詰まった1冊です。Python 3.11対応。
book
ルールズ・オブ・プログラミング ―より良いコードを書くための21のルール
全世界で1,000万本に迫る実売数を誇り、日本でも累計実売数100万本を突破(2023年5月時点)した大ヒットゲーム『Ghost of Tsushima (ゴースト・オブ・ツシマ) 』をはじめ、『怪盗スライ・クーパー』などで著名なゲーム制作スタジオ、Sucker Punch Productions(サッカーパンチプロダクションズ)の共同創設者であるChris Zimmermanによる、プログラミングのベストプラクティス集。 全部で21の「ルール」から成り立っており、すべてのプログラマーが知っておくべき本質的な知恵と、熟練したプログラマーにとって示唆に富む洞察を含んでいます。また、コードを書く際だけでなく、デバッグや最適化の際に有用な知識にも触れています。ゲーム領域に限らず、幅広いプログラマーを対象とした、必読のプログラミング哲学。 本書で触れられるコード例はC++で書かれていますが、C++の知識は必須ではなく、オブジェクト指向の基礎知識さえあれば問題なく読むことができます。また、付録に「Pythonプログラマー/JavaScriptプログラマーのためのC++コード読解法」を掲載しています。
book
Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築
本書は、Go言語で分散サービスを構築する方法を解説する書籍です。分散サービスの概要と基本を解説し、設計、開発、およびデプロイする方法をコードを使ってハンズオン形式で学びます。はじめに、ストレージレイヤの構築とデータ構造の定義を行い、gRPCを用いてAPIを定義したサービスをネットワーク上で動作させる方法を説明します。そしてサービスを分散させて、可用性、耐障害性、拡張性を実現する方法を解説し、本番環境のKubernetesへデプロイする方法を学びます。
book
初めてのGraphQL ―Webサービスを作って学ぶ新世代API
今日では多くのWebサービスがRESTアーキテクチャスタイルで実装されています。RESTは2000年にフィールディングの論文で提唱された後に爆発的に普及し洗練されてきました。一方で、本書で紹介するGraphQLは2015年にFacebookによって公開されたRESTとは異なるアプローチのアーキテクチャです。GraphQLの最大の特徴はクエリ言語を用いてデータを操作する点です。クエリ言語の表現力の高さによりクライアントは本当に必要なリクエストを送ることができます。本書ではGraphQLの概要とGraphQLを用いたWebサービスの開発方法を実装例に沿って紹介します。認証やファイルアップロードといった実践的なトピックまで踏み込んだGraphQLの実用的な入門書です。