データベース工学および演習 第 5 章 リレーショナルデータベース言語 sql

48
デデデデデデデデデデデデデ デ5デ デデデデデデデデデデデデデデデ SQL デデデ デデデ デデ 1

Upload: yeo-sexton

Post on 03-Jan-2016

33 views

Category:

Documents


0 download

DESCRIPTION

データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL. ジョン ジンヒ 全 眞嬉. 担当教員. 所属 東北大学 大学院情報科学研究科 准教授 名前 全 眞嬉(ジョン ジンヒ) 連絡先等 [email protected] Tel/ Fax 022-795-4747 http://www.dais.is.tohku.ac.jp/~jinhee/. 5. 1  背景. データベース( Database ). 特定のテーマに従って収集され,容易に再利用できるように整理されたデータの群 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

データベース工学および演習

第 5 章リレーショナルデータベース言語SQL

ジョン ジンヒ

全 眞嬉

1

Page 2: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

担当教員

所属 東北大学 大学院情報科学研究科 准教授

名前 全 眞嬉(ジョン ジンヒ)

連絡先等 [email protected] Tel/ Fax 022-795-4747 http://www.dais.is.tohku.ac.jp/~jinhee/

2

Page 3: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5. 1  背景3

Page 4: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

データベース( Database )

特定のテーマに従って収集され,容易に再利用できるように整理されたデータの群

再利用できるようになっているところが重要 データベースは複数の目的で使用される 再利用する為にはデータは良く整理されている

必要がある 複数の目的で共有できる何らかのテーマがある

のが一般的 例

音楽データベース,気象情報データベース,図書館データベース,顧客データベース・・・

4

Page 5: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

データベース管理システム

データベース管理システム (Database Management System:DBMS) データベースをコンピュータ上に構築・管理す

る為の仕組み データベースシステム (Database Sytem)

データベース管理システムとそれによって管理されるデータの群を合わせてデータベースシステムと呼ぶ

5

Page 6: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

SQL

SQL(Structured Query Languages) データベースを操作するための言語 1970 年代 IBM の E.F. Codd 氏のよっ

て リレーショナルデータベース概念が提唱E.F.Codd , “A Relational Model of Data for Large Shared Data Banks”,Communications of the ACM Vol.13, No.6, pp.377–387,1970

E.F. Codd

6

Page 7: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

SQL

SQL(Structured Query Languages) System R の開発

世界初のリレーショナルデータベース管理システム( RDBMS )

IBM がリレーショナルモデルの有効性を実証する為開発した実験的データベースシステム

システムを操作するに当って SEQUEL ( Structured English Query Language )が採用

SQLSQL(Structured Query Languages) に改名

Oracle や Sybase, Informix などの商用 DBMSが SQL を実装し,各ベンダーごとに拡張されている

E.F. Codd

7

Page 8: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

SQL

SQL の改良 Oracle や Sybase, Informix などの商用 DBMS

が SQL を実装し,各ベンダーごとに拡張されている

改良と共に SQL の標準化 1986 年  SQL86

ANSI(American National Standard Institute) 1987 年 SQL 87

ISO ( International Organization Standardization) JIS(Japanese Industrial Standard)

8

Page 9: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

SQL

近年では SQL99

オブジェクト指向データベースへの拡張 OLAP(Online Analytical Processing) 関連そうあの

強化 SQL:2003

マルチメディアデータベース関連機能への拡張 XML データ関連のフィーチャが追加

SQL:2006 XQuery

9

Page 10: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

SQL って何?

簡単に言えば リレーショナルデータベース管理システムと対

話する為の言語 リレーショナルデータベース管理システムに対

して問い合わせる際に SQL を使う

2005 年に発売されたハリーポッ

ターシリーズの本下さ

RDB

SQL 語

RDBMS

10

Page 11: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

データベース言語の標準化のメリット ユーザは一つのデータベース言語を学ぶこと

で各種の DBMS を利用できる 異なる DBMS 巻のアプリケーションプログ

