40
データベース 第4回 SQL(SELECT:基本) 1 2015年4⽉30⽇(⽊) 7・8時限 担当:奥 健太

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

Embed Size (px)

Citation preview

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

データベース第4回

SQL(SELECT:基本)

1

2015年4⽉30⽇(⽊) 7・8時限担当:奥 健太

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

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

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

SQLの主なコマンド⼀覧(2/2)

3

種類 コマンド 説明

DML

INSERT テーブルにデータを登録DELETE テーブルからデータを削除UPDATE テーブル内のデータを更新SELECT テーブル内からデータを検索して

取り出す

DCL

COMMIT 正常終了を通知ROLLBACK 異常終了を通知GRANT 権限を与えるREVOKE 権限を取り下げる

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

本⽇の講義で学ぶこと

4

問合せ条件

SELECTの基本出⼒指定

集約関数

グループ化

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

例;京都の観光スポットテーブル

5

spotid name address category checkins1壬⽣寺 中京区壬⽣梛ノ宮町31 Temple 7702下鴨神社 (賀茂御祖神社)

Shimogamo-jinja 左京区下鴨泉川町59 Shrine 24853東寺 (教王護国寺) To-ji Temple 南区九条町1 Temple 20924北野天満宮 Kitano-temman-gu 上京区⾺喰町 Shrine 19605京都御苑 上京区京都御苑3 Park 13046⼋坂神社 東⼭区祇園町北側625 Shrine 41027仁和寺 Ninna-ji Temple 右京区御室⼤内33 Temple 10068清⽔寺 Kiyomizu-dera Temple 東⼭区清⽔1-294 Temple 47429京都市美術館

(Kyoto Municipal Museum of Art) 岡崎円勝寺町124 Art Gallery 86410京都国際マンガミュージアム 中京区⾦吹町452 Art Museum 85911銀閣寺 (慈照寺) Ginkaku-ji 左京区銀閣寺町2 Temple 215112南禅寺 Nanzen-ji 左京区南禅寺福地町86 Temple 160513渡⽉橋 右京区嵯峨中ノ島町 Bridge 2698… … … … …

*manaba+R上の"spot.sql"内のSQL⽂を実⾏することで復元できる*(参考)https://ja.foursquare.com/

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

基本

6

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

データの検索SELECT

7

SELECT 【カラム名】

FROM 【テーブル名】

WHERE 【問合せ条件】

【出力指定】;

指定したテーブルから,問合せ条件に合致したデータを検索し,指定したカラムの値を,指定した出⼒⽅法で出⼒

WHERE句以降は省略可

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

全データの出⼒

8

SELECT * FROM spot;

すべてのカラムを意味する

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

SELECT spot;

よくある間違いの例

9

カラムの指定がないFROMがない

SELECT FROM spot;

カラムの指定がない

SELECT name;

テーブルの指定がない

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

複数のカラムの指定

10

SELECT id, name FROM spot;

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

問合せ条件

11

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

条件の指定

12

SELECT name FROM spotWHERE id = 1;

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

範囲検索

13

SELECT name, checkins FROM spotWHERE checkins >= 1000;

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

⽐較演算⼦

14

基本的な条件の記述

⽐較演算⼦ カラムが数値型の場合

カラムが⽂字列型の場合

カラム = a aと等しい aの⽂字列と⼀致カラム < a

(カラム > a)aよりも⼩さい(⼤きい)

列の⽂字列のコードがaの⽂字列のコードよりも⼩さい(⼤きい)

カラム <= a(カラム >= a)

a以下(以上) 列の⽂字列のコードがaの⽂字列のコードと⼀致する,もしくは,それよりも⼩さい(⼤きい)

カラム <> a aと等しくない aの⽂字列と⼀致しない

【カラム名】 【比較演算子】 【値】

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

部分⼀致検索

15

SELECT name FROM spotWHERE name LIKE '%寺';

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

LIKE句

16

⽂字列の部分⼀致(前⽅⼀致や後⽅⼀致等)を条件で指定することが可能

ワイルドカード 説明% 0個以上の⽂字_ 任意の1個の⽂字

%a% どこかに'a'を含む⽂字列_%a%_ 中間に'a'を含む⽂字列

'%'や'_'を⽂字列の要素として指定したいときは,直前にエスケープ⽂字'¥'を置く

LIKE 【%等のワイルドカード】

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

LIKE句による条件の指定

17

SELECT name FROM spotWHERE name LIKE '%寺';

SELECT name FROM spotWHERE name LIKE '%寺_';

SELECT name FROM spotWHERE name LIKE '%寺%';

SELECT name FROM spotWHERE name LIKE '_%寺%_';

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

空値(NULL)の指定

18

SELECT name, address FROM spotWHERE address IS NULL;

SELECT name, address FROM spotWHERE address IS NOT NULL;

空値(データが未登録)を意味する

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

条件の組合せ

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;

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

BETWEEN

20

SELECT name, checkins FROM spotWHERE checkins BETWEEN 2000 AND 3000;

SELECT name, checkins FROM spotWHERE checkins >= 2000 AND checkins <= 3000;

等価

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

IN

21

SELECT name, category FROM spotWHERE category IN ('Temple', 'Shrine');

SELECT name, category FROM spotWHERE category = 'Temple'OR category = 'Shrine';

等価

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

出⼒指定

22

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

並べ替え

23

SELECT name, checkins FROM spotORDER BY checkins;

SELECT name, checkins FROM spotORDER BY checkins DESC;

SELECT name, checkins FROM spotORDER BY checkins ASC;

昇順(ascending-order)を指定

降順(descending-order)を指定

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

出⼒件数の指定(LIMIT)

24

