Slide 1

Slide 1 text

1 【第1回】 エンジニアじゃなくてもこわくない!! データベース勉強会 2017/06/02

Slide 2

Slide 2 text

もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》 面倒くさいSQL 2

Slide 3

Slide 3 text

もくじ 》 今日のおやつ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》 面倒くさいSQL 3

Slide 4

Slide 4 text

今日のおやつ 》 JUCHHEIM のバームクーヘーン 4 https://www.juchheim.co.jp/

Slide 5

Slide 5 text

もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》 面倒くさいSQL 5

Slide 6

Slide 6 text

データベース 》 データベース ▷ データの集まり › 顧客データ › 商品データ › 売上データ 6 テーブル

Slide 7

Slide 7 text

テーブル 》 イメージしやすいのは、エクセル? 7 emp_id l_name f_name job_id 1 田中 一郎 2 2 佐藤 二郎 3 3 山田 三郎 2 4 田中 花子 1 job_id job_name salary 1 社長 1,000,000 2 営業 350,000 3 開発 350,000 4 バイト 100,000 テーブル名 : employee テーブル名 : job

Slide 8

Slide 8 text

テーブルの用語 8 列、カラム 行、レコード フィールド

Slide 9

Slide 9 text

テーブルのルール 》 各テーブルは最小限のデータのみ ▷ 重複は排除 》 フィールドが空の場合もある ▷ NULL (ヌル) 9

Slide 10

Slide 10 text

もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》 面倒くさいSQL 10

Slide 11

Slide 11 text

SQL 》 データの取得、格納、変更をする ▷ SELECT : 取得 ▷ INSERT : 格納 ▷ DELETE : 削除 ▷ UPDATE : 更新 … 11

Slide 12

Slide 12 text

もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》 面倒くさいSQL 12

Slide 13

Slide 13 text

すっごい基本 》 SELECT ~ FROM ~ WHERE ~; ▷ SELECT › どのデータを取得するか ▷ FROM › どこからデータを取得するか ▷ WHERE › どういう条件のデータを取得するか 13

Slide 14

Slide 14 text

SELECT 》 カラムの選択 ▷ 全カラムを選択 : * › SELECT * ▷ 複数のカラムを選択 : ,(カンマ)区切り › SELECT emp_id, f_name, l_name ▷ 重複を除く : distinct › SELECT distinct f_name 14

Slide 15

Slide 15 text

FROM 》 取得元(テーブル)の指定 ▷ FROM employee 15

Slide 16

Slide 16 text

WHERE 》 絞込条件 ▷ データの一致は = で指定 › WHERE emp_id = 1 ▷ データの不一致は <> で指定 ▷ データの大小は、>, <, >=, <= › WHERE emp_id < 2 › WHERE emp_id >= 3 ▷ データの範囲は BETWEEN a AND b › WHERE emp_id BETWEEN 2 AND 3 16

Slide 17

Slide 17 text

WHERE 》 条件式の組み合わせ ▷ かつ : and › WHERE job_id = 2 and emp_id = 1 ▷ または : or › WHERE emp_id =1 or emp_id = 2 ○ WHERE emp_id in (1,2) ▷ ではない : not › WHERE not emp_id = 1 17

Slide 18

Slide 18 text

基本なSQLのまとめ 》 カラムを選択する SELECT 》 データ取得元を指定する FROM 》 絞り込み条件を指定する WHERE 18 FROM SELECT WHERE

Slide 19

Slide 19 text

もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL ▷ 取得する上限指定 ▷ 並び変え条件指定 ▷ 集約関数 ▷ グループ化指定 》 面倒くさいSQL 19

Slide 20

Slide 20 text

LIMIT 》 結果行数の上限指定 ▷ 上限件数を指定 : limit › limit 10 20

Slide 21

Slide 21 text

ORDER BY 》 行を並び替える ▷ 昇順 に並び替える : order by ~ asc › order by salary asc ▷ 降順に並び替える : order by ~ desc › order by salary desc 21 asc : ascending desc : descending

Slide 22

Slide 22 text

集約関数 》 「縦に」計算を行う ▷ 行数を数える : count() › count(*), count(emp_id) ▷ 合計 : sum() › sum(salary) ▷ 平均 : avg() › avg(salary) ▷ 最小値 : min() › min(salary) ▷ 最大値 : max() › max(salary) 22 集約関数を使う際には、 SELECT 節には 集約関数しか書けない

Slide 23

Slide 23 text

GROUP BY 》 条件によって行をグループに分割 各グループ内で集約関数が使える ▷ グループ分割 : group by › group by job_id 23 job_id 2 3 2 1 グループ化 (group by) job_id count 2 2 job_id 2 2 集約関数 (count)

Slide 24

Slide 24 text

ちょっと難しいSQL のまとめ 》 取得する行数を制限する LIMIT 》 並び替えの条件を指定する ORDER BY 》 集計操作を行う 集約関数 》 グループ化の条件を指定する GROUP BY 24

Slide 25

Slide 25 text

もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》 面倒くさいSQL ▷ テーブル結合 25

Slide 26

Slide 26 text

JOIN 》 複数のテーブルをまとめて1つにする ▷ SELECT 噣 FROM テーブル名1 as 別名1 JOIN テーブル名2 as 別名2 ON ジョイン条件 噣 26

Slide 27

Slide 27 text

JOIN 27 emp_id l_name f_name job_id 1 田中 一郎 2 2 佐藤 二郎 3 3 山田 三郎 2 4 田中 花子 1 job_id job_name salary 1 社長 1,000,000 2 営業 350,000 3 開発 350,000 4 バイト 100,000 テーブル名 : employee テーブル名 : job