ラムの移植や連携が容易 標準データベース言語を用いたあるツールは

ユーティリティを開発したり利用したりすることが容易になる

異なるユーザ間での DBMS 利用技術のノウハウ共有が促進される

11

Page 12: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5.2基本概念12

Page 13: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

SQL の対象とするデータ構造と RDBのデータ構造との相違点 重複したタプルの存在

リレーショナルデータモデルでは リレーションはタプルの集合として規定 全く同じ属性値の並びからなる重複したタプルは不可

現実のデータ操作において重複した値が自動的に除去されると都合が悪い場合がある 属性について平均値計算をした場合

属性のみを残すような射影演算の結果中に重複した値がジ除去されると正しい平均は計算できない

SQL では必要に応じて重複したタプルを許すことが可能 マルチ集合

重複した要素の存在を許すような集まり SQL は集合ではなくマルチ集合を基礎とした体系

13

Page 14: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

SQL の対象とするデータ構造と RDBのデータ構造との相違点 属性やタプルの順序付け

リレーショナルデータモデルでは リレーションスキーマにおいては属性の並び順序は意味がない

SQL では 属性及び属性値は明示的に順序付けられたものとし

て扱う 問い合わせ結果を

アプリケーションに渡す時点においてタプル同士が並ぶ順序うぃ明示的に指定できる

14

Page 15: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

SQL での用語

SQL の対象とするデータ構造と RDB のデータ構造との相違点から SQL では表,列,行と呼ぶ 表( table )

リレーション 列( column )

属性 行( low )

タプル

15

Page 16: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5. 3 データの定義16

Page 17: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

実表( base table )

実表 SQL でデータの実体を伴う表

他の表 ビュー表( viewed table )

ビューを表現する表 導出表 (derived table)

問い合わせ結果として一般的に出来る表

17

Page 18: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

図 3.3  リレーショナルデータベースの例

学生番号 氏名 専攻 住所

00001 山田一郎 情報工学 東京都 XXX

00002 鈴木明 情報工学 茨城県 XXX

00003 佐藤花子 情報工学 東京都 XXX

科目番号 科目名 単位数

001 データベース 2

002 システムプログラム

3

科目

科目番号 学籍番号 成績

001 00001 90

001 00002 80

002 00001 90

002 00003 70

履修

科目番号 課題番号 課題名

001 01 データモデリング

001 02 データベース設計

001 03 SQL

001 01 C プログラミング

002 02 7 システム k-る

実習課題

学生

18

Page 19: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

実表の定義の例 : 科目

各列の列名とそのデータ型を指定する データ型

文字列、数、ビット列、日時など

CHAR(3) 3 文字の固定長文字列型

NCHAR(12) 12文字の固定長感じ文字列型

INTEGER 整数型

19

CREATE TABLE  科目(科目番号  CHAR ( 3)  NOT NULL、 科目名   NCHAR(12) NOT NULL、 単位数   INTEGER、 PRIMARY KEY  (科目番号)、 CHECK (単位数  BETWEEN 1 AND 12 ))

科目番号 科目名 単位数

001 データベース 2

002 システムプログラム

3

科目

Page 20: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

実表の定義の例 : 科目 CHAR(3)

3 文字の固定長文字列型 NCHAR(12)

12文字の固定長感じ文字列型 INTEGER

整数型 PRIMARY KEY  (科目番号)

科目表の主キーが科目番号であることを示したキー制御の記述

CHECK (単位数  BETWEEN 1 AND 12 )

単位数の値が 1 から 12までの範囲でなければならないとの整合性制御を記述

20

CREATE TABLE  科目(科目番号  CHAR ( 3)  NOT NULL、 科目名   NCHAR(12) NOT NULL、 単位数   INTEGER、 PRIMARY KEY  (科目番号)、 CHECK (単位数  BETWEEN 1 AND12 ))

科目番号 科目名 単位数

001 データベース 2

002 システムプログラム

3

科目

Page 21: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

定義域( domain )

CREAT DOMAIN文で定義された対象を定義域( DOMAIN )と呼ぶ

