2017/11/05 20:20

まえがき

今回は、SQLのお話です。最近のWeb界隈の企業では、企画もマーケターも簡単なデータ抽出は自分でSQLを書いて抽出してね☆というスタイルの会社も増えてきているようで、スキルセットの1つとしてSQLを身に付けることの必要性が増してきていると言えます。

自分も業務上習得の必要があったので、いろいろ当たり外れを経験しながら色々な教材を用いて独学してきました。インプット+業務でのアウトプットもあったので、今ならほとんどのデータ抽出処理は(WEBで調べながら)SQLを書いて実行することができるようになり、快適な(?)データ分析ライフを送れています。

周りでSQL勉強したいぜ!っという人に見せるように、備忘録ということでおすすめの学習方法を記しておくので、これからやってみようかなという人は是非参考にしてみてくださいね。

ちなみに、一言にSQLといっても業務のシステムにバッチ的に組み込むものから、その場限りの処理で使うものまで、色々なものに分かれます。今回の記事で紹介している内容を一通り実践すれば必ず"出したいデータを抽出できる"レベルまでは到達できると思います。しかし、より実行速度の早い効率的なクエリを書く。/システム内で安定的に駆動する仕組みを整える。といった点は別途学習する必要があります。

しかし、非エンジニア職にとってのSQLは、分析の対象となるサブセットを一時的に抽出できれば必要十分と考えているので、まずは効率性や安定性は気にしないでもよいと思います。だって、BigQueryだったらどんなダメクエリでも動いてくれるし。異論もあると思うのですが、お見逃しください。

 習得する順番は以下の5ステップです。

早速ですが、以下の5ステップを実行するのが1番の近道かなと思います!他にもSchooの動画教材は、CodeacademyのSQLコースなど色々とおすすめできる教材はありますが、自分で自走できるお勉強好きの人が、最短で習得するならば以下の流れかなと。

<div class="alert">1. <span class="bold-red">まずは何はともあれ環境構築!</span>GoogleBigQueryで爆速SQL実行環境を整える。

2. <span class="bold-red">手を動かして全体像を理解!</span>ドットインストールSQLコースをひたすら打ち込む。

3. <span class="bold-red">SQLの基本を知識で理解!</span>10年本で動作の仕組み・複雑な構文を理解する。

4. <span class="bold-red">実際の分析クエリはこれ1冊で充分!</span>レシピ本でどんどん分析例を吸収しよう。</div>

1つ1つ簡単に説明していきます。


1. まずは何はともあれ環境構築!GoogleBigQueryで爆速SQL実行環境を整える。

え?GoogleBigQueryって何?という人がほとんどだと思うので、極端にシンプルな説明をするとBigQueryとは、超高速のSQL実行環境です。端折りすぎました(笑)

https://www.slideshare.net/newta/bigquery-56438380

以下のような特徴を持っています。

BigQueryの特徴
<div class="alert">
①<strong>個人が学習用に利用する範囲ではほぼ間違いなく無料で利用することができる</strong>
:=>これは、通常通り自前でMYSQLやPostgreSQLの環境を用意する場合も同じ

②<strong>複雑な集計クエリを書いても、長くても1分以内で実行が完了する</strong>
:=>PostgreSQLで3Hかかる集計が30秒で終わるのを目撃したときは、嬉し涙がこぼれましたw

③<strong>csvファイルのアップロードが簡単に行える
</strong>:=>UI上からアップロードできるので、教材ファイルの作成・実行も自由自在

④<strong>WEB界隈のバックエンドで使われる事が増えてきている(特にアプリ)</strong>
:=>これからも導入企業はどんどん増えていくはずので、勉強段階から慣れておくのが吉

⑤<strong>記述する構文は、BigQuer専用のSQL構文だが他の言語とほとんど同じ</strong>
:=>微妙な構文の差異はありますが、標準の規格は統一されているので何か1つ習得すれば他の言語も書けるようになるのがSQL(BigQueryは分かるけどMYSQL分かりません!という人はたぶんいない)</div>

えぇ、そんなややこしいもの導入しなくてもいいじゃん....とか思わないでください。初心者だからこそ道具にこだわるべきで、時代に合ったツールを使って学習をするのがおススメです。あと、気分の問題ですが、PostgreSQLやMYSQLよりも、UIが優れているので、触っていると何となくイケてる感がして、テンションがアガリマス。個人的にはそういうの結構大事w

そして、実際の BigQuery導入手順は以下の記事を参考にしてください。読めばできるので!

http://www.apps-gcp.com/bigquery-introduction/


 2. 手を動かして全体像を理解!ドットインストールSQLコースをひたすら打ち込む。

BigQueryno環境構築が完了しましたね!お疲れ様です。それでは早速学習を進めていきます。はじめはドットインストールの以下のコースを見るのが良いでしょう。できれば、適当なCSVファイルを作成してBigQueryにアップロードし、実際にselctやwhere、group by など基本的な構文を実行してみてください。動画を見ると分かった気持ちになりますが、実際に手を動かすと理解が深まります。あとは、2017年10月下旬に progateでSQLコースがリリースされるみたいなので、サイトに反映されたらそちらを実施するのもおススメです。(リリースされました!)

