はじめに
今回はSQLの学習のためスッキリわかるSQL入門を読んだので
その感想についての記事になります。
良かったところ
まずSQLについてはprogateなどで以前から学習はしていたのですが
書籍を使った学習は今回が初めてでした。その上で読んで良かったことは
SQLについてどのような処理がなされているかなど深掘りできたことかと思います。
本書籍ではSQLがどのような流れで処理がなされているかをわかりやすい文章と
図を活用して教えてくれるのでSQLの入門書としては申し分のない
内容なのではないかと思います。
学んだこと
第2章 基本文法と4大命令
- 複数のSQL文を記載する際は一つのSQL文の最後に
;
をつけて文の区切りを明記する。SELECT ~ FROM ~; DELETE FROM ~;
-
SELECT
やWHERE
などの予約後は大文字でも小文字でも問題ない。 - 文字列を格納するためのデータ型のVARCHARとCHARはそれぞれ可変長と固定長ので
VARCHAR(10)
とすると10バイトまでの文字を格納できる。CHAR(10)
とすると10バイトぴったりの文字列のみ格納できる。 - UPDATEやDELETEを使う際はWHEREを使わなければデータが全件対象にされてしまうので注意が必要。
第3章 操作する行の絞り込み
- nullのデータを探すには
IS NULL
,IS NOT NULL
を使う。=
,<>
では判定できない。SELECT ~ FROM ~ WHERE ~ IS NULL(IS NOT NULL)
- 論理演算子を複数使用した条件式の場合
NOT
,AND
,OR
の順に処理がされる。 - レコードを特定するための主キーは複数の列を一つの主キーとすることができ複合主キーと呼ぶ。
第4章 検索結果の加工
-
ORDER BY
カンマ区切りで複数の列を指定可能。最初に指定した列から優先的に並べ替えが行われ、同じ値の列の行は次に指定した列の順に並べ替える。SELECT ~ FROM ~ ORDER BY ~ ASC(ASCは省略可能), ~ DESC
-
OFFSET
,FETCH
で取得する行の件数を指定できる。また、DBMSによっては対応していないものもある。SELECT ~ FROM ~ ORDER BY ~ OFFSET 先頭から除外する行数 ROWS FETCH NEXT 取得行数 ROWS ONLY
第5章 式と関数
- 関数は使用するDBMSによって使用できないものや名前や動作が違うものがあるためその都度調べて使う必要がある。
第6章 集計とグループ化
-
COUNT
関数の引数に列名を指定した場合はNULL以外をカウントして件数を返す。 - 集計関数を使用する際の4つの注意点
- SELECT,ORDER BY,HAVINGの中でしか使用できない。
- 複数行取得する文とは一緒に実行できず表に表した際に長方形になるような結果にならなくてはいけない。
- 関数の引数それぞれで使用できる列の型が異なる。
- 関数によってNULLを無視してカウントするなど対応が異なる。
- 集計結果に対して絞り込みを行う際は処理の流れとしてまずWHEREでグループ化されていない元のテーブルに対して検索を行うためWHEREの中で集計関数は使えない。よってこういう時はHAVINGが必要。
第7章 副問い合わせ
- 副問い合わせのパターン
- 結果が1行1列になるものを単一行副問い合わせという
- 結果がn行1列になるものを複数行副問い合わせという
- 結果がn行n列になるものも使用される
第8章 複数テーブルの結合
- データを複数のテーブルに分けた方が安全、確実にデータを管理しやすい
- テーブル結合する際に結合する1つの行に対して2つ以上の合致した行があった場合は合致した行数分コピーして結合する。
第9章 トランザクション
- 1つ以上のSQL文をひとまとまりにしたものをトランザクションと言い、ある処理がなされてもセットになっていた他の処理がなされなければ全ての処理が巻き戻される。(ロールバック)
- トランザクションを実行する際に他トランザクションからの影響を受けないようにするために該当の行を他のトランザクションからは読み書きできないようにする。(ロック)
第10章 テーブルの作成
- 参照整合制の崩壊には以下の4つのパターンがあり外部キー制約で未然に防ぐ必要がある
- 参照されている行を削除する
- 参照されている行の主キーを違う値に変更する
- 存在していない行を参照している行を追加する
- 存在しない行を参照する行に変更してしまう
第11章 さまざまな支援機能
- インデックスに指定すると効果が得られやすい列
- WHERE句に頻繁に登場する列
- ORDER BY句に頻繁に登場する列
- JOINの結合条件に頻繁に登場する列(外部キー)
難しかったこと
テーブル設計の部分に関して一番ボリュームがあったと思うのですが、
この分野は難しくそれはまた別のテーブル設計に特化した
書籍で学習した方が良いと思いました。
最後に
感想の中でも述べましたがSQLを学んでまだまもない人もしくは
全く知識がない人が最初に読む書籍としてはぴったりだと思います。
これからSQLを学習する人は読んでみることをお勧めします。