実表定義の際のデータ型に変わって用いることも可能 その場合は CHECK で記述された整合制約が適

用される

21

CREATE DOMAIN  単位数  INTEGER   CHECK ( VALUE BETWEEN 1 AND 12 )

Page 22: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

実表の定義の例 : 履修

主キーは科目番号と学籍番号のペアとして指定

FOREIGN KEY記述 外部キーの指定 参照整合制約の記述に

相当

22

CREATE TABLE  履修( 学生番号  CHAR ( 3)  NOT NULL、 科目番号  CHAR ( 5 )  NOT NULL、 成績     INTEGER、 PRIMARY KEY  (科目番号、学籍番号)、 FOREIGN KEY  (科目番号)      REFERENCES  科目(科目番号)、  FOREIGN KEY  (学籍番号)      REFERENCES  学生(学籍番号)、 CHECK (成績  BETWEEN  0  AND  100))

科目番号 学籍番号 成績

001 00001 90

001 00002 80

002 00001 90

002 00003 70

履修

Page 23: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5.4.1  問合せの基本形

5. 4 問合せ23

Page 24: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

問合せの基本形

SQL における典型的な問合せ記述の形式

T1,・・・ ,Tn  は表名 CT1,・・・ ,Cnm はそれぞれ T1,・・・ ,Tn

中の表  Ti1., ・・・ ,Tim の例名 Ψは条件

SELECT Ti1.C1,・・・ ,Tim.Cm

FROM    T1,・・・ ,Tn

WHERE ψ

24

Page 25: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q1: 科目番号 005 の科目の履修者の学籍番号と成績の一覧

SELECT 履修 .学籍番号、履修 . 成績FROM 履修WHERE 履修 .科目番号=‘005’

SELECT 学籍番号、成績FROM 履修WHERE 科目番号=‘005’

25

Page 26: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q2: 学籍番号 00100 のの学生が履修した科目番号,成績の一覧

SELECT 科目 .科目番号、科目名、成績FROM 科目WHERE 科目 .科目番号= 履修 .科目番号          AND  学籍番号=‘00100’

SELECT 科目番号、科目名、成績FROM 科目  NATURAL JOIN 履修WHERE 学籍番号=‘00100’

26

Page 27: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q3: 情報工学専攻のいずれかの学生が履修した科目の科目番号と科目名の一覧

SELECT 科目 .科目番号、科目名FROM 科目、履修、学生WHERE 科目 .科目番号= 履修 .科目番号         AND  履修 .学籍番号=学生 .学籍番号         AND  専攻= N’ 情報工学’

SELECT 科目番号、科目名FROM 科目 NATURAL JOIN  履修 NATURAL JOIN 学生WHERE 専攻= N’ 情報工学’ORDER BY  科目番号

27

Page 28: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q4: 科目番号 005 の科目に関して学籍番号 00100の学生よりも成績の良かった学生の学籍番号一覧

SELECT y. 学籍番号FROM 履修  AS x、履修 AS yWHERE x. 科目番号=‘ 005’ AND x .学籍番号=‘00100’                  AND y. 科目番号=‘005’ AND y.成績>x.成績

28

Page 29: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q5: 全科目の科目名と単位数一覧

SELECT 科目名、単位数FROM 科目

SELECT DISTINCT 科目名、単位数FROM 科目

29

Page 30: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q6: 単位数が 3単位以上の科目の科目番号,科目名,単位数の一覧

SELECT *FROM 科目WHERE   単位数 >= 3

30

Page 31: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5.4.2  集合関数

5. 4 問合せ31

Page 32: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q7: 科目番号 005 の科目の平均点

SELECT AVG(成績 )FROM 履修WHERE  科目番号 = ‘005’

32

Page 33: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5.4.3  グループ表

5. 4 問合せ33

Page 34: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q8: 全科目について科目番号と平均点の一覧

SELECT 科目番号、 AVG(成績 )FROM 履修GROUP BY  科目番号

34

