SlideShare a Scribd company logo
さるでも
わかる
SQL
2019.03.23
お品書き
u 自己紹介
u 「さる」とは? ~はじめに~
u 本日のゴール
u シナリオ
u 作成の流れ
u Bigqueryで実践
u Appendix.
自己紹介
株式会社KYOSO
久村 美咲
普段はOracleDBを使っています。
BigQueryは勉強中です。
さるとは?~はじめに~
これまでExcelで管理していたデータを
今日からBigqueryにする人を、ここでは
「さる」とします。
本日のゴール
SQLをつかってBigquery上の
2つのテーブルを結合させる
実践編シナリオ:
あなたは書店員です。
勤務先の店舗では、これまで書籍情報と売上情報を
Excelで別々に管理していました。
書籍情報と売上情報をいっしょに表示させたいとき、
どのようにすればよいでしょうか?
では、実際にBigqueryでやってみましょう。
実践編
①書籍情報から、書籍の一覧を表示する
②検索結果に売上情報の
顧客タイプ列を追加する
④売上金額と伝票件数の列を追加
③書籍情報と売上情報に
別名を付ける
別名をつける
ことで、SQL
がシンプルに
なり間違いに
くくなります
作成の流れ
実践編
sales_result
bill_no sales_date customer_type shosekimei number amount
B201812010001 2018/12/1 unknown python crawling 1 3200
B201812010004 2018/12/1 student Kantan SQL 2 5200
B201812010006 2018/12/1 unknown Kantan SQL 1 2600
B201812010006 2018/12/1 unknown python crawling 1 3200
B201812010006 2018/12/1 unknown Perfect Ruby ver2.0 1 3260
syoseki_table
syosekimei sub_genre kakaku kankobi
Kantan SQL 101 26002015/11/12
Kantan SQL vol.2 101 29802016/4/12
Motto Kantan SQL 101 29802016/7/12
Perfect Ruby ver2.0 102 32602017/5/17
0 kara hajimeru Ruby 102 33202017/7/28
python crawling 103 32002016/12/16
書籍情報と売上情報には、以下のような内容が登録されています。
今回は「書籍名」列をキーにして、書籍情報と売上情報を結合さ
せます。
▼ 売上情報
◀ 書籍情報
実践編
①「shoseki_table」から、書籍の一覧を表示させる
SELECT syosekimei, kankobi
FROM `micro-primer-228908.sample_3.shoseki_table`
WHERE sub_genre = 102;
実践編
②検索結果に売上情報の顧客タイプ列を追加する
実践編
SELECT syosekimei, kankobi,customer_type
FROM `micro-primer-228908.sample_3.shoseki_table`
LEFT OUTER JOIN `micro-primer-228908.sample_3.sales_result`
ON `micro-primer-228908.sample_3.shoseki_table`.syosekimei
= `micro-primer-228908.sample_3.sales_result`.shosekimei
WHERE sub_genre = 102;
▼LEFT OUTER JOINの構文
SELECT カラム名1, カラム名2, ...,
FROM テーブルA
LEFT OUTER JOIN テーブルB ON 結合の条件
③売上情報と書籍情報に別名を付ける
実践編
SELECT syosekimei, kankobi,customer_type
FROM `micro-primer-228908.sample_3.shoseki_table` AS t1
LEFT OUTER JOIN `micro-primer-228908.sample_3.sales_result` AS t2
ON t1.syosekimei = t2.shosekimei
WHERE sub_genre = 102;
FROM 表の名前 AS 別名
または
FROM 表の名前 別名
*ASは省略可能である。
表の別名指定の記述形式
④売上金額と伝票件数の列を追加
実践編
SELECT syosekimei,kankobi,customer_type
,SUM(amount) AS amount,COUNT(bill_no) AS count
FROM `micro-primer-228908.sample_3.shoseki_table` t1
LEFT OUTER JOIN
`micro-primer-228908.sample_3.sales_result` t2
ON t1.syosekimei = t2.shosekimei
WHERE sub_genre = 102
GROUP BY syosekimei,kankobi,customer_type;
GROUP BY句に集計
単位を記述する
syosekimei kankobi customer_type amount count
Perfect Ruby ver2.0 2017/5/17 engineer 55420 1
0 kara hajimeru Ruby 2017/7/28 null null 0
Perfect Ruby ver2.0 2017/5/17 student 3260 1
Perfect Ruby ver2.0 2017/5/17 unknown 6520 2
▼検索結果
サンプルデータ
今日の資料で使用したデータは、こちら
からダウンロードできます。
http://bit.ly/2Y9pgHp
QRコードでもアクセスできます
Appendix.
データベースとは?
データベースとは、「検索したり更新したりできるよ
う蓄積された情報の集まり」のこと。
リレーショナルデータベースとは?
リレーショナルデータベースとは?
データベースには、SQLを通じてアクセスできる様々な
モノがあります。テーブルや列などデータベース・オ
ブジェクトと呼びます。
代表的なオブジェクトであるテーブルは、エクセルの
表のようなデータの入れ物でデータを蓄積する役目を
持っています。
SQLとは?
SQLとは
SQLとは、データベースを操作するための
問い合わせ言語のことです。
表の中身を検索したり、追加したり、
内容の変更や削除をすることができます。
行
syosekimei Kakaku kankobi
python crawling 3200 2016/12/16
Perfect Ruby ver2.0 3260 2017/5/17
列(カラム、フィールドとも呼ぶ)
列名
値
テーブルの構成要素
SQLとは
データベースを操作するとは、
具体的にどのようなことを意味するのでしょうか?
 
