rocky-engineer7の技術日記

webエンジニアを目指して奮闘中!!

【初学者向け】スッキリわかるSQL入門の感想

はじめに

スッキリわかるSQL入門 第3版を読了したので、こちらにまとめたいと思います。

https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BSQL%E5%85%A5%E9%96%80-%E7%AC%AC3%E7%89%88-%E3%83%89%E3%83%AA%E3%83%AB256%E5%95%8F%E4%BB%98%E3%81%8D-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8B%E5%85%A5%E9%96%80%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1/dp/4295013390/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1CXP9T0IB8NFP&keywords=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E5%88%86%E3%81%8B%E3%82%8Bsql&qid=1707119623&s=instant-video&sprefix=%E3%81%99%E3%81%A3%E3%81%8D%E3%82%8A%E3%82%8F%E3%81%8B%E3%82%8Bsql%2Cinstant-video%2C158&sr=1-1

良かったところ

  • イラストや図形、コードがちゃんと記載されているので初学者でも抵抗なく学べる
  • dokoQLという書籍用のDBが用意されているのでインプット→アウトプットがスムーズに行える。また、結果表でどのように出力されるのかを可視化できるのは手を動かしながら行えるのでとても良い。
  • 論理設計メインだが、物理設計の内容も紹介されているので良い
  • 付録でそれぞれのDBの簡易リファレンスがついている
  • 256問の特訓ドリルが用意されているので、インプットだけで終わりではなくアウトプットもしっかり行える

dokoQLについて

ログインせずにもできますが、機能制限で書籍を読み進める妨げになるのでアカウント作成がオススメです。

dokoql.jp

左端のメニューバーの一番上にライブラリをクリックしてもらうと、そこから書籍の版数を選択できるます。選択していただくと、各章のコードと章末問題の解答、付録の特訓ドリルにある3つのデータベースが開けるようになっています。

進め方について

僕自身1章から12章までを綺麗に全部読んで、その後256問解き読了したのですが非常に効率の悪いやり方だったなと反省しました。

この本を読んだことがなく、SQLをまだ学び始めて日が浅い方向けにおすすめの読み方を紹介します。

この本の構成として、1章から12章まであって後ろに256問の特訓ドリルで構成されています。

さらに特訓ドリルの内訳として、3つのデータベースがあり1つのデータベースで70問用意されています。210(70問×3)問分は2章〜8章の内容です。

なので、1章&2章(章末問題も含めて)を終わらせて、特訓ドリルの3つのデータベースの2章の部分の問題を解く。 3章から8章も上記の流れで解いてもらうのが、効率よくインプット→アウトプットの流れができると思います。

補足: 特訓ドリルの問題は、先述したdokoQLのライブラリから版数を選択して、付録の特訓ドリル項目から3つのデータベースを選択してもらうとDB,エディタ,結果が分かる画面に映るので実際に手を動かしながらやった方が絶対良いです。

9章から12章を一気に読み進めて、最後特訓ドリルの残りの問題を解いてフィニッシュです!

少しでも書籍を読み進める手助けになれば嬉しいです。

学んだこと

ここからは学んだことのまとめを書いていきます。

SQLとは?

  • データベースマネジメントシステムに対して、SQL文(命令文)を送信してデータベースの読み書きを実行する

4大命令とは

  • SELECT,UPDATE,DELETE,INSERTの4つ
  • 4大命令の分類
    • 検索系:SELECT
    • 更新系:UPDATE,DELETE,INSERT
  • 処理対象とするテーブル名を必ず指定する
  • UPDATE文とDELETE文はWHERE句で対象の行を絞り込まないとテーブル全件に変更が適用されてしまう

WHERE句

  • 対象データの絞り込みに利用
  • SELECT, UPDATE, DELETE文で使うことができる演算子

演算子

比較演算子

  • <= : 左辺は右辺の値以下
  • >= : 左辺は右辺の値以上
  • <> : 左右の値が等しくない
  • IS NULL, LIKE, BETWEEN, IN, ANY, ALL

論理演算子

  • AND, OR, NOT
  • 論理演算子は、NOTANDORの順で優先度が高く、先に評価される

NULL

  • データが格納されておらず、未定義の状態を「NULLが格納されている」と表現する
  • 数字のゼロや空白文字とは異なる
  • NULL=で判定できない
    • IS NULLもしくはIS NOT NULLで判定

主キー

  • この値を指定することで、ある1行を完全に特定できる」という役割を担う列のこと
  • プライマリーキー(primary key)ともいう