Page 35: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q9: 情報工学専攻の学生が履修した科目の科目番号と情報工学専攻の学生に関する平均点の一覧

SELECT 履修 .科目番号、 AVG(成績 )FROM 履修、学生WHERE  履修 .学籍番号=学生.学籍番号        AND 専攻= N’ 情報工学’GROUP BY 履修 .科目番号

35

Page 36: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q10: 履修者が 30人以上の科目の科目番号,履修者数,平均点の一覧

SELECT 科目番号、 COUNT(* ) 、 AVG( 成績 )FROM 履修GROUP BY  科目番号HAVING COUNT(* )>=30

36

Page 37: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5.4.4  集合演算

5. 4 問合せ37

Page 38: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q11: 実習課題があるか,あるいは単位数が5 単位以上の科目の科目番号,科目名,科目の一覧

SELECT 科目 . *FROM 科目、実習課題WHERE   科目 .科目番号=実習課題 .科目番号UNION    SELECT  *FROM    科目WHERE   単位数 >=5

38

Page 39: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q12: 実習課題のない科目の科目番号と科目名の一覧

SELECT 科目番号、科目名FROM 科目EXCEPTUNION    SELECT   科目 .科目番号、科目名FROM    科目、実習課題WHERE   科目 .科目番号= 実習課題 .科目番号

39

Page 40: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5.4.5  副問合せ

5. 4 問合せ40

Page 41: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q3: 情報工学専攻のいずれかの学生が履修した科目の科目番号と科目名の一覧

SELECT 科目番号、科目名FROM 科目 WHERE   科目番号  IN (SELECT 科目番号    FROM 履修、学生    WHERE 履修 .学籍番号= 学生 .学籍番号             AND  専攻= N’ 情報工学’)

Q3SELECT 科目 .科目番号、科目名FROM 科目、履修、学生WHERE 科目 .科目番号= 履修 .科目番号         AND  履修 .学籍番号=学生 .学籍番号         AND  専攻= N’ 情報工学’

41

Page 42: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

Q12: 実習課題のない科目の科目番号と科目名の一覧

Q5SELECT 科目番号、科目名FROM 科目EXCEPTUNION    SELECT   科目 .科目番号、科目名FROM    科目、実習課題WHERE   科目 .科目番号= 実習課題 .科目番号

SELECT 科目番号、科目名FROM 科目 WHERE    NOT EXISTS (SELECT *    FROM 実習問題    WHERE 実習問題 .科目番号=科目 .科目番号)

42

Page 43: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5.4.6  ビュー

5. 4 問合せ43

Page 44: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

実習科目

CREAT VIEW  実習科目(科目番号、科目名、単位数) AS   SELECT 科目 . *   FROM 科目、実習課題   WHERE   科目 .科目番号=実習課題 .科目番号

44

Page 45: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

5. 5  データの更新45

Page 46: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

INSERT:行を追加

U1  科目番号 002 の科目の実習問題 03 として「シェル作成」を追加

科目番号 010 の科目履修者として学籍番号が‘ 00099’以下の学生を全員登録

INSERT INTO  実習問題VALUE (’002’、’ 03’、 N’ シェル作成’ )

INSERT INTO  履修(科目番号、学籍番号) SELECT ‘010’、学籍番号 FORM   学生 WHERE  学籍番号<=‘00099’  

46

Page 47: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

DELETE:行を削除 , UPDATE:列の値を更新

U 3 科目番号 005 の科目の実習課題をすべて削除

科目番号 010 の科目の単位数を 3単位に変更

DELETE FROM  実習問題WHERE 科目番号=‘ 005’

UPDATE 科目SET 単位数=3WHERE   科目番号=‘ 010’

47

Page 48: データベース工学および演習 第 5 章 リレーショナルデータベース言語 SQL

課題

教科書100ページの演習問題 問題5.1 問題5.5 問題5.6

提出方法 A4 の紙に作成し提出

学籍番号,名前右上に記入表紙は不要

次回の講義時に提出11月27日(土)