①どの列を?
②どのテーブルから?
③どの条件で?
  …の順にSQLは書くことになっています。
syosekimei Kakaku kankobi
python crawling 3200 2016/12/16
Perfect Ruby ver2.0 3260 2017/5/17
書籍テーブル(syoseki_table)
SQLとは
書籍テーブルから価格と刊行日を取得する
SQLを例に考えてみましょう。
SELECT kakaku, kankobi --①
FROM syoseki_table --②
WHERE syosekimei ='python crawling' --③
;
syosekimei kakaku kankobi
python crawling 3200 2016/12/16
Perfect Ruby ver2.0 3260 2017/5/17
書籍テーブル(syoseki_table)
①kakaku列とkankobi列を
②syoseki_tableから
③syosekimeiがpython crawling
 と同じ行
①どの列を?
②どのテーブルから?
③どの条件で?
SQLとは
syosekimei Kakaku kankobi
python crawling 3200 2016/12/16
Perfect Ruby ver2.0 3260 2017/5/17
条件に合致する行
取得対象の列
Kakaku Kankobi
3200 2016/12/16
結果
SELECT kakaku,kankobi
FROM syoseki_table
WHERE syosekimei = 'python crawling';
SQLとは
SQLの構文の基本を押さえておきましょう。
SQLとは
SQLとは
サルでもわかるSQLでは、
Bigqueryでも必須のSELECT文を詳しく扱います。
 
