データベース
第4回
SQL(SELECT:基本)
1
2015年4⽉30⽇(⽊) 7・8時限
担当:奥 健太
SQL編
回 ⽇付 テーマ
2 4/16 SQL概要
3 4/23 SQL(CREATE, INSERT, DELETE, UPDATEなど)
4 4/30 SQL(SELECT:基本)
5 5/7 SQL(SELECT:結合,副問合せ)
6 5/14 SQL(VIEW, ALTER, GRANTなど)
7 5/21 SQL復習,中間試験(SQL)
2
SQLの主なコマンド⼀覧(2/2)
3
種類 コマンド 説明
DML
INSERT テーブルにデータを登録
DELETE テーブルからデータを削除
UPDATE テーブル内のデータを更新
SELECT テーブル内からデータを検索して
取り出す
DCL
COMMIT 正常終了を通知
ROLLBACK 異常終了を通知
GRANT 権限を与える
REVOKE 権限を取り下げる
本⽇の講義で学ぶこと
4
問合せ
条件
SELECTの基本
出⼒
指定
集約
関数
グループ
化
例;京都の観光スポットテーブル
5
spot
id name address category checkins
1壬⽣寺 中京区壬⽣梛ノ宮町31 Temple 770
2
下鴨神社 (賀茂御祖神社)
Shimogamo-jinja
左京区下鴨泉川町59 Shrine 2485
3東寺 (教王護国寺) To-ji Temple 南区九条町1 Temple 2092
4北野天満宮 Kitano-temman-gu 上京区⾺喰町 Shrine 1960
5京都御苑 上京区京都御苑3 Park 1304
6⼋坂神社 東⼭区祇園町北側625 Shrine 4102
7仁和寺 Ninna-ji Temple 右京区御室⼤内33 Temple 1006
8清⽔寺 Kiyomizu-dera Temple 東⼭区清⽔1-294 Temple 4742
9
京都市美術館
(Kyoto Municipal Museum of Art)
岡崎円勝寺町124 Art Gallery 864
10京都国際マンガミュージアム 中京区⾦吹町452 Art Museum 859
11銀閣寺 (慈照寺) Ginkaku-ji 左京区銀閣寺町2 Temple 2151
12南禅寺 Nanzen-ji 左京区南禅寺福地町86 Temple 1605
13渡⽉橋 右京区嵯峨中ノ島町 Bridge 2698
… … … … …
*manaba+R上の"spot.sql"内のSQL⽂を実⾏することで復元できる
*(参考)https://ja.foursquare.com/
基本
6
データの検索
SELECT
7
SELECT 【カラム名】
FROM 【テーブル名】
WHERE 【問合せ条件】
【出力指定】;
 指定したテーブルから,問合せ条件に合致したデータを検
索し,指定したカラムの値を,指定した出⼒⽅法で出⼒
 WHERE句以降は省略可
