ソニックの部屋

主にプログラミングに関する記事を投稿します

「スッキリわかるSQL入門」を読む(導入は別教材を参照)

気になった用語等をまとめる(第Ⅲ部以降を中心に、細かい所はきる)

導入

学んだこと

select xxx
from xxx
where xxx ~ 正規表現  # ~がポイント

0章

学んだこと

  • 特になし

第Ⅰ部 SQLを始めよう

1章 はじめてのSQL

学んだこと

3命令 意味
select その行の内容を取得する
update その行の内容を更新する
delete その行を削除する
insert その行のデータを追加する

2章 基本文法と4大命令

学んだこと

  • 1章参照

3章 操作する行の絞り込み

学んだこと

  • where句には条件を書く(TRUEとなる行だけが選ばれる)
  • nullとは何も格納されていないもの(ゼロや空白とは異なる)

4章 検索結果の加工

学んだこと

  • distinctは必ずselect文の最初に書く
  • unionなどを使う際は必ず対象テーブルの列数とデータ型を一致させる

第Ⅱ部 SQLを使いこなそう

5章 式と関数

学んだこと

  • ストアドプロシージャとは複数のSQL文をまとめたもの
  • 関数は()を付けるのがポイント
  • coalesceはnullの代替値を決定できる
select coalesce(メモ, 'メモはNULLです') as メモ
from ...

6章 集計とグループ化

学んだこと

  • 集計関数の結果は必ず一行
  • 集計関数はselectかhavingで書く
  • nullを含む計算や比較は基本的に結果はnull、一方で集計関数はnullは無視される
  • groupbyの際にselectに書けるのはgroupbyで指定したカラムか集計関数のみ

7章 副問い合わせ

学んだこと

  • 一行一列、多行一列、多行多列の三パターン
  • 多行一列はinでよく使う
  • inは列挙されたいずれかの値と等しければTRUE(nullを無視する)
  • not inは列挙された値のどれとも一致しなければTRUE(nullがあれば全体の結果がnullとなる)
  • fromのサブクエリはasで別名を付けると速度が早くなる可能性あり
  • 相関サブクエリとはサブクエリからメインクエリの表や列を利用するもの
-- 他のテーブルの値が登場する行のみ抽出(existsを使った典型的なパターン)
-- 繰り返しサブクエリを実行するため負荷大
select *
from A
where exists
(select *
from B
where A.列 = B.列)

8章 複数テーブルの結合

学んだこと

  • 繋ぐべき右表の行が複数ある時左表の行を複製して結合する
  • 自己結合により行間比較を可能にする

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

9章 トランザクション

学んだこと

トランザクションの指示(これで一つのトランザクションを表す)
begin
xxx
commit -- 変更を確定
xxx
------------
begin
xxx
rollback -- 変更を取り消し
xxx
  • ②はロックにより成り立つ
  • 正確なデータ操作とパフォーマンスは相反するため許容できる分離レベルを決定する
  • ロックの対象は行だけでなくテーブルやDBまで及ぶ
  • デットロックとはトランザクションの処理が途中で永久に止まること

10章 テーブルの作成

学んだこと

  • テーブルへの権限を付与するgrant文、剥奪するrevoke文
  • 人為的ミスを避けるためにはcreate table文に様々な制約を付ける(一貫性)
  • 主キーが果たす二つの責任は「非null、重複なし」

11章 さまざまな支援機能

学んだこと

  • 検索を早くするには指定列にインデックスを張る
  • ビューはselect文を保存する
  • バックアップ(永続性)

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

12章 テーブルの設計

学んだこと

  • 概念設計での情報の塊をエンティティと言い複数の属性を持つ
  • エンティティはテーブル、属性はカラムのイメージ
  • 概念設計はER図で表す(エンティティ、属性、リレーションを俯瞰して見る)
  • 論理設計では正規化(矛盾したデータを格納できないようにテーブルを分割する)を行う
ステップ 要件
第1正規形 テーブルの全ての行の全ての列に一つずつ値が入っているべきである。よって「繰り返しの列」や「セルの結合」が現れてはならない
第2正規形 複合主キーを持つテーブルの場合、非キー列は複合主キーの全体に関数従属すべきである。よって「複合主キーの一部の列に対してのみ関数従属する列」が含まれてはならない
第3正規形 テーブルの非キー列は主キーに直接関数従属すべきである。よって「主キーに関数従属する列にさらに関数従属する列」は存在してはならない
  • 物理設計ではDBMSの選定、テーブルや列名、型等を決定する

最後に

良かったところ

わかりやすい

悪かったところ(もしあれば)

なし

学んだこと

基本的なSQLの文法や考え方

難しかったこと

なし

参考文献
スッキリわかるSQL入門
中山 清喬, 飯田 理恵子/株式会社インプレス/2018


キノコード / プログラミング学習チャンネル, SQL超入門コース 合併版|SQLの超基本的な部分をたった2時間半で学べます【SQL初心者向け入門講座】(2023/9/14取得).