データの取得と絞り込み
SELECT文を構成する「句」のなかで
最も基礎になるSELECT句を中心に、
WHERE句、FROM句、ORDER BY句、LIMIT句 を
学びましょう。
データの取得
データの取得
SELECT kakaku
FROM `bubbly-fuze-222610.sample_3.shoseki_table`;
kakaku列を
syoseki_tableから取得する
基本的なSELECT文は以下のとおり、
SELECT句とFROM句からなります。
SELECT kakaku,
kankobi
FROM `bubbly-fuze-222610.sample_3.shoseki_table`;
データの取得
複数の列を指定するとき、
列名をカンマ(,)区切りで列挙します。 
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`;
データの取得
テーブルのすべての列を対象にするには、
列名の代わりにアスタリスク(*)を指定します。 
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`;
データの取得
FROM句には、データの参照先となる
テーブル名を指定します。 
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
order by kankobi;
syoseki_tableからデータを取得する際に
Kankobiの昇順にデータを並び替え(ソートし)て取得する
データの取得
ORDER BY句をSELECT文に付加することで、
SELECT文の結果を並べ替えたもので取得できます。 
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
order by kankobi DESC;
syoseki_tableからデータを取得する際に
Kankobiの降順にデータを並び替え(ソート)をして取得する
昇順(ASC) :値が小さい順(この場合古い日付の順)
降順(DESC):値が大きい順(この場合新しい日付の順)
データの取得
ORDER BY句にDESCをつけると
降順でデータを取得できます。 
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
ORDER BY kankobi DESC
LIMIT 3;
syoseki_tableからデータを取得する際に
Kankobiの降順にデータを並び替え(ソートし)て取得
する。
並べ替えられた行のうち、最初から3件を表示する
データの取得
LIMIT句は、
SELECT文の結果を指定した行数に制限します。
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
WHERE syosekimei = 'python crawling';
syoseki_tableからデータを取得する際に
Syosekimei列の値が「python crawling」と一致す
るもののみに絞り込む
データの取得
WHERE句を加えることで、
特定の条件データを絞り込むことができます。
WHERE [列名] [比較演算子] [値]
syoseki_tableからデータを取得する際に
kakaku列の値が2000より大きい行に絞り込む
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
WHERE kakaku > 2000;
データの取得
WHERE句の構文配下の通りです。
例
※比較演算子:
等しい(=)、等しくない(<>)
より大きい(>)・小さい(<) など、値を比較する記号のこと
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
WHERE kakaku > 2000
AND syomei LIKE 'python%' ;
syoseki_tableからデータを取得する際に
Kakakuが2000より多く、
かつ、syosekimeiがpythonで始まる行に絞り込む
*演算子にLIKEを使うと部分一致検索ができます。
"%"はワイルドカードの効果を持ちます。
データの取得
WHERE句では、複数の条件を指定して
データを絞り込むこともできます。
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
WHERE kakaku > 2000
OR syomei LIKE 'python%' ;
syoseki_tableからデータを取得する際に
Kakakuが2000より多く、
または、syosekimeiがpythonで始まるデータに絞り込む
"AND"は両方の条件を満たすデータ、
"OR"はどちらかの条件を満たすデータを
取得できます。
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
WHERE kakaku >= 2000
AND kakaku <= 2500 ;
SELECT *
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
WHERE kakaku BETWEEN 2000 AND 2500 ;
同じ
データの取得
WHERE句にBETWEEN句を指定すると、
範囲指定ができます。
以上、以下という指定になる点を注意してください。
データ型とは?
文字型 名称など
数値データ型 金額、数量など計算する値
日付/時刻型 日付、時間
真偽値型 ON/OFF
データ型とは?
テーブルの列は「データ」型と呼ばれる
データの種類に関する定義を持ちます。
 文字型
データ型 定義 値の例
CHAR(n) 固定長文字列 JPN,0601
VARCHAR(n) 可変長文字列 C言語による最新アルゴリズム時点
TEXT 可変長文字列
(長さ制限なし)
コンピュータの算法に関わる
アルゴリズムの・・・
データ型とは?
 数値データ型
データ型 定義 値の例
INT 4バイト
符号付整数
123000,-456000
INT8 8バイト
符号付整数
12300000000
INT2 2バイト
符号付整数
123,-456
FLOAT4 単精度
浮動小数点
3.14151
(6桁までの整数または小数)
FLOAT8 倍精度
浮動小数点
3.14151265358979
(15桁までの整数または小数)
DECIMAL(p,s) 固定小数型 2.100
データ型とは?
 日付/時刻型
データ型 定義 値の例
DATE 日付 2017-07-07
DATETIME 日時 2017-07-07 13:00:00
TIME 時間 13:00:00
 
