Contenu connexe
Similaire à Webディレクター・マーケターのためのSQL教室 2015/07/13 (20)
Webディレクター・マーケターのためのSQL教室 2015/07/13
- 2. Copyright © BizReach, Inc. All Right Reserved.
⾃自⼰己紹介
2
荒⾦金金 万琴(あらがね まこと)
n 福岡県出⾝身
→京都に4年年間
→東京で働いて5年年⽬目
n 前職:ソフトウェアメーカーにて
マーケティングを担当(4年年間)
• ⾃自社製品サイト、カタログ等の制作
• イベントの主催、出展
• リリースの進⾏行行管理理 などなど
n 2015年年4⽉月 株式会社ビズリーチに⼊入社
データ分析を担当
• ⾃自社サービス(ビズリーチ:会員制転職
サイト)の会員属性の調査
• 会員向け施策、広告等の効果検証 などなど
- 3. Copyright © BizReach, Inc. All Right Reserved.
⾃自⼰己紹介
3
みなさんと同じく
Webディレクション・
マーケティング
を担当していました!
荒⾦金金 万琴(あらがね まこと)
- 4. Copyright © BizReach, Inc. All Right Reserved.
今⽇日のアジェンダ
n データベースとは?SQLとは?(5分)
n ハンズオン(40分)
• データを抽出してみよう
• 条件を指定してみよう
• 複数のテーブルからデータを抽出しよう
n 分析基盤について ―ビズリーチの事例例紹介(3分)
n まとめ&アンケート(5分)
4
- 5. Copyright © BizReach, Inc. All Right Reserved.
今⽇日の⽬目標
n ⾃自分で⼿手を動かして、SQLを書く!
n 基本的な⽂文法が、なんとなくわかるようになる
n もっとデータを⾒見見てみたい、SQLを勉強してみたい と
思う(と嬉しいです)
5
- 6. Copyright © BizReach, Inc. All Right Reserved.
今⽇日のアジェンダ
n データベースとは?SQLとは?(5分)
n ハンズオン(40分)
• データを抽出してみよう
• 条件を指定してみよう
• 複数のテーブルからデータを抽出しよう
n 分析基盤について ―ビズリーチの事例例紹介(3分)
n まとめ&アンケート(5分)
6
- 8. Copyright © BizReach, Inc. All Right Reserved.
データベースとは
n 辞書をひくと
「コンピューターで、関連し合うデータを収集・整理理し
て、検索索や更更新を効率率率化したファイル。DB。」
n ⼀一⾔言でいうと?
8
- 9. Copyright © BizReach, Inc. All Right Reserved.
データベースとは
n 辞書をひくと
「コンピューターで、関連し合うデータを収集・整理理し
て、検索索や更更新を効率率率化したファイル。DB。」
n ⼀一⾔言でいうと?
9
新しくデータを
追加します
○○という条件
に合うデータを
抽出します
- 10. Copyright © BizReach, Inc. All Right Reserved.
データベースとは
n 箱の中のデータはどんな形?
例例えば、社員名簿の場合
→ ⼆二次元の表(Excelと同じ)
これをテーブルと呼ぶ
10
社員ID ⽒氏名 ふりがな ⽣生年年⽉月⽇日
123 佐藤 ⼀一郎郎 さとう いちろう 1988-‐‑‒07-‐‑‒07
124 鈴鈴⽊木 健太 すずき けんた 1979-‐‑‒10-‐‑‒23
125 ⽥田中 涼⼦子 たなか りょうこ 1991-‐‑‒03-‐‑‒30
- 11. Copyright © BizReach, Inc. All Right Reserved.
社員ID ⽒氏名 ふりがな ⽣生年年⽉月⽇日
123 佐藤 ⼀一郎郎 さとう いちろう 1988-‐‑‒07-‐‑‒07
124 鈴鈴⽊木 健太 すずき けんた 1979-‐‑‒10-‐‑‒23
125 ⽥田中 涼⼦子 たなか りょうこ 1991-‐‑‒03-‐‑‒30
データベースとは
n 箱の中のデータはどんな形?
例例えば、社員名簿の場合
11
⾏行行(レコード):
1⾏行行がひとまとまりのデータ
(今回は1⼈人の社員)
列列(カラム):
1列列がひとつの項⽬目
データ型(形式)が決まっている
- 13. Copyright © BizReach, Inc. All Right Reserved.
SQLとは
n データベースを操作するための⾔言語
• データを新規登録する
• 更更新する
• 検索索・抽出する
• 削除する
13
新しくデータを
追加します
○○という条件
に合うデータを
抽出します
SQLを書いて命令令
- 14. Copyright © BizReach, Inc. All Right Reserved.
SQLとは
n この勉強会では、Oracle Database というデータベー
スを操作するSQL(Oracle SQL)を使います。
ほかにも MySQL, PostgresSQL などの種類があります
が、だいたい書き⽅方は同じです。
(⽅方⾔言みたいな感じで、少し違うところはあります)
14
- 16. Copyright © BizReach, Inc. All Right Reserved.
SQLが書けるメリット
n Google Analytics 等である程度度サービスの状況はわかる。
が、社内のデータベースにしか⼊入っていないデータも
• 売上情報、会員の属性情報、アクセスログ etc...
n そんなデータを、⾒見見たいときにすぐ⾒見見られる
• 依頼すると多少なりともタイムラグが発⽣生
• エンジニアの⼿手が回らないときも
n データが⾒見見られれば、打ち⼿手をすぐ考えられる
• データをもとに仮説を⽴立立ててUIを変えてみる
• 施策をやったあとに効果検証をする
• つまりPDCA!!
• モニタリングしていれば、異異常値の検知・対策も可能
16
- 17. Copyright © BizReach, Inc. All Right Reserved.
あるディレクターさんの記事
n ディレクターがSQLを学んでよかったこと
http://blog.nanapi.co.jp/tech/2014/08/15/
director-‐‑‒skill-‐‑‒sql/
• 「社内管理理画⾯面上では⾒見見ることのできないユーザーデータと
サービスデータを合わせて、成⻑⾧長サイクルのための分析をして
みたかった」
• 「これまではエンジニアさんを通してしかできなかったデータ
抽出が誰でもできるようになったことで、PDCAサイクルにス
ピードが⽣生まれます」
• 「エンジニアさんとのデータ項⽬目に関する齟齬をなくし仕様変
更更を防ぐという意味でもデータに関する共通認識識を持っておく
のは必要なことかと思います」
17
- 18. Copyright © BizReach, Inc. All Right Reserved.
今⽇日のアジェンダ
n データベースとは?SQLとは?(5分)
n ハンズオン(40分)
• データを抽出してみよう
• 条件を指定してみよう
• 複数のテーブルからデータを抽出しよう
n 分析基盤について ―ビズリーチの事例例紹介(3分)
n まとめ&アンケート(5分)
18
- 19. Copyright © BizReach, Inc. All Right Reserved.
実⾏行行環境を開く
n 事前のお知らせの通り、設定いただいた
https://apex.oracle.com/pls/apex/ にアクセスし、「SQL
ワークショップ」>「SQL Commands」を選んでください。
※環境設定をしていない・Wi-‐‑‒Fiに接続できない場合は
メモ帳やテキストエディタでよいので、SQLを書いて
みてください。
※資料料(SQL⽂文含む)は後⽇日公開するので、復復習に
お使いください。メモが間に合わなくても⼤大丈夫です。
19
- 20. Copyright © BizReach, Inc. All Right Reserved.
実⾏行行環境を開く
n この画⾯面でSQLを⼊入⼒力力し、「Run」ボタンで実⾏行行します。
n 同じようなSQLを何度度も使うので、⼀一度度メモ帳やエディ
タに書き、それを↓にコピーするのがおすすめです。
20
この欄に⼊入⼒力力
- 21. Copyright © BizReach, Inc. All Right Reserved.
ハンズオン
n データを抽出してみよう
n 条件を指定してみよう
n 複数のテーブルからデータを抽出しよう
21
- 22. Copyright © BizReach, Inc. All Right Reserved.
データを抽出してみよう
n データを抽出するときは必ず使う
いちばん基本的な⽂文です!
22
select 列列名 from テーブル名
どの列列(項⽬目)を
抽出するか
どのテーブル(表)から
- 23. Copyright © BizReach, Inc. All Right Reserved.
データを抽出してみよう
n 社員情報が⼊入っている「emp」というテーブル(表)
とりあえず全ての列列を出して⾒見見てみる!
n 「全て」=「*」
n select * from emp;
※実務では、テーブルごとに何の項⽬目(列列)が⼊入っているかはあらかじめ
わかっていて(別途表にまとまっていたりします)、⽬目的のテーブルに
対してSQLを書いてデータを出す、という流流れが⼀一般的です。
23
すべての列列
を抽出
empテーブル
から
- 25. Copyright © BizReach, Inc. All Right Reserved.
データを抽出してみよう
n 名前(ename)と役職(job)だけ知りたい?
→select のあとに 抽出したい列列名を⼊入⼒力力
n select
ename
,job
from
emp
;
25
select
ename,
job
だと 1⾏行行⽬目の,と2⾏行行⽬目のjobを削除す
る必要があるのでミスが起きやすい
- 26. Copyright © BizReach, Inc. All Right Reserved.
演習問題
n emp テーブルから
名前(ename) ⼊入社⽇日(hiredate) 部⾨門番号(deptno)
を抽出してください。(2分)
26
- 27. Copyright © BizReach, Inc. All Right Reserved.
演習問題
n emp テーブルから
名前(ename) ⼊入社⽇日(hiredate) 部⾨門番号(deptno)
を抽出してください。(2分)
n select
ename
,hiredate
,deptno
from
emp
;
27
- 28. Copyright © BizReach, Inc. All Right Reserved.
データを抽出してみよう
⼩小技!抽出したデータを順番に並べることも可能
n 最後に order by (列列名)をつける →昇順に並べる
order by (列列名) desc までつけると降降順
n select
ename
,hiredate
,deptno
from
emp
order by
hiredate desc
;
28
抽出されるデータは同じだが
⼊入社⽇日の降降順(遅い順)に並ぶ
- 29. Copyright © BizReach, Inc. All Right Reserved.
ハンズオン
n データを抽出してみよう
n 条件を指定してみよう
n 複数のテーブルからデータを抽出しよう
29
- 30. Copyright © BizReach, Inc. All Right Reserved.
条件を指定してみよう
n 条件は「where」のあとに書く
30
select 列列名 from テーブル名
where 条件
どの列列(項⽬目)を
抽出するか
どのテーブル(表)から
どんな条件のデータを
- 31. Copyright © BizReach, Inc. All Right Reserved.
条件を指定してみよう
n 抽出する列列:
名前(ename)・⼊入社⽇日(hiredate)・部⾨門番号(deptno)
select
ename
,hiredate
,deptno
from
emp
;
n 条件:部⾨門番号が10のデータ
31
- 32. Copyright © BizReach, Inc. All Right Reserved.
条件を指定してみよう
n 条件:部⾨門番号が10のデータ
select
ename
,hiredate
,deptno
from
emp
where
deptno = 10
;
32
- 33. Copyright © BizReach, Inc. All Right Reserved.
条件を指定してみよう
n 条件に、⽂文字や⽇日付を指定するときは ' ' で囲むこと!
n 条件:名前 が KING のデータ
select
ename
,hiredate
,deptno
from
emp
where
ename = 'KING'
;
33
where
ename = KING
とすると、エラーになってしまう
- 34. Copyright © BizReach, Inc. All Right Reserved.
条件を指定してみよう
n 数値や⽇日付であれば、 = 以外にも
不不等号(>=, <=, >, <)を条件に使える
n 条件:給与 が 3000以上 のデータ
select
ename
,hiredate
,sal
from
emp
where
sal >= 3000
;
34
- 35. Copyright © BizReach, Inc. All Right Reserved.
条件を指定してみよう
n 数値や⽇日付であれば、 = 以外にも
不不等号(>=, <=, >, <)を条件に使える
n 条件:⼊入社⽇日 が 1981年年1⽉月1⽇日以降降 のデータ
select
ename
,hiredate
,sal
from
emp
where
hiredate >= '01-‐‑‒01-‐‑‒1981'
;
35
⽇日付は ' ' で囲むのを忘れない!
不不等号を⽇日付に使う場合は
>=(以降降) <=(以前)
- 36. Copyright © BizReach, Inc. All Right Reserved.
演習問題
n emp テーブルから、以下の条件のデータを抽出してく
ださい。
抽出する列列:
名前(ename) ⼊入社⽇日(hiredate) 給与(sal)
条件:
給与が 2000以下
36
- 37. Copyright © BizReach, Inc. All Right Reserved.
演習問題
n emp テーブルから、以下の条件のデータを抽出してください。
抽出する列列:
名前(ename) ⼊入社⽇日(hiredate) 給与(sal)
条件:
給与が 2000以下
n select
ename
,hiredate
,sal
from
emp
where
sal <= 2000
;
37
- 38. Copyright © BizReach, Inc. All Right Reserved.
条件を指定してみよう
n and や or を使えば、複数の条件を満たすデータを抽出できる!
n 条件:部⾨門番号が10 もしくは 部⾨門番号が20
select
ename
,hiredate
,deptno
from
emp
where
deptno = 10
or deptno = 20
;
38
- 39. Copyright © BizReach, Inc. All Right Reserved.
条件を指定してみよう
n and や or を使えば、複数の条件を満たすデータを抽出できる!
n 条件:部⾨門番号が10 かつ ⼊入社⽇日が1981年年10⽉月1⽇日以降降
select
ename
,hiredate
,deptno
from
emp
where
deptno = 10
and hiredate >= '10-‐‑‒01-‐‑‒1981'
;
39
- 40. Copyright © BizReach, Inc. All Right Reserved.
ハンズオン
n データを抽出してみよう
n 条件を指定してみよう
n 複数のテーブルからデータを抽出しよう
40
- 41. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
「複数のテーブルから」ってどういうこと?
41
社員ID ⽒氏名 部⾨門番号
123 佐藤 ⼀一郎郎 10
124 鈴鈴⽊木 健太 20
125 ⽥田中 涼⼦子 20
部⾨門番号 部⾨門名
10 営業部
20 開発部
30 ⼈人事部
社員ID ⽒氏名 部⾨門番号 部⾨門名
123 佐藤 ⼀一郎郎 10 営業部
124 鈴鈴⽊木 健太 20 開発部
125 ⽥田中 涼⼦子 20 開発部
共通の列列をキーにして、複数のテーブルをくっつける(結合)
社員名簿には
部⾨門名はない
- 42. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
どうしてそんなことするの?
n データベース内のデータは、先ほどのスライドと同様
重複のないよう分割されている場合が多い(正規化)
• 重複した情報が多いと、データ量量が不不必要に⼤大きくなる
• もし正規化されていないデータベースで
「開発部」→「商品開発部」と変更更があったら
開発部の社員全部のデータを書き換えなければいけない…
※もっと知りたい⽅方は 参考⽂文献:
http://itpro.nikkeibp.co.jp/article/COLUMN/20130416/471174/?
ST=develop
42
- 43. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
共通の列列をキーにして、複数のテーブルをくっつける(結合)
n 「結合」にも種類があるが、今回紹介するのは「内部結合」
• テーブルAとテーブルBの共通の列列をキーにする
• テーブルAとテーブルBの
どちらにも存在するデータのみ
取得して新しい表をつくる
43
ここだけ!
テーブル
A
テーブル
B
- 44. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
n 内部結合
44
select 列列名 from テーブル名A
inner join テーブル名B
on A.列列名 = B.列列名
どのテーブル(表)と結合するか
テーブルAとBの、共通のキーは何か
- 45. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
n emp テーブルと dept テーブル(部⾨門)を内部結合
共通のキー:deptno(部⾨門番号)
n 抽出する列列:すべて
n select *
from
emp
inner join
dept
on
emp.deptno = dept.deptno
;
45
emp テーブルと
dept テーブルを内部結合(inner join)
共通のキーは deptno
※列列名の前にテーブル名を書く!
- 46. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
46
共通のキーは deptno
emp テーブル dept テーブル
- 47. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
n emp テーブルと dept テーブル(部⾨門)を内部結合
共通のキー:deptno(部⾨門番号)
n 抽出する列列:ename(名前) deptno(部⾨門番号) dname(部⾨門名)
n select
emp.ename
,emp.deptno
,dept.dname
from
emp
inner join
dept
on
emp.deptno = dept.deptno
;
47
抽出する列列名の前にも
テーブル名を書く!
- 49. Copyright © BizReach, Inc. All Right Reserved.
演習問題
n emp テーブルと dept テーブルを
deptno 列列をキーに内部結合させて、
以下の条件のデータを抽出してください。
抽出する列列:
emp テーブルから
名前(ename) ⼊入社⽇日(hiredate) 部⾨門番号(deptno)
dept テーブルから
部⾨門名(dname) 部⾨門のある地名(loc)
49
- 50. Copyright © BizReach, Inc. All Right Reserved.
演習問題
n select
emp.ename
,emp.hiredate
,emp.deptno
,dept.dname
,dept.loc
from
emp
inner join
dept
on
emp.deptno = dept.deptno
;
50
- 52. Copyright © BizReach, Inc. All Right Reserved.
演習問題
n select
e.ename
,e.hiredate
,e.deptno
,d.dname
,d.loc
from
emp e
inner join
dept d
on
e.deptno = d.deptno
;
52
from, inner join のテーブル名の後に
別名を命名できる!
e, d など短縮した別名をつければ、この
select⽂文の全部で使える
- 53. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
合わせ技!結合させたテーブルに対して、条件指定が可能
n emp テーブルと dept テーブル(部⾨門)を内部結合
共通のキー:deptno(部⾨門番号)
n 抽出する列列:
emp テーブルから
名前(ename) ⼊入社⽇日(hiredate) 部⾨門番号(deptno)
dept テーブルから
部⾨門名(dname) 部⾨門のある地名(loc)
n 条件:部⾨門番号が20の社員
53
- 54. Copyright © BizReach, Inc. All Right Reserved.
複数のテーブルからデータを抽出しよう
n select
emp.ename
,emp.hiredate
,emp.deptno
,dept.dname
,dept.loc
from
emp
inner join
dept
on
emp.deptno = dept.deptno
where
emp.deptno = 20
;
54
条件が複数ある場合は
and, or も使える
- 56. Copyright © BizReach, Inc. All Right Reserved.
今⽇日のアジェンダ
n データベースとは?SQLとは?(5分)
n ハンズオン(40分)
• データを抽出してみよう
• 条件を指定してみよう
• 複数のテーブルからデータを抽出しよう
n 分析基盤について ―ビズリーチの事例例紹介(3分)
n まとめ&アンケート(5分)
56
- 57. Copyright © BizReach, Inc. All Right Reserved.
ビズリーチ社内の分析基盤
n 個⼈人情報保護・レスポンス向上のため
サービスのDBから、分析に必要なデータのみ
取り出したものを Amazon Redshift で構築
57
リモートで操作
アクセス制限をAWSと調整
Amazon
Redshift
BizReach
Datamart
BizReach
Database
エンジニア
個⼈人情報等を除き
夜間バッチ
個⼈人情報
- 58. Copyright © BizReach, Inc. All Right Reserved.
ビズリーチ社内の分析基盤
n スポットで⾒見見たいデータは、
データマートからSQLで抽出して出⼒力力
n BIツール「Tableau」で集計・グラフ化することも
58
CSV /
Excel
集計
報告
SQL
●●●●?
BizReach
Datamart
- 59. Copyright © BizReach, Inc. All Right Reserved.
ビズリーチ社内の分析基盤
n 常にモニタリングすべきデータは、
データマート(Redshift)とTableauをライブ接続
n Tableau上でリアルタイムに状況を確認できる
n 特に重要な指標は、毎朝メールが⾶飛ぶようプログラム化
59
Tableau
集計・
グラフ化
BizReach
Datamart
- 61. Copyright © BizReach, Inc. All Right Reserved.
今⽇日のアジェンダ
n データベースとは?SQLとは?(5分)
n ハンズオン(40分)
• データを抽出してみよう
• 条件を指定してみよう
• 複数のテーブルからデータを抽出しよう
n 分析基盤について ―ビズリーチの事例例紹介(3分)
n まとめ&アンケート(5分)
61
- 62. Copyright © BizReach, Inc. All Right Reserved.
まとめ
62
select 列列名 from テーブル名
どの列列(項⽬目)を
抽出するか
どのテーブル(表)から
select 列列名 from テーブル名
where 条件
どの列列(項⽬目)を
抽出するか
どのテーブル(表)から
どんな条件のデータを
- 63. Copyright © BizReach, Inc. All Right Reserved.
まとめ
63
select 列列名 from テーブル名A
inner join テーブル名B
on A.列列名 = B.列列名
どのテーブル(表)と結合するか
テーブルAとBの、共通のキーは何か
- 64. Copyright © BizReach, Inc. All Right Reserved.
もっとSQLを勉強したい⽅方へ
n 今⽇日使った環境で練習したい
• Webブラウザで学ぶ実践SQL講座
http://www.atmarkit.co.jp/ait/kw/jissen_̲sql_̲kouza.html
• 今⽇日の勉強会は、このページをベースにしています
n 本を読んで体系的に勉強したい
• 書き込み式SQLのドリル
http://goo.gl/97wtAM
• 基本的な⽂文法を網羅羅できます
• 環境構築の⽅方法・サンプルデータもついていて便便利利
n あくまでも個⼈人の意⾒見見なので、周りの⼈人のおすすめも聞いて
みてください。
64
- 65. Copyright © BizReach, Inc. All Right Reserved.
さいごに
connpassグループ
「OWL.learn」
BIツール「Tableau」、R、数学など
データサイエンスにまつわる勉強会を実施
ぜひグループのメンバーに!
65
- 67. Copyright © BizReach, Inc. All Right Reserved.
今⽇日の⽬目標
n ⾃自分で⼿手を動かして、SQLを書く!
n 基本的な⽂文法が、なんとなくわかるようになる
n もっとデータを⾒見見てみたい、SQLを勉強してみたい と
思う(と嬉しいです)
67