「初めてのSQL」を読んだ
なぜ読んだか
何年か SQL を業務で書いてきたが、しっかり勉強したことがなかった。中級者レベルの自負。 世界一流エンジニアの思考法 (文春e-book) を読んで、脳の負荷を下げるために基礎を再構築したかった。また、レベルの高い技術書の積本を崩すための基礎づくりでもある。
どんな本か
SQL の基本的な操作から始まり、単純な CRUD で使われるような SQL はこの本で十分網羅できる。12章のトランザクションは説明が少なめなので、別の本で改めて勉強したほうがよさそう。16章、17章は初学者向けではないが、実運用に役立つ内容となっている。
メモ
3章 入門:クエリ
3.3 select句
列に組み込み関数を組み込めるが、システム管理情報を取得する関数も使用できるため、セキュリティ対策が必要だと感じた。例えば、user() や database() 関数でデータベースの情報が取得できるが、取得列が可変になるようなコードを書いている場合、悪意あるアクセスによって管理情報が漏れてしまう。列チェックは必ず行いたい。3.7.2 数値のプレースホルダによる並べ替え
ORDER BY 3 desc とすると、3列目で降順に並び替えられる。列が変更される場合があるので注意が必要。
8章 集計関数
8.2.2 異なる値を数える SELECT COUNT(DISTINCT customer_id) で、customer_id ごとの集計ができる。COUNT の中に DISTINCT が書けるのは知らなかった。ウインドウ関数とは違いグループ化していない列を取得できないため、使い所はかなり限定されそう。
8.3.4 小計と総計を生成する GROUP BY 句に WITH ROLLUP オプションを追加すると小計と総計の行が追加される。小計・総計はグループ化された列の値が NULL になっている。これがあれば簡単に小計・総計を出力できて便利かも。
10章 結合
- 10.2 クロス結合 1の桁、10の桁、100の桁のテーブルと DATEADD を使用して日付型の一覧テーブルを作成できるのは便利。
終わりに
基礎から復習できてよかった。また、セキュリティについて考えさせられる点もあってよかった。今後も基礎づくりを続けていきたい。
