【スッキリわかるSQL入門】を読んでみて

2023/08/14に公開

こんにちは!
駆け出しエンジニアのブログ2本目になります。
前回より期間が空いてしまいましたが、先日タイトルにもある【スッキリわかるSQL入門】を読み終えたので感想をまとめ行こうと思います。

①なぜこの本を読むきっかけになったのか?

現在業務でもSQLを使う現場でもあり、SQLの勉強をするためにはどれがいいか考えました。
・本
・Udemy
上記のどちらかで検討してました。
結果として本を選択した理由としては、本の方が全く知識がない、かじったことがあるがどんな文法があるかわからない人に対しての本が多かったので本を選択しました。
※もちろん人によっては動画学習の方がいいという人もいるので上記に関しては一個人の意見として受け取っていただきたいです。

また本を読みだけでは身につかない、実際にコードを書きながらの方が身につくと思い、SQL環境も備わっていた本にしました。
参考までに今回購入した本のリンクを記載します。
スッキリわかるSQL入門

②本を読んでみて新しい知識になった箇所

COUNT(*)とCOUNT(列)の違い

COUNT(*)は、行数のカウントをする(NULLの行も含む)
COUNT(列)は、指定列がNULLである行を無視してカウントする

・COUNT(*)の場合

SELECT COUNT(*) AS 食費の行数
FROM 家計簿
WHERE 費目 = '食費'

・COUNT(列)の場合

SELECT COUNT() AS 食費の行数
FROM 家計簿
WHERE 費目 = '食費'

どちらもほぼ同様の動きをしますが、NULLがあるかないかで結果が異なる。

グループ集計の流れ

①検索
WHERE句によって行を絞り込む
②グループ化
グループごとに検索結果を分類する
③集計・列選択
各グループを集計する
SELECT句によって列を絞り込む

副問い合わせのパターン

①副問い合わせの結果が、1行1列になるものを単一行副問い合わせ
②副問い合わせの結果が、n行1列になるものを複数行副問い合わせ
③副問い合わせの結果が、n行m列の表形式になる副問い合わせもある

副問い合わせ(サブクエリ)に関しては、①の時は想定がつきやすいが②と③は複数になるので
実際に曖昧な場合はサブクエリのみ実行してみて挙動確認をする。

リレーションシップ

・本格的にデータベースを活用するには、データを複数のテーブルに分けて格納する。
理由としては、安全、確実に管理しながら、必要に応じて人間にわかりやすい表に結合することができる。
・他のテーブルの行と関連つけるために、外部キーを利用する。
外部キーとは、関連する他テーブルの列の値を記述した列である。

結合構文のバリエーション

・3テーブル以上の結合も、上から順に1つずつ処理させる
・副問い合わせの結果表と結合することもできる
・自分自身のテーブルと結合することができる

4種類のSQL命令

①データを格納したり取り出したりする場合は、DMLに属する命令を使う
(SELECT、INSERT、UPDATE、DELETEなど)
②データを格納するテーブル自体を作成したり削除したりする場合は、DDLに属する命令を使う
(CREATE、ALTER、DROPなど)
③トランザクションの開始や終了を指示する場合は、TCLに属する命令を使う
(COMMIT、ROLLBACKなど)
④DMLやDDLに関する許可や禁止を設定する場合は、DCLに属する命令を使う
(GRANT、REVOKE)

制約

テーブル作成時に各列に制約を設定し、予期しない値が格納されないように安全装置を設ける
・NOT NULL制約:NULLの格納を防ぐ
・UNIQUE制約:重複した値の格納を防ぐ
・CHECK制約:格納しようとする値が妥当かどうかチェックする

その他様々な機能

・インデックス
テーブルの列に対して、索引情報を生成することができる。
※インデックスは書き込み機能の低下を招くこともあるので乱用は注意。

・ビュー
SELECT文の結果表を仮想的なテーブルとして扱うことができる

・採番とシーケンス
連番を生成する列定義やシーケンスを使って、連番を簡単に取得できる。
※シーケンス:採番した最新の値を常に記憶しており、シーケンスに指示すると現在の値や次に値を取り出すことができる。

③本を読んでみての感想

駆け出しエンジニアの自分でもわかりやすいぐらい丁寧な内容になっており、読んで良かったと思いました。
また実際に手を動かして行え、パソコンでなくてもスマホからでもできるので電車移動中でも気軽に勉強できる。
前半は基礎的な内容になっているが、後半は実際にテーブル作成などもあるのでSQLでできることを一通り学ぶには非常に有意義に感じました。

現在も勉強中でもあるので気づいたことなどはこまめに更新していけるように改善していきます。
また私の記事を見ていただいて誤って記載しているところなどがあれば是非ご指摘いただけると幸いです。

Discussion