自然キー (Natural Key)

  • 自然に登場し、主キーの役割を果たせる列のこと
  • 例: 社員情報を管理する社員テーブルで、名前や性別に加えて社員番号という列が自然に思いつく

人工キー (Artificial Key) または代替キー (Surrogate Key)

  • 管理目的のためだけに人為的に追加された列のこと

検索結果の加工

主なキーワード

  • DISTINCT
    • 重複行を除外する
  • ORDER BY
    • 順序を並べ替える
    • DBMSにとっては負荷のかかる作業
  • LIMIT / OFFSET - FETCH
    • 件数を限定して取得する
  • UNION / EXCEPT / INTERSECT
    • 検索結果の集合演算(和集合、差集合、積集合)

関数

  • 関数は文字列関数、算術関数、日付関数、変換関数などに分類される。
  • 実際のSQL文記述を通じて覚える。

集計関数

  • SUM
    • 各行の値の合計を求める
  • MAX
    • 各行の値の最大値を求める
  • MIN
    • 各行の値の最小値を求める
  • AVG
    • 各行の値の平均値を求める
  • COUNT
    • 行数をカウントする
    • COUNT(*) はNULLの行も含めてカウント
    • COUNT(列) はNULLでない行のみカウント

集計関数の注意点

  • SELECT文、ORDER BY句、HAVING句でのみ使用可能。
  • WHERE句では使用不可。
  • 結果表は必ず長方形になる。

グループ化

  • GROUP BY
    • 集計に先立って、指定した基準で検索結果をグループ分けする。
  • HAVING
    • 集計処理を行った後の結果表に対する絞り込みに使用。

その他の関数

  • COALESCE
    • 最初に登場するNULLでない値を返す。

副問い合わせ(サブクエリ)

  • 副問い合わせは、他のSQL文の一部として登場するSELECT文
  • 丸括弧で囲んで記述され、内側のSELECT文が先に実行され、その結果を外側のSQL文が利用

副問い合わせのパターン

  • 単一行副問い合わせ: 結果が1行1列になるもの。
  • 複数行副問い合わせ: 結果が複数行1列になるもの。
  • 表形式副問い合わせ: 結果がn行m列の表になるもの。

複数テーブルの結合

データベースでは、データを複数のテーブルに分けて格納し、外部キーを使用してリレーションシップを構築します。これにより、結合を用いて複数のテーブルに格納された関連データを1つの結果表にまとめることができます。

結合の種類

  • INNER JOIN: 条件に一致するレコードのみを表示。
  • LEFT JOIN / RIGHT JOIN: 片方のテーブルにないデータはNULLとして表示。
  • OUTER JOIN: どちらかのテーブルにあるレコードを全て表示。

トランザクション

トランザクションは、複数のSQL文を1つの命令として扱うもので、DBMSトランザクションの原子性や分離性を保つように制御します。

トランザクションの特性

  • 原子性: 全ての処理が実行されるか、1つも実行されない。
  • 分離性: 他のトランザクションからの影響を受けない。
  • ロック: 行や表、データベース全体にロックをかけることができる。

テーブルの作成

データベースにデータの出し入れを指示する立場と、必要なテーブル準備や設定を行う立場があります。

SQL命令の種類

  • DML (Data Manipulation Language): データの格納、取り出し、更新、削除。
  • DDL (Data Definition Language): テーブルの作成、削除、設定変更。

テーブル作成時の制約

  • NOT NULL制約: NULLの格納を防ぐ。
  • UNIQUE制約: 重複した値の格納を防ぐ。
  • CHECK制約: 値の妥当性をチェック。
  • 主キー制約: 主キーとして扱う列に設定。

様々な支援機能

インデックス

  • テーブルの列に索引情報を生成。
  • インデックスが存在する列の検索は高速化されるが、書き込み性能の低下もあるため乱用は禁物。

ビュー

  • SELECT文の結果表を仮想的なテーブルとして扱う。
バックアップ
  • ACID特性(原子性、一貫性、分離性、永続性)を保証するために重要。
  • ログファイルもバックアップし、障害時にロールフォワードで復元可能。

テーブルの設計

データベース設計のプロセス

  • 概念設計: エンティティとその関連を明らかにする。
  • 論理設計: キー設計や正規化を行い、RDB用のモデルに変換。
  • 物理設計: DBMS製品に依存した詳細な設計。

おわりに

ページ数が多いので技術書慣れしていない分大変苦労して読み切りました。

そのおかげか、書籍の全体の構成を把握してどのように進めばいいのかということも工夫して効率良く学ぼうときっかけをくれた教材でした。

SQL自体がかなり久しぶりだったので、改めて体系的に学ぶことができて良かったです。