📚

「スッキリわかるSQL入門 第3版 ドリル256問付き!」を読んだ感想!

2023/04/26に公開

これからこちらの本を読んでいきます。
率直に思ったこと等、感想をつらつらと述べていきます。
購入に迷ってる方やどういう本なのか気になってる方のお役に立てればと思います。
https://book.impress.co.jp/books/1121101090

はじめに

本書は内容を読んでインプットするだけでなく、ドリルを解答しながらアウトプットして学習していく形式になっています。
基礎的な内容を手を動かしながら学習していける点はとても良いと感じました。
また、SQLの実行環境としてdokoQL(https://dokoql.jp/workspace)というクラウドサービスを利用しており、環境構築のハードルも最小限ですので初学者にとって非常に学習しやすい教材ではないかと思います!
(環境構築でつまずいてやる気が削がれるのはあるあるですよね~)

第一部SQLを始めよう

第一部ではSQLの極々基本的なルールを説明する章とってなっていて、SQLを学習したことがある人であればさらっと読み飛ばせる内容ではないかと思います。

学習キーワード

  • SELECT(検索),INSERT(追加),UPDATE(更新),DELETE(削除)
  • データ型(INTEGER, VARCHAR, DATE etc.)
  • WHERE(絞り込み条件)
  • 主キー(PRIMARY KEY)
  • DISTINCT(重複の除外)
  • ORDER BY(データの並び替え)
  • 集合演算子(和集合、差集合、積集合)

第二部SQL使いこなそう

これまでメインで触ってきたのはSQL Serverだったため、他のデータベースの関数等初めて知るものもあり勉強になりました。
また、同じことを実現するにしても記述の違いがあり複数のデータベースを同時に扱っているとこんがらがりそうだなーと思いました。
副問い合わせ、テーブル結合は特にパフォーマンスに影響を与えることが多いと思うので学んだことを意識しながら利用していきたいです。

学習キーワード

  • 算術演算子(+,-,*,/ etc.)
  • 関数(LENGTH,ROUND,CAST etc.)
  • 集計について(SUM,MAX,MIN,AVG,COUNT,GROUP BY,HAVING etc.)
  • 副問い合わせ(単一の値,列挙された複数値,表形式の複数値)
  • テーブル結合(JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN)

第三部データベースの知識を深めよう

トランザクションの分離レベルは安全性と速度がトレードオフの関係にある。
そのため、システムの特性に合わせた選択が重要になる。
(高速:READ UNCOMMITTED ----- SERIALIZABL:安全)

トランザクションの分離レベル毎の同時実行による副作用
※●:発生する可能性あり

分離レベル ダーティーリード 反復不能読み取り ファントムリード
READ UNCOMMITTED
READ CIMMUTTED -
REPEATABLE READ - -
SERIALIZABLE - - -

ロックについても同様に安全性と速度(利便性)がトレードオフの関係にあるため、ロックする対象を適切に選択することが重要になる。

学習キーワード

  • トランザクション
  • ロック(行ロック,表ロック,データベースロック)
  • テーブル,ビュー(CREATE,DROP)
  • 制約(NOT NULL,UNIQUE,CHECK,PRIMARY KEY,FOREIGN KEY)
  • シーケンス
  • インデックス

第四部データベースで実現しよう

本の中でも記載されていたが、唯一の正解があるわけではないのでこれまでの内容と比べると少し難しいなと感じました。
要件に応じてその時々で適切に判断していく思考が必要だと思いました。

設計

概念設計:要件からデータを管理するにあたってどのような情報が必要なのか整理を行う。
論理設計:概念設計の内容からどういったテーブルが必要か、どういう列が必要かを設計する。
物理設計:論理設計の内容からどういう型にするか、どういう制約にするか等を設計する。

正規化

論理設計のタイミングで正規化を実施します。
第一正規化:同じセルの内容が繰り返される列の排除
第二正規化:複合主キーの一部への関数従属の排除
第三正規化:間接的な関数従属の排除

こちらは言葉だけではあまりよくわからないですね。
わかりやすく説明しているサイトがありましたので、こちら参考にしていただくとわかりやすいと思います。(https://pyming.info/2022/04/05/it_dbnormalize/)

学習キーワード

  • データベース設計(概念設計,論理設計,物理設計)
  • 正規化

Discussion