『スッキリわかるSQL入門』で学んだこと

良かったところ

とにかく説明がわかりやすい
なぜ、これはこうなっているのかや、内部ではこう処理している
などちゃんと解説してくれる所が良かった
この本1冊やれば、体系的にSQLが学べる

付録に練習用ドリルが付いていて、WEBで練習できる

わかったこと

全体像

DBの操作の言語は、DDLDML、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版がでたので、できれば新しい方を買ってください