今回SQLの勉強をするにあたり、スッキリわかるSQL入門(第3版)を教材としてインプットを行いました。
一通り読み終わったので感想を書いていきます。
SQLとは
感想に入る前にSQLについて軽く触れておこうと思います。
SQLは「Structured Query Language」の略称であり、データベースを作成・操作するための標準的なプログラミング言語です。 データベースとは顧客情報や商品リストなどのデータ集合を構造化し、効率的な管理や検索を可能にするシステムです。 データベースには複数の種類が存在しますが、本書ではリレーショナルデータベース(RDB)について説明されています。
良かったところ
- 講師と生徒の会話形式で話が進めため、初学者に寄り添った内容になっており分かりやすい
- 本書専用のクラウドサービス(dokoQL)が提供されており、環境構築なしにSQL文の作成・実行が行える
- 練習問題が256問と豊富にあり、手を動かしてSQL文を作成するため頭に入りやすい
- SQLの基本からデータベース設計までの内容が網羅されており、一冊である程度知識がつくようになっている
微妙だったところ
- dokoQLに答え合わせ機能がなく、入力内容と答えが一致しているか目視で確認する必要がある
- dokoQLのメイン画面から次の例題に移行するボタンがなく、毎度 ライブラリ>章の選択>例題をクリックする必要がある
- 練習問題で分からず答えを見た時に、解説がないので理解が出来ない場合がある(なぜその答えになるのか分からない)
学んだこと
第1章 はじめてのSQL
第2章 基本文法と4大命令
- 格納できるデータの種類(データ型)
- 4大命令(
SELECT
・UPDATE
・DELETE
・INSERT
)の基本構文
第3章 操作する行の絞り込み
- 演算子による操作する行の絞り込み
- NULLは何と比較してもtrueとならない(NULL同士でも)
- テーブルに存在する主キーの意味やルール
第4章 検索結果の加工
- SELECT分で取得したデータの加工法(
DISTINCT
・ORDER BY
・OFFSET
...etc) - 集合演算子の使い方
第5章 式と関数
- 計算式を評価すると計算結果に化ける
- 文字列に
||
や+
計算式を用いる事で文字列の連結ができる - 関数の使い方とどのような関数があるか
第6章 集計とグループ化
- 集計関数(
SUM
・MAX
・MIN
・AVG
・COUNT
)で検索結果のデータを集計 GROUP BY
でグループ別に集計を行えるHAVING
とWHERE
の違い
第7章 副問い合わせ
- SQL文の中に別のSELECT文を記述するサブクエリ(副問い合わせ)
- 単一行副問い合わせ(1つの値) →
SELECT
SET
- 複数行幅問い合わせ(n行1列) →
IN
ANY
- 表形式幅問い合わせ(n行m列) →
FROM
INSERT
第8章 複数テーブルの結合
- 通常テーブルは複数のテーブルによって管理される
- 他の行と関連付けするために外部キーを使ってテーブルを結合する
- テーブル結合する上でのルール
第9章 トランザクション
- 複数のSQL文を1つのSQL文として扱うことができる(トランザクション)
- トランザクションは全て実行されたか、1つもされていないかのどちらかの状態になる
- トランザクションの分離レベルによって副作用(ダーティーリード・反復不能読み取り・ファントムリード)が起こる危険性を選択できる
- 分離レベルを厳密なものにしすぎると、DBMSの速度が損なわれる
第10章 テーブルの作成
- SQL文の種類
- データテーブルの作成・削除・更新
- 予期しない値が格納されないように制約を設ける(
NOT NULL
・UNIQUE
・CHECK
)
第11章 さまざまな支援機能
- インデックスは主に列に対する検索の対象となった時に高速となる
- ビューはSELECT文の結果を仮想的なテーブルとして扱う事ができるが、その実態は単なるSELECT文なのでDBMSの負荷は変わらない(記述量は減る)
シーケンスは主キーが連番の場合などに自動で連番を生成してくれる
正確なデータ処理にはACIDが求められる
- Atomicity(原子性): 処理が中断されても中途半端にならない
- Consistency(一貫性): データの内容が矛盾した内容にならない
- Isolation(分離性): 複数の処理を同時実行しても副作用がない
- Durability(永続性): 記録した情報は消滅せず保持され続ける
第12章 テーブルの設計
- 概念設計・論理設計・物理設計によるデータベース設計
- ER図の見方
- 第1~3正規形でテーブルを適切に分割する
難しかったところ
本書では第一部(1~4章)と第二部(5~12章)に構成が分かれており、第一部ではSQLの基本構文、第二部では式や関数を使ったより実践的なSQLの構文を学習します。
第二部からは個人的には全て難しく感じましたが、特に第8章の「複数テーブルの結合」から中々理解が追いつきませんでした。
というのも、上から下へ順番に処理が行われないSQL文で、この行の時点ではこのような表形式になっていると頭の中でイメージできなくなってしまったからです。
最終章はデータベース設計について学ぶのですが、これは一番難しかったですね。主に以下の内容で頭がかなり混乱しました。
- ER図の出現
- データーベース設計における制約の多さ
- 正規化の概念
本来ボリュームがある内容を1章で纏められているため、ここはデータベース設計の教材を別で用意する事をお勧めします。 SQLについては問題形式で練習ができるサイトがあるようなのでそこで鍛えようと思っています。