全データの出⼒
8
SELECT * FROM spot;
すべてのカラムを意味する
SELECT spot;
よくある間違いの例
9
カラムの指定がない
FROMがない
SELECT FROM spot;
カラムの指定がない
SELECT name;
テーブルの指定がない
複数のカラムの指定
10
SELECT id, name FROM spot;
問合せ条件
11
条件の指定
12
SELECT name FROM spot
WHERE id = 1;
範囲検索
13
SELECT name, checkins FROM spot
WHERE checkins >= 1000;
⽐較演算⼦
14
基本的な条件の記述
⽐較演算⼦ カラムが
数値型の場合
カラムが⽂字列型の場合
カラム = a aと等しい aの⽂字列と⼀致
カラム < a
(カラム > a)
aよりも⼩さい
(⼤きい)
列の⽂字列のコードがaの⽂字列の
コードよりも⼩さい(⼤きい)
カラム <= a
(カラム >= a)
a以下(以上) 列の⽂字列のコードがaの⽂字列の
コードと⼀致する,もしくは,それ
よりも⼩さい(⼤きい)
カラム <> a aと等しくない aの⽂字列と⼀致しない
【カラム名】 【比較演算子】 【値】
部分⼀致検索
15
SELECT name FROM spot
WHERE name LIKE '%寺';
LIKE句
16
⽂字列の部分⼀致(前⽅⼀致や後⽅⼀致等)を条
件で指定することが可能
ワイルドカード 説明
% 0個以上の⽂字
_ 任意の1個の⽂字
%a% どこかに'a'を含む⽂字列
_%a%_ 中間に'a'を含む⽂字列
'%'や'_'を⽂字列の要素として指定したいときは,
直前にエスケープ⽂字'¥'を置く
LIKE 【%等のワイルドカード】
LIKE句による条件の指定
17
SELECT name FROM spot
WHERE name LIKE '%寺';
SELECT name FROM spot
WHERE name LIKE '%寺_';
SELECT name FROM spot
WHERE name LIKE '%寺%';
SELECT name FROM spot
WHERE name LIKE '_%寺%_';
空値(NULL)の指定
18
SELECT name, address FROM spot
WHERE address IS NULL;
SELECT name, address FROM spot
WHERE address IS NOT NULL;
空値(データが未登録)を
意味する
条件の組合せ
19
SELECT name, category, checkins FROM spot
WHERE category = 'Temple'
AND checkins >= 1000;
SELECT name, category, checkins FROM spot
WHERE category = 'Temple'
OR checkins >= 1000;
BETWEEN
20
SELECT name, checkins FROM spot
WHERE checkins BETWEEN 2000 AND 3000;
SELECT name, checkins FROM spot
WHERE checkins >= 2000 AND checkins <= 3000;
等価
IN
21
SELECT name, category FROM spot
WHERE category IN ('Temple', 'Shrine');
SELECT name, category FROM spot
WHERE category = 'Temple'
OR category = 'Shrine';
等価
出⼒指定
22
並べ替え
23
SELECT name, checkins FROM spot
ORDER BY checkins;
SELECT name, checkins FROM spot
ORDER BY checkins DESC;
SELECT name, checkins FROM spot
ORDER BY checkins ASC;
昇順(ascending-order)を指定
降順(descending-order)を指定
出⼒件数の指定(LIMIT)
24
SELECT name, checkins FROM spot
ORDER BY checkins DESC LIMIT 5;
SELECT name, checkins FROM spot
ORDER BY checkins DESC LIMIT 3, 5;
複数条件での並べ替え
25
SELECT name, category, checkins FROM spot
ORDER BY category ASC, checkins DESC;
1. categoryの昇順に出⼒する
2. categoryが同じ場合には,
checkinsの降順に並び変えて出⼒する
重複の除去を指定
26
SELECT DISTINCT category FROM spot;
明⽰的に重複の除去を指定
(distinct = 別の,異なった)
集約関数
27
集約関数(1)
28
SELECT
count(*),
avg(checkins),
sum(checkins),
max(checkins),
min(checkins)
FROM spot;
集約関数
集約関数
29
集約関数 説明
count() 指定条件によって得られた
テーブルのロウ数を出⼒
avg() 指定条件によって得られた
カラムの値の平均値を出⼒
sum() 指定条件によって得られた
カラムの値の合計を出⼒
max() 指定条件によって得られた
カラムの値の中の最⼤値を出⼒
min() 指定条件によって得られた
カラムの値の中の最⼩値を出⼒
集約関数(2)
30
SELECT count(DISTINCT category) FROM spot;
 相違なるcategoryの件数を出⼒する
グループ化
31
グループ化(1)
32
SELECT category, avg(checkins) FROM spot
GROUP BY category;
 categoryごとのcheckinsの平均を出⼒する
グループ化(2)
33
SELECT category, avg(checkins) FROM spot
WHERE checkins >= 1000 GROUP BY category;
 checkinsが1000以上のスポットを対象に,
categoryごとにcheckinsの平均を出⼒する
グループ化(3)
34
SELECT category, avg(checkins) FROM spot
GROUP BY category
HAVING avg(checkins) >= 1000;
 categoryごとにcheckinsの平均を出⼒する.
