何かやってみるブログ

興味をもったこと、趣味のこと、技術について色々書きます。

SQL 第2版 ゼロからはじめるデータベース操作を読んだ

SQL 第2版 ゼロからはじめるデータベース操作を読んだので備忘録として残します。

SQL 第2版 ゼロからはじめるデータベース操作

SQL 第2版 ゼロからはじめるデータベース操作

  • 作者:ミック
  • 発売日: 2016/07/11
  • メディア: Kindle版

第0章 イントロダクション

  • Postgresqlのインストール

https://www.postgresql.org/download/macosx/

第1章 データベースとSQL

  • SQLはその目的によってDDL、DML、DCLに分類できる。

DDL ( データ定義言語 )

データベースを作成したり削除したりする

CREATE: データベースやテーブルを作成する

DROP: データベースやテーブルを削除する

ALTER: データベースやテーブルの構成を変更する

DML ( データ操作言語 )

テーブルの行を変更したり検索したりする。

SELECT: テーブルから行を検索する

INSERT: テーブルに新規行を追加する

UPDATE: テーブルの行を更新する

DELETE: テーブルの行を削除する

DCL ( データ制御言語 )

データベースに行った変更を確定したり取り消したりする。データベースを使用するユーザーの権限を管理する。

COMMIT: データベースに対して行った変更を確定する

ROLLBACK: データベースに対して行った変更を取り消す

GRANT: ユーザーに操作の権限を与える

REVOKE: ユーザーに操作の権限を奪う


  • ISO) が定めた標準規格に準拠したSQLを標準SQLという。
  • 文字列と日付の定数はシングルクォーテーションで囲む。

データ型の指定

  • INTEGER型  整数
  • CHAR型 固定長文字列の文字列
  • VARCHAR型 可変長文字列
  • DATA型 日付

第2章 検索の基本

  • WHEREで等しくない条件で検索する時は != ではなく<>を使う
  • 複数の検索条件を組み合わせる時は ANDORを使う
  • NULLを検索条件を含める時は IS NULL、含めない時は NOT NULLを使う。

第3章 集約と並び替え

GROUP BYはテーブルをカットするために使う。

集約関数

  • COUNT: テーブルのレコード数を数える
  • SUM: テーブルの数値列のデータを合計する
  • AVG: テーブルの数値列のデータを平均する
  • MAX: テーブルの任意の列のデータの最大値を求める
  • MIN: テーブルの任意の列のデータの最小値を求める

  • 重複値を除外したい時はDISTINCTを使う
  • WHERE句 = 行に対する条件指定、 HAVING句 = グループに対する条件指定
  • ORDER BY句では、SELECT句でつけた別名を利用できる

第4章 データの操作

UPDATE文

UPDATE <テーブル名> SET <列名>= <式> WHERE <条件>
  • トランザクションとは データベースに対する1つ以上の更新をまとめて呼ぶ時の名称
  • トランザクションの開始
-- PostgresSQL, SQL Serverの場合
BEGIN TRANSACTION
-- My SQL の場合
START TRANSACTION

ACID特性

http://e-words.jp/w/ACID特性.html

第5章 複雑な問い合わせ

  • VIEW(ビュー)とはSELECT文の実行結果に名前を付けて、TABLEと同じようにアクセスできるもの
  • サブクエリとは使い捨てのVIEWのこと
  • スカラサブクエリとは戻り値が単一になるサブクエリのこと
  • 相関サブクエリを使うと小分けしたグループ内で比較できる。

https://qiita.com/aki3061/items/736abd6ea883ba647586

第6章 関数、述語、CASE式

関数の種類

  • 算術関数: 数値の計算を行うための関数
  • 文字列関数: 文字列を操作するための関数
  • 日付関数: 日付を操作するための関数
  • 変換関数: データ型や値を変換するための関数
  • 集約関数: データの集計を行うための関数

いろいろある https://www.postgresql.org/docs/12/functions.html


述語

  • LIKE: 文字列部分一致検索
  • BETWEEN: 範囲検索
  • IS NULL、IS NOT NULL: NULLかどうかの判定
  • IN: ORの便利な省略形

第7章 集合演算

  • 集合演算とは、レコードを足したり引いたりすること
  • 集合演算を行うにはUNION(和)、INTERESCT(交差)、EXCEPT(差)などの集合演算子を使う。
  • 集合演算子は重複を排除するが、残すにはALLオプションをつける

  • UNIONなどの演算子によって行を増やすことができるが、列を増やすことが出来ない。列を増やすにはJOINという演算子を使う。
  • 内部結合と外部結合

https://qiita.com/naoki_mochizuki/items/3fda1ad6594c11d7b43c

  • LEFTを使うと左のテーブルをマスタとし、RIGHTを使うと右のテーブルをマスタにする。
  • 3つ以上のテーブルを内部結合する時はINNER JOIN句を使う

第8章 SQLで高度な処理を行う

ウィンドウ関数(OLAP関数)

利用方法 memo

  • 集約関数(SUM、AVG、COUNT、MAX、MIN)をウィンドウ関数として使う.
  • RANK、DENSE_RANK、ROW_NUMBERなどのウィンドウ専用関数を使う。
  • ORDER BYの後ろに範囲指定のキーワードを使用すると集計範囲(フレーム)を指定できる。

ex) PRECEDING、FOLLOWING

Grouping演算子

  • ROLLUP
  • CUBE
  • GROUPING SETS