良かったところ
とにかく説明がわかりやすい
なぜ、これはこうなっているのかや、内部ではこう処理している
などちゃんと解説してくれる所が良かった
この本1冊やれば、体系的にSQLが学べる
付録に練習用ドリルが付いていて、WEBで練習できる
わかったこと
全体像
DBの操作の言語は、DDL、DML、DCLがある
DDLはデータベースの構造の定義
DMLが具体的なCRUD処理
DCLが権限の付与や解除など
基本的に学ぶのはDBのCRUDの操作なので、DMLがメイン
NULLはそもそもtrueかfalseを帰す以前に存在しないのでIS NULL, IS NOT NULLを使って判別する
NOT,AND,ORが、カッコなしである場合、
NOT, AND, ORの順に処理される、必要に応じてカッコをつけると、カッコの中が先に処理される
主キーは複数のカラムによって、構成される、複合主キーが存在する
DISTINCTがSELECTにないときは、実はALLが省略されている
引数をとらない関数は、関数名の後ろに()をつけない
COALESCE関数を使うと、SELECTするときにnullがある場合、別の値を代わりにいれることができる
集計関数は、一つのグループに対して、値を一つ帰す、自分でグループ化しなければ、一つのグループとして、一つの値を帰す
集計関数を使う場合は、GROUP BYに使ったものと、集計関数をSELECTに書き、集計に関係ないものは書かない
JOIN
FRON, JOIN ON, WHERE, GROUP BY, 集計関数, HAVING, ORDER BY, LIMITという順で処理される
副問合せは、返り値にパターンが有り、単一の値か、1カラムのベクターか、カラムが複数か、一つのテーブルとして2次元のデータかを帰す
テーブルとして返ってくる副問合せは、FROMの中で使うことができる
1列のデータが返ってくるタイプは、INなどでWHEREの中で使う
JOINと書いた場合はINNER JOINで、両方のテーブルにあるデータだけ出される
LEFT JOINは左側のテーブルのすべてのデータが出て、右は一致したものだけが出る、RIGHT JOINはその逆
LEFT JOINとRIGHT JOINは書き換えができるけど、全部LEFTで書いたほうがわかりやすい
FULL JOINは、左右のテーブルのすべてのデータが出てくる
トランザクション
トランザクションは、一連の処理がすべて終わらないと、ロールバックと言って、なかったことになる
すべての処理を完了することをコミットという
トランザクションには、複数の分離レベルがあり、分離レベルが高いと、安全だが速度が遅くなる
デッドロックは、お互いがロックしようとするときに起きるけど、DBMSが自動に解決してくれるシステムがある
その他
外部キー制約をつけると、他のテーブルの主キーを参照する。削除や変更するときは順番に気をつける必要がある
特定のカラムをインデックスとして設定できる、インデックスを設定したものを参照するときはすこい早くなる
結合済みのテーブルをビューとして定義すると、次からシンプルなSQLでSELECTできる
DBにはACID特性といって、原子性、一貫性、分離性、永続性のことで
原子性とは、中途半端なデータをいれないこと
一貫性とは、データベースに狂った値が入らないこと
分離性とは、複数の処理を同時実行しても問題ないこと
永続性とは、データを消滅せず保存できること
バックアップは、バックアップしたデータと、それ以降のログファイルを使う、ロールフォワードという
DB設計
設計には、概念設計と論理設計と物理設計がある
概念設計でER図を作る
論理設計でキーを設定したり、正規化をする
正規化は第6まであるけど第3までやればいい
第1正規化は、一つのセルに一つの値をいれるようにする
第2正規化は、主キーに対する部分関数従属をなくす
第3正規化は、間接的な関数従属をなくす
物理設計では、特定のDBMSにいれるための設計をする
難しかったところ
実際にSQLの文を自分で組み立てるのが難しかった
要件をER図に落とし込むことや第三正規化やることも練習が必要と感じた
まとめ
SQLについてこの本は本当によくまとまっていて、すごいわかりやすい
逆に今まで、自分が体系的に学んでこなかったので、知識が頭の中で散らばっていたと感じた
自分が第3版を買ったときに第4版がでたので、できれば新しい方を買ってください