ただし,checkinsが1000以上のcategoryのみ出⼒
 WHEREは問合せの条件
 HAVINGはあくまでも出⼒対象の条件
まとめ
35
問合せ
条件
SELECTの基本
出⼒
指定
集約
関数
グループ
化
まとめ
36
SELECTの基本
WHERE
LIKE BETWEEN
IN ORDER BY
LIMIT
DISTINCT
count()
avg()
sum()
max()
min()
GROUP BY
HAVING
本⽇学習したキーワード
〜SQL編〜
37
MySQL スクリプトファイル
NOT-NULL制約 静的SQL
SQL 制約
⼀意性制約 対話的DB操作
外部キー制約 ダンプファイル
外部キー データ制御⾔語(DCL)
仮想テーブル データ操作⾔語(DML)
カラム(列) データ定義⾔語(DDL)
関係代数 データベース
関係データベース管理システム(RDBMS) テーブル(表)
関係データモデル テーブル副問合せ
完全外部結合 問合せ(クエリ)
交差結合 等結合
参照整合性制約 動的SQL
⾃⼰結合 内部結合
⾃然結合 左外部結合
集約関数 ビュー
主キー 副問合せ
主キー制約 右外部結合
スカラ副問合せ ロウ(⾏)
これまでに学習したキーワード
〜SQL編〜
38
MySQL スクリプトファイル
NOT-NULL制約 静的SQL
SQL 制約
⼀意性制約 対話的DB操作
外部キー制約 ダンプファイル
外部キー データ制御⾔語(DCL)
仮想テーブル データ操作⾔語(DML)
カラム(列) データ定義⾔語(DDL)
関係代数 データベース
関係データベース管理システム(RDBMS) テーブル(表)
関係データモデル テーブル副問合せ
完全外部結合 問合せ(クエリ)
交差結合 等結合
参照整合性制約 動的SQL
⾃⼰結合 内部結合
⾃然結合 左外部結合
集約関数 ビュー
主キー 副問合せ
主キー制約 右外部結合
スカラ副問合せ ロウ(⾏)
本⽇学習したSQLキーワード
39
ALL DROP TABLE ORDER BY
ALTER TABLE ... ADD DROP USER PRIMARY KEY
ALTER TABLE ... CHANGE EXISTS REFERENCES
ALTER TABLE ... DROP FOREIGN KEY REVOKE
ALTER TABLE ... MODIFY FULL OUTER JOIN RIGHT OUTER JOIN
ALTER TABLE ... RENAME AS GRANT SELECT
ANY GROUP BY SHOW COLUMNS FROM
AS HAVING SHOW DATABASES
ASC IN SHOW TABLES
avg INNER JOIN SOME
BETWEEN INSERT INTO sum
count JOIN UNIQUE
CREATE DATABASE LEFT OUTER JOIN UPDATE
CREATE TABLE LIKE USE
CREATE VIEW LIMIT WHERE
CROSS JOIN max
DELETE FROM min
DESC NATURAL JOIN
DISTINCT NOT EXISTS
DROP DATABASE NOT NULL
これまでに学習したSQLキーワード
40
ALL DROP TABLE ORDER BY
ALTER TABLE ... ADD DROP USER PRIMARY KEY
ALTER TABLE ... CHANGE EXISTS REFERENCES
ALTER TABLE ... DROP FOREIGN KEY REVOKE
ALTER TABLE ... MODIFY FULL OUTER JOIN RIGHT OUTER JOIN
ALTER TABLE ... RENAME AS GRANT SELECT
ANY GROUP BY SHOW COLUMNS FROM
AS HAVING SHOW DATABASES
ASC IN SHOW TABLES
avg INNER JOIN SOME
BETWEEN INSERT INTO sum
count JOIN UNIQUE
CREATE DATABASE LEFT OUTER JOIN UPDATE
CREATE TABLE LIKE USE
CREATE VIEW LIMIT WHERE
CROSS JOIN max
DELETE FROM min
DESC NATURAL JOIN
DISTINCT NOT EXISTS
DROP DATABASE NOT NULL

データベース04 - SQL(SELECT:基本)