Copyright © 2016 Digital Garage, Inc. All Rights Reserved
SQL勉強会:初級編
2017/06/21
⽇⾼⼀⾺
今⽇のアジェンダ
pデータベースとは
pSQLとは
pハンズオン
nデータを抽出してみよう
n条件を指定して抽出してみよう
n簡単な集計をしてみよう
- 2 -
今⽇の⽬標
p⾃分で実際に⼿を動かしてSQLを書いてみる
pSQLの基本的な書き⽅がわかる
※今⽇触れないこと
n複雑な分析・集計
nデータベースの環境構築・設計・運⽤
nパフォーマンスチューニング
- 3 -
データベースとは
p⼤量のデータを集めて、コンピューターでデータの
追加、削除、検索をしやすい形に整理したもの。
引⽤:コトバンク
https://kotobank.jp/word/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9-6197
p世の中のサービスは、データベースとの連携が不可⽋
n銀⾏⼝座、チケット予約、百科事典、ブログ、EC、etc.
pエクセルの表もデータベースの⼀種
- 4 -
データベースとは
p簡単にいうと
- 5 -
新しくデータを
追加します
〇〇という条件に
合うデータを
抽出します
データベースとは
pデータベースの中⾝は
- 6 -
データベースとは
pデータベースの中⾝は
pエクセルの様な、⼆次元の表になっている
→これをテーブルと呼ぶ
- 7 -
社員番号 ⽒名 ふりがな ⽣年⽉⽇
A001 佐藤花⼦ さとうはなこ 1980-01-23
A002 ⼭⽥太郎 やまだたろう 1979-04-20
B001 ⽥中⼀郎 たなかいちろう 1983-12-07
データベースとは
- 8 -
社員番号 ⽒名 ふりがな ⽣年⽉⽇
A001 佐藤花⼦ さとうはなこ 1980-01-23
A002 ⼭⽥太郎 やまだたろう 1979-04-20
B001 ⽥中⼀郎 たなかいちろう 1983-12-07
⾏(row、レコードなど):
1⾏がひとまとまりのデータ
例)社員番号A001の⼈の情報
列(column、属性など):
1列がひとまとまりのデータ
同じ列は、データ型が決まっている
SQLとは
pデータベースが理解してくれる⾔葉
- 9 -
新しくデータを
追加します
〇〇という条件に
合うデータを
抽出します
SQLとは
pデータベースが理解してくれる⾔葉
- 10 -
INSERT INTO
hoge VALUES …
SELECT *
FROM fuga
WHERE …
SQLとは
pSQLで出来ること
nデータの登録
nデータの削除
nデータの更新
nデータの検索
- 11 -
SQLとは
pSQLで出来ること
nデータの登録
nデータの削除
nデータの更新
nデータの検索 →今⽇はこれだけ扱います!
- 12 -
SQLとは
p余談:なんの略語でもない
pStructured Query Language:
IBMが開発した⾔語。SQLのもとになっている
- 13 -
SQLとは
p今回は、PostgreSQLという
データベース管理システムを使います
p他にも、MySQL, SQL Server(Transact-SQL),
Oracle Database(Oracle SQL)などの種類があります
p基本的な書き⽅はどれもだいたい同じ
- 14 -
SQLとは
pSQLがわかるといいことがたくさん!
nディレクターがSQLを使えてよかった話(by cookpad)
http://techlife.cookpad.com/entry/2016/07/06/094332
nディレクターがSQLを覚えて、捗った話(by CA)
https://developers.cyberagent.co.jp/blog/archives/4901/
p「エンジニアを通さなくてもデータ抽出が出来るように
なると、PDCAサイクルがスピードアップ」
- 15 -
ハンズオン!
p実⾏環境の⽤意
nhttps://trycode.jp/gen/top.htm にアクセス
n「TRYCODE:SQLを受講」→「SQL練習場」
- 16 -
ハンズオン!
pデータを抽出してみよう
p条件を指定して抽出してみよう
p簡単な集計をしてみよう
- 17 -
データを抽出してみよう
pデータ抽出の基本中の基本
- 18 -
SELECT 列名 FROM テーブル名
どの列(カラム)を
抽出するか
どのテーブルから
データを抽出してみよう
p「book」テーブルの全ての列を抽出してみよう
p「全て」 は 「*」
üSELECT * FROM book;
- 19 -
SELECT 列名 FROM テーブル名
どの列(カラム)を
抽出するか
どのテーブルから
全ての列を抽出 「book」テーブルから
⽂の終わりには「;」
データを抽出してみよう
p「book」テーブルから
「book_name」と「on_sale_date」列を抽出してみよう
üSELECT book_name, on_sale_date FROM book;
- 20 -
SELECT 列名 FROM テーブル名
「book_name」「on_sale_date」列を抽出
複数項⽬を指定するときは、「,」で繋げる
どのテーブルからどの列(カラム)を
抽出するか
「book」テーブルから
データを抽出してみよう:演習1(2分)
p「book」テーブルから
「book_id」「book_name」「price」列を抽出してみよう
- 21 -
SELECT 列名 FROM テーブル名
どの列(カラム)を
抽出するか
どのテーブルから
データを抽出してみよう:演習1(2分)
p「book」テーブルから
「book_id」「book_name」「price」列を抽出してみよう
üSELECT book_id, book_name, price FROM book;
- 22 -
SELECT 列名 FROM テーブル名
どのテーブルからどの列(カラム)を
抽出するか
データを抽出してみよう:ちなみに
p任意の場所で改⾏、スペース、タブを⼊れてOK
p(⼤⽂字⼩⽂字が混在してもOK)←⾮推奨
- 23 -
SELECT book_id, book_name FROM book;
SELECT book_id, book_name FROM book;
SElEct Book_iD, bOOk_name fROm bOok;
SELECT
book_id
, book_name
FROM book;
データを抽出してみよう
p後ろに「ORDER BY 列名」をつけると、
結果を並び替えることも可能
p最後に「LIMIT ⾏数」で⾏数を限定できる
- 24 -
SELECT *
FROM book
ORDER BY price
LIMIT 10;
SELECT *
FROM book
ORDER BY price DESC
LIMIT 5;
→昇順
→降順
ハンズオン!
pデータを抽出してみよう
p条件を指定して抽出してみよう
p簡単な集計をしてみよう
- 25 -
条件を指定して抽出してみよう
p「WHERE」で、取得するデータの条件を指定する
pFROMの後に書く
- 26 -
SELECT 列名 FROM テーブル名
WHERE 条件
どの列(カラム)を
抽出するか
どのテーブルから
どんな条件で
条件を指定して抽出してみよう
p「price」が2000より⼤きいデータを抽出する場合
pデータの⼀致は、=で指定します
nWHERE price = 1000
pデータの⼤⼩は、>, <, >=, <=で指定します
pデータの範囲は、BETWEEN a AND bで指定します
nWHERE price BETWEEN 1000 AND 2000 (1000,2000は含む)
- 27 -
SELECT *
FROM book
WHERE price > 2000;
条件を指定して抽出してみよう
p⽂字や⽇付を指定する場合、ʼʼで値を囲む
- 28 -
SELECT *
FROM book
WHERE on_sale_date < ʻ2000-01-01ʼ;
条件を指定して抽出してみよう
pANDやOR条件も指定できます
- 29 -
SELECT *
FROM book
WHERE
on_sale_date > ʻ2010-01-01ʼ
AND (price < 1000
OR price > 3000);
条件を指定して抽出してみよう:演習2(3分)
pbookテーブルから、以下の条件で抽出してみよう
- 30 -
抽出する列:book_name, price, page_count
条件1:priceが200以上かつ3000以下
条件2:page_countが300より⼤きい
※条件1,2はどちらも満たす
priceを降順に並べる
条件を指定して抽出してみよう:演習2(3分)
pbookテーブルから、以下の条件で抽出してみよう
- 31 -
抽出する列:book_name, price, page_count
条件1:priceが200以上かつ3000以下
条件2:page_countが300より⼤きい
※条件1,2はどちらも満たす
priceを降順に並べる
SELECT book_name, price, page_count
FROM book
WHERE price BETWEEN 200 AND 3000
AND page_count > 300
ORDER BY price DESC;
ハンズオン!
pデータを抽出してみよう
p条件を指定して抽出してみよう
p簡単な集計をしてみよう
- 32 -
簡単な集計をしてみよう
p「集計関数」を使うと、レコードをまたいで
計算が出来ます。
nCOUNT: テーブルのレコード数を数える
nSUM: その(数値型の)カラムのデータの合計値を求める
nAVG: その(数値型の)カラムのデータの平均値を求める
nMAX: そのカラムのデータの最⼤値を求める
nMIN: そのカラムのデータの最⼩値を求める
- 33 -
簡単な集計をしてみよう
- 34 -
SELECT
COUNT(price)
, SUM(price)
, AVG(price)
, MAX(price)
, MIN(price)
FROM book;
簡単な集計をしてみよう
pデータをグルーピングした後に集計することもできます
- 35 -
SELECT 列名, 集計関数 FROM テーブル名
GROUP BY 列名
グループ化に
使った列
どんな計算をするか
どの列でグループ化するか
簡単な集計をしてみよう
- 36 -
SELECT
COUNT(*)
, SUM(price)
, AVG(price)
, MAX(price)
, MIN(price)
FROM book;
SELECT
publisher_id
, COUNT(*)
, SUM(price)
, AVG(price)
, MAX(price)
, MIN(price)
FROM book
GROUP BY publisher_id;
簡単な集計をしてみよう:演習3(3分)
pbookテーブルから、以下の条件で抽出・集計してみよう
- 37 -
集計したいもの:category_idごとの、
⾏数、DISCOUNTの平均値、最⼤値
※平均値を降順に並べる
簡単な集計をしてみよう:演習3(3分)
pbookテーブルから、以下の条件で抽出・集計してみよう
- 38 -
集計したいもの:category_idごとの、
⾏数、DISCOUNTの平均値、最⼤値
※平均値を降順に並べる
SELECT
category_id
, COUNT(*)
, AVG(DISCOUNT)
,
, MAX(DISCOUNT)
FROM book
GROUP BY category_id
ORDER BY AVG(DISCOUNT) DESC;
まとめ
- 39 -
SELECT 列名 FROM テーブル名
どの列(カラム)を
抽出するか
どのテーブルから
SELECT 列名 FROM テーブル名
WHERE 条件
どの列(カラム)を
抽出するか
どのテーブルから
どんな条件で
まとめ
- 40 -
SELECT 列名, 集計関数 FROM テーブル名
GROUP BY 列名
グループ化に
使った列
どんな計算をするか
どの列でグループ化するか
もっと勉強したい⽅へ
p今⽇のおさらい
n「TRYCODE:SQL」→「トレーニングへ」
n初級の解説を読む、演習を解く
p次の勉強会開催(TRYCODEの中級編の内容)
n複数テーブルをまたぐ処理など
pオススメ書籍
「10年戦えるデータ分析⼊⾨
〜SQLを武器にデータ活⽤時代を⽣き抜く」の第1~3章
- 41 -

SQL勉強会 初級編