https://dotinstall.com/lessons/basic_postgresql

-

https://prog-8.com/lessons/sql/study/1

あと、可能であればSchooの以下のコースも併せて受講すると盤石です。ドットインストールはよくも悪くも、文法の紹介をサクサク行ってくれるサービスなので、SQL自体の成り立ちや、細かい文法の説明には立ち入りません。上記のコースですと、実業務で多用することになるGroupByやJOINについても実際のIT講師の方が教えてくれるので、非常にわかりやすいです。無料ではなく、Schooの会員費で1,000円程度はかかるのですが'何が何でも無料で習得するんだ!'みたいな信念が無い場合は、大人しくSchooさんに貢いで基本を理解しましょう。PostgreSQLで構成されている講座ですが、ほとんどのクエリはBigQuery上でも同様に動作すると思います。これ動かないじゃん...というものがあれば都度調べます。なんだかんだ、ドキュメントを読む力は非常に重要っす。

https://schoo.jp/class/3456

-

https://cloud.google.com/bigquery/sql-reference/?hl=ja

3. SQLの基本を知識で理解!10年本で動作の仕組み・複雑な構文を理解する。

さあ、ここまでやるとあなたは主要なクエリを理解し、ドリル本に載っているような問題は自分で解けなかったとしても、回答を読めば何をしているかという点は理解できるようになっているはずです。

次は、もう一歩踏み込んで以下の書籍で動作の仕組みの根本理解を行いましょう。こちらの本は、初めは基本的なselect文から始まって、最後は非常に便利なウインドウ関数までステップバイステップまで実際の業務で遭遇しそうなクエリを例にしながら、解説してくれています。


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797376279/osanaimasahir-22/ref=nosim/" name="amazletlink" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/513Kq0DFpnL._SL160_.jpg" alt="10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797376279/osanaimasahir-22/ref=nosim/" name="amazletlink" target="_blank">10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 17.10.08</div></div><div class="amazlet-detail">青木 峰郎 <br />SBクリエイティブ <br />売り上げランキング: 56,762<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797376279/osanaimasahir-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>

特に、①クエリの実行順番 ②各種JOIN構文の使い分け ③ウインドウ関数 についての解説は秀逸なので必読です。この本を読み終えると、大体のWEB上に転がっているSQL関連の情報は読んで理解できるようになっているはずです。

目安としては、以下の2記事を読んで"ふむふむ、なるほど~(・_・"と理解できるようになっていれば、申し分のない水準です。世で言う、SQLちょっと書けますという人よりは少し進んでいるような感じ。

https://tug.red/entry/2015/04/24/122227

-

http://techlife.cookpad.com/entry/2015/12/18/151257

4. 実際の分析クエリはこれ1冊で充分?!レシピ本でどんどん分析例を吸収しよう。

ここまで勉強が進むとあらゆるSQLを書いて、自由に分析・集計を行えるようになっていそうですが、まだ、手を動かす経験が不足しているので何か処理を実行しようとしたときに中々クエリが思い浮かばなかったりします。

まずは、以下の書籍に1通りザッと目を通して(30分くらい)、SQlでこんな集計ができるんだという全体像を掴むのがおすすめです。こちらでは、WEBログの集計で実際に業務で使用できる品質のクエリサンプルが豊富に掲載されています。発売当初は、Twitter上で黒魔術書と話題になったほど、この集計ノウハウ明かしてよいんですか?というレベルのコードサンプルが豊富に掲載されています。生存率分析や検索アルゴリズムの評価、RFM分析など盛り沢山の内容です。

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839961263/osanaimasahir-22/ref=nosim/" name="amazletlink" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/61kzm62vzeL._SL160_.jpg" alt="ビッグデータ分析・活用のためのSQLレシピ" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839961263/osanaimasahir-22/ref=nosim/" name="amazletlink" target="_blank">ビッグデータ分析・活用のためのSQLレシピ</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 17.10.08</div></div><div class="amazlet-detail">加嵜 長門 田宮 直人 <br />マイナビ出版 (2017-03-27)<br />売り上げランキング: 7,503<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839961263/osanaimasahir-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>


ただ、もうあらゆる書籍・WEB上の情報は自分で理解できるようになっているはずなので、後は試す=>調べるを繰り返しているだけで勝手にあなたのSQL力はついていきます。慣れると、ユーザーの〇〇な行動を集計したいとお題が出てきたときに、(1)必要なテーブルの構造(2)テーブルを作成するためのSQLクエリ の2つが頭の中でポンっと思い浮かぶようになってきて、こうなってから自分は人前で"SQl書けます(ちょっと自信なさげ)"っと公言できるようになりました笑

 まとめ

個人的にどうやって勉強したねんって聞かれることが多いので、書き殴ってみました。
かなりコアな読者にしか刺さらないと思いますが、是非参考にしてみてくださいねw