データ型とは?
データ型とは?
NULLとは?
値が入っていない、値が不明の状態を指す
数値の0やからの文字列’’とは異なる
SELECT *
FROM `bubbly-fuze-222610.sample_3.sales_result`
where store_member_id IS NULL ;
store_member_idがNULLのものを抽出する
(反対に、値の入っている行のみを抽出する場合はIS NOT NULLと記述する)
NULL(ヌル)値はデータ型ではありませんが、
知っておく必要があります。
SELECTで条件を指定する際に、
NULLを個別に指定する場面で使用します。
データの集約
syosekimei kakaku kankobi
python crawling 3200 2016/12/16
Perfect Ruby ver2.0 3260 2017/5/17
SELECT MAX(kakaku) AS max_price
FROM syoseki_table;
max_price
3260
結果
データの集約
集約とは、複数の値(特に数値)に対して何らか
の処理を行い結果を得ることです。
集約関数にはMAX(),AVG(), SUM()などがあります。
最も大きいkakakuの値を求める
結果の列名に分かりやすくする
ために、AS句で別名をつける
元表
SQL
syosekimei sub_genre kakaku
python crawling 0103 3200
Perfect Ruby ver2.0 0102 3260
Perfect Ruby ver3.0 0102 3560
SELECT sub_genre, MAX(kakaku) AS max_price
FROM `bubbly-fuze-222610.sample_3.syoseki_table`
GROUP BY sub_genre ;
データの集約
集約関数と密接な関係を持つのがGROUP BY句です。
GROUP BY句は指定する列をグループ化する働きを持ち
ます。
結果
元表
SQL
sub_genre max_price
0103 3200
0102 3560
sub_genreごとの
kakakuの最大値が表示される
関数 説明
COUNT(列名) 列の中のデータの件数を求める
COUNT(DISTINCT 列名) 列の中の重複しないデータの件数を求める
MAX(列名) 列の最大値を求める
MIN(列名) 列の最小値を求める
AVG(列名) 列の平均値を求める
ROUND(列名,桁数) 値を四捨五入する
SUM(列名) 合計を求める
データの集約
関数は、Excelと同様に
列をカッコで囲む形で記述します。
主な集約関数
SELECT sub_genre ,
COUNT(syosekimei) AS syoseki_cnt
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
GROUP BY sub_genre;
COUNT(*) とすると、NULLの行もカウントされます。
データの集約
結果
元表
SQL
syosekimei sub_genre kakaku
python crawling 0103 3200
Perfect Ruby ver2.0 0102 3260
Perfect Ruby ver3.0 0102 3560
sub_genre syoseki_cnt
0103 1
0102 2
データの件数が表示される
※NULLデータはカウント対象外
COUNT関数
MAX関数、MIN関数、AVG関数、ROUND関数
SELECT sub_genre ,
MAX(kakaku) AS max_price,
MIN(kakaku) AS min_price,
ROUND(AVG(kakaku),1) AS avg_price
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
GROUP BY sub_genre;
データの集約
syosekimei sub_genre kakaku
python crawling 0103 3200
Perfect Ruby ver2.0 0102 3260
Perfect Ruby ver3.0 0102 3800
sub_genre max_price min_price avg_price
0103 3200 3200 3200.0
0102 3800 3260 3530.0
データの集約
SELECT sub_genre ,
ROUND(AVG(kakaku),1) AS avg_price
FROM `bubbly-fuze-222610.sample_3.shoseki_table`
GROUP BY sub_genre
HAVING AVG(kakaku) > 2800;
sub_genreごとの価格の平均値を求め、
平均が2800より大きいデータをHAVINGで絞り込む
HAVING句を使うと集約後データに対し絞り込みを行え
ます。WHERE句と合わせて使うこともできます。
*参考図書:「これからはじめるSQL入門」池内孝啓著  
   技術評論社

More Related Content

Recently uploaded

ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
miyp
 

Recently uploaded (8)

ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
 
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
 

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

【GCPUG滋賀】BigQueryでさるでもわかるSQL(20190323)