20170602_sqlstudy

 20170602_sqlstudy

ビジネス系の人向けにつくったsql 勉強会用資料

F2e4745f5f04a43b08d5419315b68e3c?s=128

Hiroaki ONO

June 10, 2017
Tweet

Transcript

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

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

    面倒くさいSQL 2
  3. もくじ 》 今日のおやつ 》 データベース 》 SQL 》 基本なSQL 》

    ちょっと難しいSQL 》 面倒くさいSQL 3
  4. 今日のおやつ 》 JUCHHEIM のバームクーヘーン 4 https://www.juchheim.co.jp/

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

    面倒くさいSQL 5
  6. データベース 》 データベース ▷ データの集まり › 顧客データ › 商品データ ›

    売上データ 6 テーブル
  7. テーブル 》 イメージしやすいのは、エクセル? 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
  8. テーブルの用語 8 列、カラム 行、レコード フィールド

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

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

    面倒くさいSQL 10
  11. SQL 》 データの取得、格納、変更をする ▷ SELECT : 取得 ▷ INSERT :

    格納 ▷ DELETE : 削除 ▷ UPDATE : 更新 … 11
  12. もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》

    面倒くさいSQL 12
  13. すっごい基本 》 SELECT ~ FROM ~ WHERE ~; ▷ SELECT

    › どのデータを取得するか ▷ FROM › どこからデータを取得するか ▷ WHERE › どういう条件のデータを取得するか 13
  14. SELECT 》 カラムの選択 ▷ 全カラムを選択 : * › SELECT *

    ▷ 複数のカラムを選択 : ,(カンマ)区切り › SELECT emp_id, f_name, l_name ▷ 重複を除く : distinct › SELECT distinct f_name 14
  15. FROM 》 取得元(テーブル)の指定 ▷ FROM employee 15

  16. 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
  17. 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
  18. 基本なSQLのまとめ 》 カラムを選択する SELECT 》 データ取得元を指定する FROM 》 絞り込み条件を指定する WHERE

    18 FROM SELECT WHERE
  19. もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL ▷

    取得する上限指定 ▷ 並び変え条件指定 ▷ 集約関数 ▷ グループ化指定 》 面倒くさいSQL 19
  20. LIMIT 》 結果行数の上限指定 ▷ 上限件数を指定 : limit › limit 10

    20
  21. ORDER BY 》 行を並び替える ▷ 昇順 に並び替える : order by

    ~ asc › order by salary asc ▷ 降順に並び替える : order by ~ desc › order by salary desc 21 asc : ascending desc : descending
  22. 集約関数 》 「縦に」計算を行う ▷ 行数を数える : count() › count(*), count(emp_id)

    ▷ 合計 : sum() › sum(salary) ▷ 平均 : avg() › avg(salary) ▷ 最小値 : min() › min(salary) ▷ 最大値 : max() › max(salary) 22 集約関数を使う際には、 SELECT 節には 集約関数しか書けない
  23. 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)
  24. ちょっと難しいSQL のまとめ 》 取得する行数を制限する LIMIT 》 並び替えの条件を指定する ORDER BY 》

    集計操作を行う 集約関数 》 グループ化の条件を指定する GROUP BY 24
  25. もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》

    面倒くさいSQL ▷ テーブル結合 25
  26. JOIN 》 複数のテーブルをまとめて1つにする ▷ SELECT 噣 FROM テーブル名1 as 別名1

    JOIN テーブル名2 as 別名2 ON ジョイン条件 噣 26
  27. 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
  28. 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
  29. 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
  30. JOIN の種類 》 INNER JOIN ▷ 両方のテーブルで合致するレコードのみ結合 › JOIN の仕方を指定しないときのdefault

    》 LEFT OUTER JOIN ▷ 左のテーブルをベースに合致するレコードを結合 》 RIGHT OUTER JOIN ▷ 右のテーブルをベースに合致するレコードを結合 30
  31. 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
  32. 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
  33. 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
  34. 面倒くさいSQL のまとめ 》 複数のテーブルをまとめる : JOIN ▷ INNER JOIN ▷

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

    テーブル名 35
  36. おまけ2 》 SQL の考え方 1. 見たいテーブルを決める 2. テーブルのフィルタ条件を決める 3. 足りないデータの結合先を探す

    4. 必要なカラムを指定する 36
  37. おまけ3(初心者向け) 37 http://books.rakuten.co.jp/rb/13854590/ http://books.rakuten.co.jp/rb/12270619/ http://books.rakuten.co.jp/rb/14244722/

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

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

  40. おまけ5 》 ドットインストール ▷ http://dotinstall.com/lessons/basic_mysql_v2 》 paiza ▷ https://paiza.jp/works/sql/primer 》

    SQL ひっそり散歩 ▷ http://hissori18.web.fc2.com/ 40
  41. まとめ 》 話を聞いても覚えれない ▷ 自分で試すのが1番 41

  42. 付録 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);
  43. スライドテンプレート 》 http://sagittarius.dip.jp/toshi/template.php 43