Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20170602_sqlstudy

 20170602_sqlstudy

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

Hiroaki ONO

June 10, 2017
Tweet

More Decks by Hiroaki ONO

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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)

    View Slide

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

    View Slide

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

    View Slide

  26. JOIN
    》 複数のテーブルをまとめて1つにする
    ▷ SELECT

    FROM
    テーブル名1 as 別名1
    JOIN テーブル名2 as 別名2
    ON ジョイン条件

    26

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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);

    View Slide

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

    View Slide