Slide 28

Slide 28 text

JOIN emp_id l_name f_name job_id job_id job_name salary 1 田中 一郎 2 2 営業 350,000 2 佐藤 二郎 3 3 開発 350,000 3 山田 三郎 2 2 営業 350,000 4 田中 花子 1 1 社長 1,000,000 28

Slide 29

Slide 29 text

JOIN SELECT * FROM employee as e JOIN job as j ON e.job_id = j.job_id ORDER BY e.emp_id; 29 emp_id l_name f_name job_id job_id job_name salary 1 田中 一郎 2 2 営業 350,000 2 佐藤 二郎 3 3 開発 350,000 3 山田 三郎 2 2 営業 350,000 4 田中 花子 1 1 社長 1,000,000

Slide 30

Slide 30 text

JOIN の種類 》 INNER JOIN ▷ 両方のテーブルで合致するレコードのみ結合 › JOIN の仕方を指定しないときのdefault 》 LEFT OUTER JOIN ▷ 左のテーブルをベースに合致するレコードを結合 》 RIGHT OUTER JOIN ▷ 右のテーブルをベースに合致するレコードを結合 30

Slide 31

Slide 31 text

INNER JOIN SELECT * FROM employee as e INNER JOIN job as j ON e.job_id = j.job_id ORDER BY e.emp_id; 31 emp_id l_name f_name job_id job_id job_name salary 1 田中 一郎 2 2 営業 350,000 2 佐藤 二郎 3 3 開発 350,000 3 山田 三郎 2 2 営業 350,000 4 田中 花子 1 1 社長 1,000,000

Slide 32

Slide 32 text

LEFT OUTER JOIN SELECT * FROM employee as e LEFT OUTER JOIN job as j ON e.job_id = j.job_id ORDER BY e.emp_id; 32 emp_id l_name f_name job_id job_id job_name salary 1 田中 一郎 2 2 営業 350,000 2 佐藤 二郎 3 3 開発 350,000 3 山田 三郎 2 2 営業 350,000 4 田中 花子 1 1 社長 1,000,000

Slide 33

Slide 33 text

RIGHT OUTER JOIN SELECT * FROM employee as e RIGHT OUTER JOIN job as j ON e.job_id = j.job_id ORDER BY e.emp_id; 33 emp_id l_name f_name job_id job_id job_name salary NULL NULL NULL NULL 4 バイト 100,000 1 田中 一郎 2 2 営業 350,000 2 佐藤 二郎 3 3 開発 350,000 3 山田 三郎 2 2 営業 350,000 4 田中 花子 1 1 社長 1,000,000

Slide 34

Slide 34 text

面倒くさいSQL のまとめ 》 複数のテーブルをまとめる : JOIN ▷ INNER JOIN ▷ OUTER JOIN 34

Slide 35

Slide 35 text

おまけ 》 データベースにあるテーブルの確認 ▷ show tables 》 テーブル定義の確認 ▷ desc テーブル名 35

Slide 36

Slide 36 text

おまけ2 》 SQL の考え方 1. 見たいテーブルを決める 2. テーブルのフィルタ条件を決める 3. 足りないデータの結合先を探す 4. 必要なカラムを指定する 36

Slide 37

Slide 37 text

おまけ3(初心者向け) 37 http://books.rakuten.co.jp/rb/13854590/ http://books.rakuten.co.jp/rb/12270619/ http://books.rakuten.co.jp/rb/14244722/

Slide 38

Slide 38 text

おまけ3 38 http://books.rakuten.co.jp/rb/4014610/ http://engineer- intern.jp/archives/7653

Slide 39

Slide 39 text

おまけ4(実務者向け) 39 http://books.rakuten.co.jp/rb/13296082/ http://books.rakuten.co.jp/rb/14786837/

Slide 40

Slide 40 text

おまけ5 》 ドットインストール ▷ http://dotinstall.com/lessons/basic_mysql_v2 》 paiza ▷ https://paiza.jp/works/sql/primer 》 SQL ひっそり散歩 ▷ http://hissori18.web.fc2.com/ 40

Slide 41

Slide 41 text

まとめ 》 話を聞いても覚えれない ▷ 自分で試すのが1番 41

Slide 42

Slide 42 text

付録 42 CREATE TABLE `employee` ( `emp_id` int(11) NOT NULL, `l_name` varchar(32) DEFAULT NULL, `f_name` varchar(32) DEFAULT NULL, `job_id` int(11) DEFAULT NULL, PRIMARY KEY (`emp_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `job` ( `job_id` int(11) NOT NULL, `job_name` varchar(32) DEFAULT NULL, `salary` int(11) DEFAULT NULL, PRIMARY KEY (`job_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO employee (emp_id, l_name, f_name, job_id) VALUES (1, '田中', '一郎', 2); INSERT INTO employee (emp_id, l_name, f_name, job_id) VALUES (2, '佐藤', '二郎', 3); INSERT INTO employee (emp_id, l_name, f_name, job_id) VALUES (3, '山田', '三郎', 2); INSERT INTO employee (emp_id, l_name, f_name, job_id) VALUES (4, '田中', '花子', 1); INSERT INTO job (job_id, job_name, salary) VALUES (1, '社長', 1000000); INSERT INTO job (job_id, job_name, salary) VALUES (2, '営業', 350000); INSERT INTO job (job_id, job_name, salary) VALUES (3, '開発', 350000); INSERT INTO job (job_id, job_name, salary) VALUES (4, 'バイト', 100000);

Slide 43

Slide 43 text

スライドテンプレート 》 http://sagittarius.dip.jp/toshi/template.php 43