[2020-12-20-1] にも書いた通り、去年の 4 月から SQL と格闘する毎日です。もっとも全部自分で書くわけではなく、Looker が出力する SQL を理解したり、発生したエラーやデータ不正の原因を SQL 視点で調査したり、検証用の使い捨ての SQL を書いたりといった感じです。

つまりは SELECT 文しか書かないです。しかし、SELECT 文こそが SQL そのものと言っても良いため、現在のデータアーキテクト(データ整備人)という立ち位置での学習教材を探していました。そんな中思い出したのが本書になります。

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ amazon.co.jp

LookML 開発者としてはこの本に書かれた全てが「優先度高」ではないため、敢えて流し読みを心がけました。

その中で重要だと思ったのはこのあたりでしょうか。
・1 CASE 式のススメ
・2 必ずわかるウィンドウ関数
・4 3値論理と NULL
・7 ウィンドウ関数で行間比較を行なう
・8 外部結合の使い方
・18 GROUP BY と PARTITION BY

Looker が出力する SQL で見かけない気がする EXISTS, HAVING あたりは流し読みしたので、正直まだ理解していません。近いうちに読み返すと思います。

それとは別に、「第1部 9 SQL での集合演算」は興味深かったです。すなわち、和(UNION)、差(EXCEPT)、積(CROSS JOIN)です。商(DIVEDE BY)は「諸事情」により標準化が遅れているそうです。今まで雰囲気で UNION ALL を使うくらいだったので、集合演算は自分のスコープが広がった気がしました。

「15 関係に始まり関係に終わる」に SQL の関係閉包性が UNIX のパイプの概念とよく似ているという記述も興味深かったです。

UNIX ではファイルがさまざまなコマンドの入力・出力になるため、(標準)出力をパイプで次々と渡すことが出来ます。SQL では UNIX のファイルはテーブルに相当します。SELECT 文はテーブルを引数にとってテーブルを返すため、UNIX と同じように次々と出力を渡すことが出来ます。これを関係の閉包性と呼ぶそうです。これを知って、SQL に一気に親近感が湧きました。

後半に進むにつれ、より抽象的な話になっていきます。集合論というワードはちょいちょい出てきて気になってましたが、後半の「SQLでは、集合論的な観点からプログラミングを考えることが上達の鍵」というセンテンスを見てちょっと学んでみようかと思い、評判が良さそうなこの本を購入しました。あまり気負わずに読んでみます。

集合論入門 amazon.co.jp

データアーキテクト(データ整備人)という文脈でオススメの本を見つけて、大変満足したというお話でした。