Share
Embed
Transcript
43 slides
-
もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》
面倒くさいSQL 2 -
もくじ 》 今日のおやつ 》 データベース 》 SQL 》 基本なSQL 》
ちょっと難しいSQL 》 面倒くさいSQL 3 -
もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》
面倒くさいSQL 5 -
データベース 》 データベース ▷ データの集まり › 顧客データ › 商品データ ›
売上データ 6 テーブル -
テーブル 》 イメージしやすいのは、エクセル? 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 -
もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》
面倒くさいSQL 10 -
SQL 》 データの取得、格納、変更をする ▷ SELECT : 取得 ▷ INSERT :
格納 ▷ DELETE : 削除 ▷ UPDATE : 更新 … 11 -
もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》
面倒くさいSQL 12 -
すっごい基本 》 SELECT ~ FROM ~ WHERE ~; ▷ SELECT
› どのデータを取得するか ▷ FROM › どこからデータを取得するか ▷ WHERE › どういう条件のデータを取得するか 13 -
SELECT 》 カラムの選択 ▷ 全カラムを選択 : * › SELECT *
▷ 複数のカラムを選択 : ,(カンマ)区切り › SELECT emp_id, f_name, l_name ▷ 重複を除く : distinct › SELECT distinct f_name 14 -
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 -
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 -
基本なSQLのまとめ 》 カラムを選択する SELECT 》 データ取得元を指定する FROM 》 絞り込み条件を指定する WHERE
18 FROM SELECT WHERE -
もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL ▷
取得する上限指定 ▷ 並び変え条件指定 ▷ 集約関数 ▷ グループ化指定 》 面倒くさいSQL 19 -
ORDER BY 》 行を並び替える ▷ 昇順 に並び替える : order by
~ asc › order by salary asc ▷ 降順に並び替える : order by ~ desc › order by salary desc 21 asc : ascending desc : descending -
集約関数 》 「縦に」計算を行う ▷ 行数を数える : count() › count(*), count(emp_id)
▷ 合計 : sum() › sum(salary) ▷ 平均 : avg() › avg(salary) ▷ 最小値 : min() › min(salary) ▷ 最大値 : max() › max(salary) 22 集約関数を使う際には、 SELECT 節には 集約関数しか書けない -
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) -
ちょっと難しいSQL のまとめ 》 取得する行数を制限する LIMIT 》 並び替えの条件を指定する ORDER BY 》
集計操作を行う 集約関数 》 グループ化の条件を指定する GROUP BY 24 -
もくじ 》 データベース 》 SQL 》 基本なSQL 》 ちょっと難しいSQL 》
面倒くさいSQL ▷ テーブル結合 25 -
JOIN 》 複数のテーブルをまとめて1つにする ▷ SELECT 噣 FROM テーブル名1 as 別名1
JOIN テーブル名2 as 別名2 ON ジョイン条件 噣 26 -
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 -
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 -
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 -
JOIN の種類 》 INNER JOIN ▷ 両方のテーブルで合致するレコードのみ結合 › JOIN の仕方を指定しないときのdefault
》 LEFT OUTER JOIN ▷ 左のテーブルをベースに合致するレコードを結合 》 RIGHT OUTER JOIN ▷ 右のテーブルをベースに合致するレコードを結合 30 -
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 -
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 -
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 -
面倒くさいSQL のまとめ 》 複数のテーブルをまとめる : JOIN ▷ INNER JOIN ▷
OUTER JOIN 34 -
おまけ2 》 SQL の考え方 1. 見たいテーブルを決める 2. テーブルのフィルタ条件を決める 3. 足りないデータの結合先を探す
4. 必要なカラムを指定する 36 -
おまけ5 》 ドットインストール ▷ http://dotinstall.com/lessons/basic_mysql_v2 》 paiza ▷ https://paiza.jp/works/sql/primer 》
SQL ひっそり散歩 ▷ http://hissori18.web.fc2.com/ 40 -
付録 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);