SELECT name, checkins FROM spotORDER BY checkins DESC LIMIT 5;

SELECT name, checkins FROM spotORDER BY checkins DESC LIMIT 3, 5;

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

複数条件での並べ替え

25

SELECT name, category, checkins FROM spotORDER BY category ASC, checkins DESC;

1. categoryの昇順に出⼒する2. categoryが同じ場合には,

checkinsの降順に並び変えて出⼒する

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

重複の除去を指定

26

SELECT DISTINCT category FROM spot;

明⽰的に重複の除去を指定(distinct = 別の,異なった)

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

集約関数

27

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

集約関数(1)

28

SELECT count(*),avg(checkins),sum(checkins),max(checkins),min(checkins)

FROM spot;

集約関数

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

集約関数

29

集約関数 説明count() 指定条件によって得られた

テーブルのロウ数を出⼒avg() 指定条件によって得られた

カラムの値の平均値を出⼒sum() 指定条件によって得られた

カラムの値の合計を出⼒max() 指定条件によって得られた

カラムの値の中の最⼤値を出⼒min() 指定条件によって得られた

カラムの値の中の最⼩値を出⼒

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

集約関数(2)

30

SELECT count(DISTINCT category) FROM spot;

相違なるcategoryの件数を出⼒する

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

グループ化

31

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

グループ化(1)

32

SELECT category, avg(checkins) FROM spotGROUP BY category;

categoryごとのcheckinsの平均を出⼒する

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

グループ化(2)

33

SELECT category, avg(checkins) FROM spotWHERE checkins >= 1000 GROUP BY category;

checkinsが1000以上のスポットを対象に,categoryごとにcheckinsの平均を出⼒する

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

グループ化(3)

34

SELECT category, avg(checkins) FROM spotGROUP BY categoryHAVING avg(checkins) >= 1000;

categoryごとにcheckinsの平均を出⼒する.ただし,checkinsが1000以上のcategoryのみ出⼒

WHEREは問合せの条件 HAVINGはあくまでも出⼒対象の条件

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

まとめ

35

問合せ条件

SELECTの基本出⼒指定

集約関数

グループ化

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

まとめ

36

SELECTの基本WHERE

LIKE BETWEEN

IN ORDER BY

LIMIT

DISTINCT

count()

avg()

sum()

max()

min()

GROUP BY

HAVING

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

本⽇学習したキーワード〜SQL編〜

37

MySQL スクリプトファイルNOT-NULL制約 静的SQL

SQL 制約⼀意性制約 対話的DB操作外部キー制約 ダンプファイル外部キー データ制御⾔語(DCL)仮想テーブル データ操作⾔語(DML)カラム(列) データ定義⾔語(DDL)関係代数 データベース関係データベース管理システム(RDBMS) テーブル(表)関係データモデル テーブル副問合せ完全外部結合 問合せ(クエリ)交差結合 等結合参照整合性制約 動的SQL⾃⼰結合 内部結合⾃然結合 左外部結合集約関数 ビュー主キー 副問合せ主キー制約 右外部結合スカラ副問合せ ロウ(⾏)

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

これまでに学習したキーワード〜SQL編〜

38

MySQL スクリプトファイルNOT-NULL制約 静的SQL

SQL 制約⼀意性制約 対話的DB操作外部キー制約 ダンプファイル外部キー データ制御⾔語(DCL)仮想テーブル データ操作⾔語(DML)カラム(列) データ定義⾔語(DDL)関係代数 データベース関係データベース管理システム(RDBMS) テーブル(表)関係データモデル テーブル副問合せ完全外部結合 問合せ(クエリ)交差結合 等結合参照整合性制約 動的SQL⾃⼰結合 内部結合⾃然結合 左外部結合集約関数 ビュー主キー 副問合せ主キー制約 右外部結合スカラ副問合せ ロウ(⾏)

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

本⽇学習したSQLキーワード

39

ALL DROP TABLE ORDER BYALTER TABLE ... ADD DROP USER PRIMARY KEYALTER TABLE ... CHANGE EXISTS REFERENCESALTER TABLE ... DROP FOREIGN KEY REVOKEALTER TABLE ... MODIFY FULL OUTER JOIN RIGHT OUTER JOINALTER TABLE ... RENAME AS GRANT SELECTANY GROUP BY SHOW COLUMNS FROMAS HAVING SHOW DATABASESASC IN SHOW TABLESavg INNER JOIN SOMEBETWEEN INSERT INTO sumcount JOIN UNIQUECREATE DATABASE LEFT OUTER JOIN UPDATECREATE TABLE LIKE USECREATE VIEW LIMIT WHERECROSS JOIN maxDELETE FROM minDESC NATURAL JOINDISTINCT NOT EXISTSDROP DATABASE NOT NULL

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

これまでに学習したSQLキーワード

40

ALL DROP TABLE ORDER BYALTER TABLE ... ADD DROP USER PRIMARY KEYALTER TABLE ... CHANGE EXISTS REFERENCESALTER TABLE ... DROP FOREIGN KEY REVOKEALTER TABLE ... MODIFY FULL OUTER JOIN RIGHT OUTER JOINALTER TABLE ... RENAME AS GRANT SELECTANY GROUP BY SHOW COLUMNS FROMAS HAVING SHOW DATABASESASC IN SHOW TABLESavg INNER JOIN SOMEBETWEEN INSERT INTO sumcount JOIN UNIQUECREATE DATABASE LEFT OUTER JOIN UPDATECREATE TABLE LIKE USECREATE VIEW LIMIT WHERECROSS JOIN maxDELETE FROM minDESC NATURAL JOINDISTINCT NOT EXISTSDROP DATABASE NOT NULL