/
インターネット技術特論 インターネット技術特論

インターネット技術特論 - PowerPoint Presentation

verticalbikers
verticalbikers . @verticalbikers
Follow
342 views
Uploaded On 2020-07-02

インターネット技術特論 - PPT Presentation

GRDBMS と SQL 山口 実靖 httpwwwnskogakuinacjpct13140inet 概要 データベース 簡単単に覚えるだけ 情報系技術者の超重要スキル リレーション ID: 792888

userid sql abe fukuda sql userid fukuda abe rdbms koizumi select join rdbms

Share:

Link:

Embed:

Download Presentation from below link

Download The PPT/PDF document "インターネット技術特論" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

インターネット技術特論

G:RDBMSとSQL山口 実靖

http://www.ns.kogakuin.ac.jp/~ct13140/inet/

Slide2

概要

データベース簡単.単に覚えるだけ.情報系技術者の超重要スキルリレーション抽象的で理解しづらい. 大まかに分かれば良い.SQL講義の

範囲は難しくない.必ず理解すること!RDBMSとSQL-2

Slide3

データベースRDBMS

Slide4

Database

データベースとは,データの集まり.例えば,実験の測定値,社員表など.多くの場合,数値か文字列.RDBMSとSQL-

4

Slide5

DBMS (Database Management System)

データベース管理システム.データベースを管理運用するためのシステム.多くの場合,ソフトウェアである.DBMSには数種類のモデルがある.リレーショナルデータモデル,ネットワークデータモデル階層型データモデル,オブジェクト指向,

XML現在,多くのDBMSがリレーショナルデータモデルのRDBMB (Relational Database Management System)である.本講義ではRDBMSのみ扱う.RDBMSとSQL-5

Slide6

RDBMS

RDBMBRelational Database Management System日本語で「関係データベース(

管理システム)」Relational Data Model(関係データモデル)を採用したDMBS通常,SQLという言語を用いて運用する.現在,ほとんどのDBMSがRDBMSOracle, Microsoft SQL Server, DB2(IBM),PostgreSQL, MySQL, Firebird, SQLiteなどの実装がある.現在,超重要なアプリケーションの一つ.RDBMSとSQL-6

Slide7

単語"Database"の曖昧性

「データとDBMS(DB管理システム)」をまとめて「データベース(DB)」と呼ぶこともある.DBMS(DB

管理システム)を「データベース」と呼ぶこともある.RDBMSの意味で使うこともある.RDBMSとSQL-7

Slide8

データモデル

DBMSでは各種モデルによりデータを整理,管理する.この整理,管理のモデルがデータモデル.一般に,以下の3要素から成り立つデータやデータ間の関連を表現する構造記述データやデータ間に存在する一貫性制約の記述.データの検索,更新などのデータ操作言語

RDBMSとSQL-8

Slide9

リレーショナルデータモデル

数学の集合論に基づく,データモデル.極めて簡潔に説明すると「表型」.全てのデータ,データ間の関連を「リレーションのタプル」で表現する.(後述)タプルは,値の組み合わせ.Codd(

コッド)博士が提案.チューリング賞.日本語では「関係データモデル」RDBMSとSQL-9

Slide10

リレーション

Slide11

リレーショナルデータモデル

会員番号

氏名住所所属

0

福田康夫

群馬県

...

部署

M

1

安倍晋三

山口県

...

部署

M

2

小泉純一郎

神奈川

...

部署

M

3

森喜朗

石川県

...

部署

M

4

小渕恵三

群馬

...

部署

O

データを表形式で管理する.

会員表

RDBMS

SQL-

11

Slide12

リレーショナルデータモデル

会員番号

氏名住所所属

0

福田康夫

群馬県

...

部署

M

1

安倍晋三

山口県

...

部署

M

2

小泉純一郎

神奈川

...

部署

M

3

森喜朗

石川県

...

部署

M

4

小渕恵三

群馬

...

部署

O

表,リレーション,

TABLE

RDBMS

SQL-

12

Slide13

リレーショナルデータモデル

会員番号

氏名住所所属

0

福田康夫

群馬県

...

部署

M

1

安倍晋三

山口県

...

部署

M

2

小泉純一郎

神奈川

...

部署

M

3

森喜朗

石川県

...

部署

M

4

小渕恵三

群馬

...

部署

O

行,ロー,

レコード,

タプル

RDBMS

SQL-

13

Slide14

リレーショナルデータモデル

会員番号

氏名住所所属

0

福田康夫

群馬県

...

部署

M

1

安倍晋三

山口県

...

部署

M

2

小泉純一郎

神奈川

...

部署

M

3

森喜朗

石川県

...

部署

M

4

小渕恵三

群馬

...

部署

O

列,カラム,

フィールド

RDBMS

SQL-

14

Slide15

リレーショナルデータモデル

会員番号

氏名住所所属

0

福田康夫

群馬県

...

部署

M

1

安倍晋三

山口県

...

部署

M

2

小泉純一郎

神奈川

...

部署

M

3

森喜朗

石川県

...

部署

M

4

小渕恵三

群馬

...

部署

O

列名,カラム名,

フィールド名

RDBMS

SQL-

15

Slide16

リレーショナルデータモデル

会員番号

氏名住所所属

0

福田康夫

群馬県

...

部署

M

1

安倍晋三

山口県

...

部署

M

2

小泉純一郎

神奈川

...

部署

M

3

森喜朗

石川県

...

部署

M

4

小渕恵三

群馬

...

部署

O

行の値の変更,行の追加,行の削除などを繰り返して,

DBMS

を運用していく.

通常,列の

追加

/

削除は

行わない.

行の順は意味

を持たない

RDBMS

SQL-

16

Slide17

キー key

Slide18

スーパーキー

表内の行を特定できる列(の組)がスーパーキー.会員番号を定めると,行が一意に定まる. よって,会員番号はスーパーキー.

「会員番号」が「2」である行は,1行しかない.当然,会員番号は重複しないことが前提.「氏名」では, 同姓同名がいると 破綻する.RDBMSとSQL-18会員番号

氏名

住所

所属

0

福田康夫

群馬県

...

部署

M

1

安倍晋三

山口県

...

部署

M

2

小泉純一郎

神奈川

...

部署

M

3

森喜朗

石川県

...

部署

M

4

小渕恵三

群馬

...

部署

O

Slide19

スーパーキー

スーパーキーは,複数の列で構成されていても良い. 「氏名,科目」を定めると行が特定される. よって,「氏名,科目」の組はスーパーキー

最悪でも,「全列の組」は

スーパー

キー

となる.

(

同一の行は存在しては

ならない.

)

RDBMS

SQL-

19

氏名

科目

福田康夫

英語

福田康夫

数学

安倍晋三

英語

安倍晋三

数学

小泉純一郎

英語

得点

A

B

C

D

E

Slide20

候補キー

スーパーキーの中で,どれか1つでも欠けたら行の特定ができなくなるキーが候補キー.「氏名,科目,得点」を決めると行が特定できる → スーパーキー

「氏名,科目,得点」は,「どれか1個欠けると特定できない」か? → NO (得点は削除可能)  ∴候補キー ではない.「氏名,科目」は候補キー.∵「行を特定可能」かつ「1個欠けると特定できない」RDBMSとSQL-20

氏名

科目

福田康夫

英語

福田康夫

数学

安倍晋三

英語

安倍晋三

数学

小泉純一郎

英語

得点

A

B

C

D

E

Slide21

候補キー

候補キーは複数存在する場合もある.会員番号を定めると行が特定される. よって,会員番号は候補キー基礎年金番号を定めると行が特定される. よって,基礎年期番号も候補キー

RDBMSとSQL-21会員番号氏名住所

0

福田康夫

群馬県

...

1

安倍晋三

山口県

...

2

小泉純一郎

神奈川

...

3

森喜朗

石川県

...

4

小渕恵三

群馬

...

基礎年金番号

234

567

890

123

456

Slide22

主キー

候補キーの中から,DBMS管理者が 主観的に選択した主たるキーが「主キー」.理論的価値は低いが,実運用上重要な意味を持つ下線を引くことが多い.

RDBMSとSQL-22会員番号氏名住所

0

福田康夫

群馬県

...

1

安倍晋三

山口県

...

2

小泉純一郎

神奈川

...

3

森喜朗

石川県

...

4

小渕恵三

群馬

...

基礎年金番号

234

567

890

123

456

Slide23

正規形

Slide24

第一正規形

1マスに複数の要素を入れてはならない.1個の要素が複数マスに跨ってはならない.そもそも,RDBMSに格納できない.

注意:この説明は過度に簡潔化されています.

そもそも「マス」などという表現は使ってはならない.

RDBMS

SQL-

24

Slide25

第一正規形

会員番号

氏名趣味0

福田康夫

クラシック音楽鑑賞

2

小泉純一郎

歌舞伎鑑賞,

映画鑑賞

非正規形

会員

番号

氏名

趣味

0

福田康夫

クラシック音楽鑑賞

2

小泉純一郎

歌舞伎鑑賞

2

小泉純一郎

映画鑑賞

第一正規形

会員

番号

氏名

趣味

0

福田康夫

クラシック音楽鑑賞

2

小泉純一郎

歌舞伎鑑賞

2

映画鑑賞

RDBMS

SQL-

25

Slide26

関数従属

ある列群の値が決まれば,別のある列群の値が一意に定まるとき「関数従属(する)」という.

氏名教科点数福田康夫

英語

50

福田康夫

数学

60

安倍晋三

英語

70

安倍晋三

数学

80

{

氏名

,

教科

}

が決まると,

{

点数,合否

}

は決まる.

よって,関数従属である.

{

氏名,教科

}→{

点数,合否

}

{

氏名

}

を決めても,

{

点数

}

は決まらない.

関数従属でない.

{

点数

}

が決まると,

{

合否

}

は決まる.

関数従属である.

合否

RDBMS

SQL-

26

Slide27

完全従属

列群Aに列群Bが関数従属であり, 列群Aの真部分集合(Aの一部)

に 関数従属でないとき,「完全従属」という.会員番号氏名教科

点数

合否

0

福田康夫

英語

50

0

福田康夫

数学

60

1

安倍晋三

英語

70

1

安倍晋三

数学

80

{

会員番号

,

氏名

,

教科

}

→{

点数

,

合否

}

なので関数従属.

ところが,

{

会員番号

,

教科

}

→{

点数

,

合否

}

でもある.

実は,

{

氏名

}

は無くても良い.

よって,

{

点数

,

合否

}

{

会員番号

,

氏名

,

教科

}

完全従属でない.

RDBMS

SQL-

27

Slide28

第二正規形

第一正規形である.候補キーでない列が候補キーに完全従属している.RDBMSとSQL-28

Slide29

第二正規形でない例

userID

nameemail年

text

0

福田

fuku@k.go.jp

2007

9

26

首相になった

1

安倍

abe@k.go.jp

2007

7

29

選挙を行った

1

安倍

abe@k.go.jp

2006

9

26

首相になった

2

小泉

koi@k.go.jp

2005

8

8

解散した

{userID,

,

,

}

が候補キーかつ主キー.

{userID}→{name,email}

で,

name

email

が候補キーに完全従属でない.

"

日記

"

赤枠は主キー

RDBMS

SQL-

29

Slide30

第二正規化の例

"日記"

user

ID

name

email

0

福田

fuku@k.go.jp

1

安倍

abe@k.go.jp

2

小泉

koi@k.go.jp

user

ID

text

0

2007

9

26

首相になった

1

2007

7

29

選挙を行った

1

2006

9

26

首相になった

2

2005

8

8

解散した

"

ユーザ表

"

先ほどの表を分解し,

非候補キーが全ての候補キーに完全従属.

これで,第二正規形

RDBMS

SQL-

30

Slide31

第三正規形

第二正規形である.全ての非キー列は,どの候補キーにも推移的に従属しない.RDBMSとSQL-31

Slide32

第三正規形でない例

第二正規形であるが, 所属→勤務地の関数従属が存在する.つまり,勤務地はuserID→所属 →勤務地 と 推移的に決定される.

userIDname所属

勤務地

0

福田

A

事業部

八王子

1

安倍

B

事業部

新宿

2

小泉

B

事業部

新宿

3

A

事業部

八王子

分解するべき

RDBMS

SQL-

32

Slide33

第三正規形

user

IDname所属勤務地

0

福田

A

事業部

八王子

1

安倍

B

事業部

新宿

2

小泉

B

事業部

新宿

3

A

事業部

八王子

user

ID

name

所属

0

福田

A

事業部

1

安倍

B

事業部

2

小泉

B

事業部

3

A

事業部

所属

勤務地

A

事業部

八王子

B

事業部

新宿

RDBMS

SQL-

33

Slide34

SQL

Slide35

SQL

SQLは,RDBMSを操作するのに使用する言語の一つ.現在,本言語が主流.本稿ではSQLのみ扱う.厳密には,SQLは略語ではない.歴史的背景から

"Structured Query Language"の略とすることもある.構造化問い合わせ言語.言語仕様には,実装依存する箇所が多々ある.C言語にも方言はあるが,SQLほど酷くはない.RDBMSとSQL-35

Slide36

SQLの超基本命令

表を作成する.CREATE TABLE 表名 (...);表に行を挿入する.

INSERT INTO 表名 VALUES (...);表の内容を確認する.SELECT * FROM 表名;表の行の値を変更する.UPDATE 表名 SET 列名=値[,列名=値] WHERE ..;表の行を削除すDELETE FROM 表名

WHERE ...;

RDBMS

SQL-

36

Slide37

SQLの例

以下の様なデータベースを構築することを考える.

userIDnameemail0

Fukuda Yasuo

fukuda@kantei.go.jp

1

Abe Shinzo

abe@kantie.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

3

Mori Yoshiro

mori@kantie.go.jp

"user_tbl"

RDBMS

SQL-

37

Slide38

SQLの例

各行(レコード)の列(フィールド)には「型」がある.

userIDnameemail

ユーザ

ID

を格納.

INTEGER

型とする.

ユーザ名を格納する.

最大

64

文字とする.

VARCHAR(64)

とする.

ユーザの

E-mail

アドレス

を格納する.

最大

64

文字とする.

VARCHAR(64)

とする.

RDBMS

SQL-

38

Slide39

SQL (CREATE TABLE)

CREATE TABLE user_tbl ( userID integer, name varchar(64), email varchar(64));

RDBMSとSQL-39

Slide40

空の表

"user_tbl"が作成される.確認方法は後述.

userIDnameemail

"user_tbl"

RDBMS

SQL-

40

Slide41

SQL (INSERT INTO)

INSERT INTO user_tblVALUES ( 0, 'Fukuda Yasuo', 'fukuda@kantei.go.jp'

);これが,userIDになる.これが,nameになる.

これが,

email

になる.

RDBMS

SQL-

41

Slide42

"user_tbl"に1行追加される.確認方法は後述.

userIDnameemail

0

Fukuda Yasuo

fukuda@kantei.go.jp

"user_tbl"

RDBMS

SQL-

42

Slide43

SQL (INSERT INTO)

INSERT INTO user_tbl VALUES ( 1, 'Abe Shinzo', 'abe@kantie.go.jp'

);INSERT INTO user_tbl VALUES ( 2, 'Koizumi Junichiro', 'koizumi@kantie.go.jp');RDBMSとSQL-43

Slide44

"user_tbl"に2行追加される.確認方法は後述.

"user_tbl"

userID

name

email

0

Fukuda Yasuo

fukuda@kantei.go.jp

1

Abe Shinzo

abe@kantie.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

RDBMS

SQL-

44

Slide45

SQL (SELECT/FROM)

SELECT * FROM user_tbl;

userIDnameemail0

Fukuda Yasuo

fukuda@kantei.go.jp

1

Abe Shinzo

abe@kantie.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

結果

RDBMS

SQL-

45

Slide46

SQL (SELECT/FROM)

name

emailFukuda Yasuofukuda@kantei.go.jp

Abe Shinzo

abe@kantie.go.jp

Koizumi Junichiro

koizumi@kantie.go.jp

結果

SELECT name, email FROM user_tbl;

RDBMS

SQL-

46

Slide47

SQL (SELECT/FROM)

SELECT * FROM user_tbl WHERE userID=

2;結果userIDname

email

2

Koizumi Junichiro

koizumi@kantie.go.jp

SELECT

*

FROM…;

この部分では,

列の選択を行う.

SELECT * FROM …

WHERE userID=2

;

RDBMS

SQL-

47

この部分では,

行の選択を行う.

Slide48

SQL (SELECT/FROM/WHERE)

SELECT * FROM user_tbl WHERE 1<=userID;

結果userIDname

email

1

Abe Shinzo

abe@kantie.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

RDBMS

SQL-

48

Slide49

SQL (UPDATE)

UPDATE user_tbl SET email= 'root@fukuda.org' WHERE userID

=0;SELECT * FROM user_tbl;結果userIDname

email

0

Fukuda Yasuo

root@fukuda.org

1

Abe Shinzo

abe@kantie.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

RDBMS

SQL-

49

Slide50

SQL (DELETE)

DELETE FROM user_tbl WHERE userID=0;SELECT * FROM user_tbl;

結果userIDname

email

1

Abe Shinzo

abe@kantie.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

RDBMS

SQL-

50

Slide51

データ型

整数型 INTEGER型:整数値を格納. SMALLINT型,NUMERIC

型,DECIMAL型浮動小数点型 REAL型:単精度浮動小数点 DOUBLE PRECISION型:倍精度浮動小数点 FLOAT型RDBMSとSQL-51

Slide52

データ型

文字列型 CHARACTER(n):n文字以内の文字列 VARCHAR(

n):n文字以内の文字列n文字より短い文字列を格納したとき,CHARACTER型の場合,不足分は空白で埋められn文字分容量が消費される.VARCHAR型の場合は,埋められない.VARCHAR型の使用の方が一般的と思われる.RDBMSとSQL-52

Slide53

データ型

日付型 DATE型:日付を表す. TIME型:

時刻 TIMESTAMP:日付と時刻RDBMSとSQL-53

Slide54

データ型

データ型はRDBMS実装に依存する部分が大きい.詳細は,実装ごとのマニュアルを読む必要がある.RDBMSとSQL-

54

Slide55

NULL値

RDBMSのマスを空にすることができる(場合がある)空を「NULL」と呼ぶ.主キーやNOT NULL制約のついた列のマスは,

NULLにできない.注意:一般にRDBMSに「マス」という表現はない.RDBMSとSQL-55

Slide56

算術演算子

使用例

意味+-*

/

%

a+b

a-b

a*b

a/b

a%b

a

b

の和

a

b

の差

a

b

の積

a

b

で割った商

a

b

で割った余り

RDBMS

SQL-

56

Slide57

比較演算子

使用例

意味=<<=

>

>=

a=b

a<b

a<=b

a>b

a>=b

a

b

は等しい

a

b

より小さい

a

b

以下

aはbより

大きい

a

b

以上

<>

!=

a!=b

a

b

は等しくない

RDBMS

SQL-

57

Slide58

論理演算子

使用例

意味ANDA and BA

かつ

B

10<=a and a<=20

a

10

以上 かつ

a

20

以下

OR

A or B

A

または

B

a<=10 or 20<=a

a

10

以下 または

a

20

以上

NOT

NOT A

A

でない

NOT (a = 100)

A

100

でない

RDBMS

SQL-

58

Slide59

SELECTの応用

以下の様な表があるとする.

userIDnameemail0

Fukuda Yasuo

fukuda@kantei.go.jp

1

Abe Shinzo

abe@kantie.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

"user_tbl"

RDBMS

SQL-

59

Slide60

 SELECT

SELECT name FROM user_tbl;

nameFukuda YasuoAbe ShinzoKoizumi Junichiro

RDBMS

SQL-

60

Slide61

 SELECT/WHERE

SELECT * FROM user_tblWHERE userID = 2;

userIDnameemail2

Koizumi Junichiro

koizumi@kantie.go.jp

RDBMS

SQL-

61

Slide62

  SELECT/WHERE

SELECT * FROM user_tblWHERE userID < 2;

userIDnameemail0

Fukuda Yasuo

fukuda@kantei.go.jp

1

Abe Shinzo

abe@kantie.go.jp

RDBMS

SQL-

62

Slide63

 SELECT/WHERE

SELECT * FROM user_tblWHERE name = 'Koizumi Junichiro';

userIDnameemail2

Koizumi Junichiro

koizumi@kantie.go.jp

RDBMS

SQL-

63

Slide64

  SELECT/WHERE

SELECT * FROM user_tblWHERE 0<userID AND userID<2;

userIDnameemail1

Abe Shinzo

abe@kantie.go.jp

RDBMS

SQL-

64

Slide65

 SELECT/WHERE

SELECT * FROM user_tblWHERE userID BETWEEN 1 AND 2;

userIDnameemail1

Abe Shinzo

abe@kantie.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

userID

が「

1

以上

2

以下」

RDBMS

SQL-

65

Slide66

  SELECT/WHERE

SELECT * FROM user_tblWHERE userID IN (0,2);

userIDnameemail0

Fukuda Yasuo

fukuda@kantei.go.jp

2

Koizumi Junichiro

koizumi@kantie.go.jp

userID

が「

0

2

RDBMS

SQL-

66

Slide67

  SELECT/WHERE

SELECT * FROM user_tblWHERE userID NOT IN (0,2);

userIDnameemail1

Abe Shinzo

abe@kantie.go.jp

RDBMS

SQL-

67

Slide68

SELECT/ORDER BY

SELECT * FROM user_tbl;

userIDnamescore0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

注意:この順は

保証されていない

"user_tbl"

RDBMS

SQL-

68

userID

name

score

0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

Slide69

SELECT/ORDER BY

SELECT * FROM user_tbl ORDER BY score;

userIDnamescore0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

RDBMS

SQL-

69

userID

name

score

0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

Slide70

SELECT/ORDER BY

SELECT * FROM user_tbl ORDER BY score DESC;

userIDnamescore0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

RDBMS

SQL-

70

userID

name

score

0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

Slide71

SELECT/ORDER BY

SELECT * FROM user_tbl ORDER BY score ASC;

userIDnamescore0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

RDBMS

SQL-

71

userID

name

score

0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

Slide72

SELECT/ORDER BY

SELECT * FROM user_tbl ORDER BY score, age;まず,"score"の順に並び替え,

それが同じ値だったら"age"で並び替える.RDBMSとSQL-72

Slide73

LIKE演算子 と % と

_LIKE演算子 文字列を比較するのに使用する. 下記の,パターンマッチが使用可能.

% (パーセント) 任意の長さ(0文字以上)の,任意の文字にマッチする._ (アンダースコア) 1文字の任意の文字にマッチする.RDBMSとSQL-73

Slide74

% と _ の例

ABC, AAC, AAB があるとき,「A_C」は,ABC と

AAC が該当.ABC は,「_がB」と考えれば該当.AAC は,「_がA」と考えれば該当.RDBMSとSQL-74

Slide75

% と _ の例

ABC, AAC, AAB があるとき,「_A_」は,AAC と

AAB が該当.AAC は,「_と_が,AとC」と考えれば該当.AAB は,「_と_が,AとB」と考えれば該当.RDBMSとSQL-75

Slide76

% と _ の例

ABC, AA, A, BAA があるとき,「A%」は,ABC, AA, A が該当.

ABC は,「%が,"BC"」と考えれば該当.AA は,「%が,"A"」と考えれば該当.A は,「%が,""」と考えれば該当.(0文字でもOK)BAA は,%をどのようにおいても該当しない.RDBMSとSQL-76

Slide77

% と _ の例

ABC, AA, BAA, B があるとき,「%A%」は,ABC, AA, BAA

が該当.ABC は,「%と%が,""と"BC"」と考えれば該当.AA は,「%と%が,"A"と""」と考えれば該当. 「%と%が,""と"A"」と考えても該当.BAA は,「%と%が,"B"と"A"」と考えれば該当.

%

%

が,

"BA"

""

」と考えれば該当.

B

は,

%

をどのようにおいても該当しない.

RDBMS

SQL-

77

Slide78

文字'%'を検索するとき

'%'をそのまま書くと,特殊な意味になってしまう.LIKE '100%'には,「100%

」ではなく「100から始まる任意の文字列」が該当してしまう.LIKE '100\%'とすれば「100%」の意味になる.LIKE '%\%'は,「~%」がマッチする.(%で終わる任意の文字列)RDBMSとSQL-78

Slide79

LIKE演算子

SELECT * FROM user_tbl WHERE name LIKE '_B%';

userIDname0ABC

1

BBC

2

BBCC

3

BC

4

BAC

5

B

"user_tbl"

userID

name

0

ABC

1

BBC

2

BBCC

RDBMS

SQL-

79

Slide80

関数

Slide81

本講義で頻繁に用いる表の設計

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣

演説

民営化

"TODOtbl"

登録ユーザの表

各ユーザが入力した

TODO

データ

3

mori

email

fuku@kan.jp

abe@kan.jp

koi@kan.jp

mori@kan.jp

passwd

yasu

shin

jun

yoshi

3

4

2

3

解散

選挙

RDBMS

SQL-

81

Slide82

SELECT と 関数

UPPER関数は,文字列を大文字に変換.LOWER関数は,文字列を小文字に変換.

nameFukuda YasuoAbe ShinzoKoizumi Junichiro

SELECT UPPER(name), name

FROM user_tbl;

UPPER(name)

FUKUDA YASUO

ABE SHINZO

KOIZUMI JUNICHIRO

name

Fukuda Yasuo

Abe Shinzo

Koizumi Junichiro

SECECT name

FROM user_tbl;

RDBMS

SQL-

82

Slide83

SELECT と 関数

userID

namescore0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

SELECT SUM(score)

FROM user_tbl;

SUM(score)

240

SUM

関数は,合計を返す.

RDBMS

SQL-

83

Slide84

SELECT と 関数

userID

namescore0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

SELECT AVG(score)

FROM user_tbl;

SUM(score)

80

AVG

関数は,平均を返す.

RDBMS

SQL-

84

Slide85

SELECT と 関数

userID

namescore0

Fukuda Yasuo

80

1

Abe Shinzo

70

2

Koizumi Junichiro

90

SELECT COUNT(*)

FROM user_tbl;

COUNT(*)

3

COUNT

関数は,件数を返す.

RDBMS

SQL-

85

Slide86

SELECT と 関数

userID

namescore0

Fukuda Yasuo

1

1

Abe Shinzo

1

2

Koizumi Junichiro

2

SELECT COUNT(ALL score)

FROM user_tbl;

COUNT(ALL score)

3

COUNT

関数は,件数を返す.

列名を指定しても良い.

RDBMS

SQL-

86

Slide87

SELECT と 関数

userID

namescore0

Fukuda Yasuo

1

1

Abe Shinzo

1

2

Koizumi Junichiro

2

SELECT COUNT(DISTINCT score)

FROM user_tbl;

COUNT(DISTINCT score)

2

COUNT

関数は,件数を返す.

DISTINCT

を付けると

重複は

1

件として数える.

RDBMS

SQL-

87

Slide88

SELECT と 関数

userID

namescore0

Fukuda Yasuo

1

1

Abe Shinzo

1

2

Koizumi Junichiro

2

SELECT COUNT(*)

FROM user_tbl WHERE score=1;

COUNT(DISTINCT score)

2

score=1

の件数を数える.

RDBMS

SQL-

88

Slide89

SELECT と 関数

関数MAX()は,最大値を返す.関数MIN()は,最小値を返す.RDBMS

とSQL-89

Slide90

練習

studentID

classscore0A

10

1

A

20

2

A

30

3

B

40

クラス

A

の学生

(3

)

の平均点を出す

SQL

文は?

4

B

50

5

B

60

"score_tbl"

RDBMS

SQL-

90

Slide91

SQLのGROUP BY

Slide92

GROUP BY

指定した列の値が同じなら,それらをまとめて1個のGROUPにすることが可能RDBMSとSQL-

92

Slide93

GROUP BY の例

userID

classname0

M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

userID

class

name

0

M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

SELECT * FROM usertbl;

:usrtbl

RDBMS

SQL-

93

Slide94

GROUP BY の例

userID

classname0

M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

SELECT class FROM usrtbl GROUP BY class;

:usrtbl

SELECT class FROM usrtbl;

class

M

M

M

M

O

RDBMS

SQL-

94

class

M

O

Slide95

GROUP BY の例

userID

classname0

M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

class

M

O

SELECT class, count(class) FROM usrtbl GROUP BY class;

:usrtbl

count

4

1

RDBMS

SQL-

95

Slide96

GROUP BY の例

userID

classname0

M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

SELECT * FROM usrtbl GROUP BY class;

:usrtbl

これは

ERROR!

userID

class

name

??

M

??

??

O

??

ここに表示すべき項目が,

定まらない!

fukuda? abe?

koizumi? mori?

RDBMS

SQL-

96

Slide97

DISTINCT (GROUP BYと類似)

userID

classname0

M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

class

M

O

SELECT class FROM usrtbl GROUP BY class;

:usrtbl

SELECT class FROM usrtbl;

class

M

M

M

M

O

SELECT DISTINCT class FROM usrtbl;

RDBMS

SQL-

97

Slide98

DISTINCTとGROUP BY

DISTINCTは単に重複データを削除するのみGROUP BYはグループ化し,その後集合関数を用いるのが一般的.

RDBMSとSQL-98

Slide99

DISTINCTとGROUP BY

DISTINCT編

userIDclassname0

M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

:usrtbl

SELECT class FROM usrtbl;

class

M

M

M

M

O

SELECT DISTINCT class FROM usrtbl;

重複を削除

RDBMS

SQL-

99

class

M

O

Slide100

DISTINCTとGROUP BY

GROUP BY編

userIDclassname0

M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

:usrtbl

userID

class

name

0

M

fukuda

1

abe

2

koizumi

3

mori

4

O

obuchi

"GROUP BY class"

によるグループ化

RDBMS

SQL-

100

Slide101

DISTINCTとGROUP BY

GROUP BY編

表:usrtblをGROUP BY class

したもの

userID

class

name

0

M

fukuda

1

abe

2

koizumi

3

mori

4

O

obuchi

SELECT class FROM usrtbl GROUP BY class;

class

M

O

RDBMS

SQL-

101

Slide102

DISTINCTとGROUP BY

GROUP BY編

表:usrtblをGROUP BY class

したもの

userID

class

name

0

M

fukuda

1

abe

2

koizumi

3

mori

4

O

obuchi

SELECT class, count(class) FROM usrtbl

GROUP BY class;

class

M

O

count

4

1

RDBMS

SQL-

102

Slide103

GROUP BY

userID

classname0M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

:usrtbl

blood

A

B

A

O

A

SELECT class,blood FROM usrtbl

GROUP BY class, blood;

class

blood

が同じ

class

M

M

M

O

blood

A

B

O

A

←ここには

fukuda

koizumi

がある

←ここには

abe

がある

←ここには

mori

がある

←ここには

obuchi

がある

RDBMS

SQL-

103

Slide104

GROUP BY

userID

classname0M

fukuda

1

M

abe

2

M

koizumi

3

M

mori

4

O

obuchi

:usrtbl

blood

A

B

A

O

A

SELECT class,blood,count(*)

FROM usrtbl GROUP BY class, blood;

class

blood

が同じ

class

M

M

M

O

blood

A

B

O

A

fukuda

koizumi

abe

mori

obuchi

count

2

1

1

1

RDBMS

SQL-

104

Slide105

結合 JOIN

Slide106

結合

2個の表を組み合わせて,別の表を作成する操作を「結合」という交差結合(CROSS JOIN)内部結合(INNER JOIN)左外部結合(LEFT OUTER JOIN)

右外部結合(RIGHT OUTER JOIN)全外部結合(FULL OUTER JOIN)RDBMSとSQL-106

Slide107

交差結合

aID

012bID

"tblA"

"tblB"

0

1

4

tblB.bID

0

1

4

0

1

4

0

1

4

tblA.aID

0

0

0

1

1

1

2

2

2

CROSS JOIN

RDBMS

SQL-

107

Slide108

内部結合

aID

012bID

"tblA"

"tblB"

0

1

4

tblB.bID

1

0

tblA.aID

0

1

INNER JOIN

ON

tblA.aID = tblB.bID

RDBMS

SQL-

108

Slide109

左外部結合

aID

012bID

"tblA"

"tblB"

0

1

4

tblB.bID

1

0

tblA.aID

0

1

LEFT OUTER JOIN

ON

tblA.aID = tblB.bID

NULL

2

RDBMS

SQL-

109

Slide110

右外部結合

aID

012

bID

"tblA"

"tblB"

0

1

4

tblB.bID

1

0

tblA.aID

0

1

RIGHT OUTER JOIN

ON

tblA.aID = tblB.bID

4

NULL

RDBMS

SQL-

110

Slide111

全外部結合

aID

012bID

"tblA"

"tblB"

0

1

4

tblB.bID

1

0

tblA.aID

0

1

FULL

OUTER JOIN

ON

tblA.aID

=

tblB.bID

NULL

4

NULL

RDBMS

SQL-

111

Slide112

交差結合 CROSS JOIN

"a"

id

0

1

2

"b"

name

fukuda

abe

id

0

0

1

name

fukuda

abe

1

2

2

fukuda

abe

fukuda

abe

CROSS JOIN

両表の

1

行ずつを組み合わせて

(

横に並べて

)

新しい表を作成.

全組み合わせ存在.

3

表と,

2

表を交差結合

すると,

3×2=6

なる.

RDBMS

SQL-

112

Slide113

表a

と表bの交差結合を得るには,SELECT * FROM a CROSS JOIN b;SELECT * FROM a, b;交差結合

CROSS JOIN

"a"

id

0

1

2

"b"

name

fukuda

abe

id

0

0

1

name

fukuda

abe

1

2

2

fukuda

abe

fukuda

abe

CROSS JOIN

RDBMS

SQL-

113

id | name

----+--------

0 |

fukuda

0 |

abe

1 |

fukuda

1 |

abe

2 |

fukuda

2 |

abe

Slide114

交差結合 CROSS JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

登録ユーザの表

各ユーザが入力した

TODO

データ

userID

0

0

0

1

1

1

2

2

2

name

fukuda

fukuda

fukuda

abe

abe

abe

koizumi

koizumi

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

0

1

2

0

0

2

組閣する

演説する

解散する

0

1

2

0

0

2

組閣する

演説する

解散する

CROSS JOIN

userID=1

userID=2

横に並べた行

.

あまり意味がない

RDBMS

SQL-

114

Slide115

内部結合 INNER JOIN

交差結合のうち,条件にあうもののみを選択.

表"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

INNER JOIN on

usertbl.userID

= TODOtbl.userID

userID

0

0

2

name

fukuda

fukuda

koizumi

TODOID

0

1

userID

0

0

txt

組閣する

演説する

2

2

解散する

RDBMS

SQL-

115

Slide116

内部結合 INNER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

userID

0

0

0

1

1

1

2

2

2

name

fukuda

fukuda

fukuda

abe

abe

abe

koizumi

koizumi

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

0

1

2

0

0

2

組閣する

演説する

解散する

0

1

2

0

0

2

組閣する

演説する

解散する

INNER JOIN

on

usertbl.userID

=

TODOtbl.useriD

RDBMS

SQL-

116

Slide117

内部結合 INNER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

userID

0

0

2

name

fukuda

fukuda

koizumi

TODOID

0

1

userID

0

0

txt

組閣する

演説する

2

2

解散する

INNER JOIN

on

usertbl.userID

=

TODOtbl.userID

RDBMS

SQL-

117

Slide118

内部結合 INNER JOIN

SELECT * FROM usertbl INNER JOIN TODOtbl on usertbl.userID = TODOtbl.userID;SELECT * FROM usertbl,

TODOtbl WHERE usertbl.userID = TODOtbl.userID;RDBMSとSQL-118

Slide119

内部結合 INNER JOIN

SELECT対象の列を指定するには,表名を明記する.

SELECTTODOtbl.TODOID, TODOtbl.txt, usertbl.nameFROM TODOtbl INNER JOIN usertblON TODOtbl.userID = usertbl.userID;

name

fukuda

fukuda

koizumi

TODOID

0

1

2

txt

組閣する

演説する

解散する

RDBMS

SQL-

119

Slide120

内部結合 INNER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * FROM usertbl INNER JOIN TODOtbl

on usertbl.userid = TODOtbl.userid;

userID | name | TODOID | userID | txt

--------+---------+--------+--------+--------

0 | fukuda | 0 | 0 |

組閣する

0 | fukuda | 1 | 0 |

演説する

2 | koizumi | 2 | 2 |

解散する

RDBMS

SQL-

120

Slide121

外部結合

左外部結合,右外部結合,全外部結合とある.交差結合,内部結合と同様だが, 相手の表に対応するものが無い場合も表示される.対応するものが無い場合は,NULLで表示

RDBMSとSQL-121

Slide122

左外部結合 LEFT OUTER JOIN

左外部結合は,(例え右の表に対応する行が無くても)

左の表の行は必ず表示される.右の表に対応する行が無い場合はNULLを表示SELECT * FROM tblA LEFT OUTER JOIN tblB on ...;左の表右の表RDBMSとSQL-

122

Slide123

左外部結合 LEFT OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * from usertbl LEFT OUTER JOIN TODOtbl

on usertbl.userID = TODOtbl.userid;

0

fukuda

1

abe

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

該当なし

RDBMS

SQL-

123

2

koizumi

2

2

解散する

Slide124

左外部結合 LEFT OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * from usertbl LEFT OUTER JOIN TODOtbl

on usertbl.userID = TODOtbl.userid;

0

fukuda

1

abe

2

koizumi

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

2

2

解散する

0

fukuda

NULL

NULL

NULL

RDBMS

SQL-

124

Slide125

左外部結合 LEFT OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * from TODOtbl LEFT OUTER JOIN usertbl

on TODOtbl.userID = usertbl.userid;

0

fukuda

2

koizumi

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

2

2

解散する

0

fukuda

RDBMS

SQL-

125

Slide126

左外部結合 LEFT OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * FROM TODOtbl LEFT OUTER JOIN usertbl

on TODOtbl.userID = usertbl.userid;

0

fukuda

2

koizumi

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

2

2

解散する

0

fukuda

RDBMS

SQL-

126

Slide127

右外部結合 RIGHT OUTER JOIN

右外部結合は,(例え左の表に対応する行が無くても)

右の表の行は必ず表示される.左の表に対応する行が無い場合はNULLを表示SELECT * FROM tblA RIGHT OUTER JOIN tblB on ...;左の表右の表RDBMSとSQL-

127

Slide128

右外部結合 RIGHT OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * FROM usertbl RIGHT OUTER JOIN TODOtbl

on usertbl.userID = TODOtbl.userid;

0

fukuda

1

abe

2

koizumi

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

2

2

解散する

RDBMS

SQL-

128

Slide129

右外部結合 RIGHT OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * FROM usertbl RIGHT OUTER JOIN TODOtbl

on usertbl.userID = TODOtbl.userid;

0

fukuda

1

abe

2

koizumi

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

2

2

解散する

RDBMS

SQL-

129

Slide130

右外部結合 RIGHT OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * FROM TODOtbl RIGHT OUTER JOIN usertbl

on usertbl.userID = TODOtbl.userid;

0

fukuda

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

1

abe

該当無し

RDBMS

SQL-

130

2

koizumi

2

2

解散する

Slide131

右外部結合 RIGHT OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * FROM TODOtbl RIGHT OUTER JOIN usertbl

on usertbl.userID = TODOtbl.userid;

0

fukuda

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

1

abe

0

fukuda

NULL

NULL

NULL

2

koizumi

2

2

解散する

RDBMS

SQL-

131

Slide132

全外部結合 FULL OUTER JOIN

全外部結合は,左外部結合と右外部結合の両方の要素が表示される.左の表に対応する行が無い場合は,左の表の列にNULLを表示右の表に対応する行が無い場合は,右の表の列にNULL

を表示RDBMSとSQL-132

Slide133

全外部結合 FULL OUTER JOIN

"usertbl"

userID

0

1

2

name

fukuda

abe

koizumi

TODOID

0

1

2

userID

0

0

2

txt

組閣する

演説する

解散する

"TODOtbl"

SELECT * FROM usertbl FULL OUTER JOIN TODOtbl

on usertbl.userID = TODOtbl.userid;

3

4

公演する

RDBMS

SQL-

133

0

fukuda

1

abe

2

koizumi

userID

name

0

1

0

0

組閣する

演説する

TODOID

userID

txt

2

2

解散する

0

fukuda

NULL

NULL

NULL

3

4

公演する

NULL

NULL

Slide134

関係代数

Slide135

和両立

2個の表があり, 「両表の次数(列数)が等しい」かつ 「各列の意味が等しい」とき 「和両立」という.

名前福田安倍

小泉

連絡先

123-456

789-012

345-678

ユーザ名

小泉

電話番号

345-678

901-234

両表は

・列数が等しい

(

ともに

3

)

・各列の意味が等しい

ので,「和両立」である.

"

連絡表

"

"

ユーザ表

"

RDBMS

SQL-

135

Slide136

和集合演算

和両立な表Rと表Sがあり,「和集合演算」とは以下の演算.それぞれの表の全行をあわせた表を作成する演算が「和集合演算」. ただし,重複する行は

1行にまとめる.集合論(RDBMS),では「同一の行が2回以上登場」することは許されない.実際は,RDBMSに全く同じ行を2個以上作成してもエラーにならないことが多い.「R∪S」と記述.論理和に近い感覚.RDBMSとSQL-136

Slide137

和集合演算

名前

福田安倍小泉連絡先

123-456

789-012

345-678

ユーザ名

小泉

電話番号

345-678

901-234

"

連絡表

"

"

ユーザ表

"

名前

福田

安倍

小泉

連絡先

123-456

789-012

345-678

901-234

和集合演算

「小泉

,345-678

」が

2

登場することはない

RDBMS

SQL-

137

Slide138

差集合演算

和両立な表Rと表Sがあり,「差集合演算」とは以下の演算.表Rから,「表Sに登場する行」を削除した表を作成するのが差集合演算.

「Sに登場するが,Rに登場しない行」は(削除対象が存在せず)削除されない.「R-S」と記述RDBMSとSQL-138

Slide139

差集合演算

名前

福田安倍小泉連絡先

123-456

789-012

345-678

ユーザ名

小泉

電話番号

345-678

901-234

"

連絡表

"

"

ユーザ表

"

名前

福田

安倍

小泉

連絡先

123-456

789-012

345-678

差集合演算

"

連絡表

"

からこの行が削除された

901-234

この行は

"

連絡表

"

に無いので,

特に何も起きない.

RDBMS

SQL-

139

Slide140

共通集合演算

和両立な表Rと表Sがあり,「共通集合演算」とは以下の演算.表Rと表Sの両方に登場する行で構成される表を作成するのが,共通集合演算.

「R∩S」と記述.論理積に近い感覚.RDBMSとSQL-140

Slide141

共通集合演算

名前

福田安倍小泉連絡先

123-456

789-012

345-678

ユーザ名

小泉

電話番号

345-678

901-234

"

連絡表

"

"

ユーザ表

"

名前

小泉

連絡先

345-678

共通集合演算

RDBMS

SQL-

141

Slide142

直積演算

前述の交差結合をおこなうこと.演算対象の表Rと表Sは和両立である必要はない.「R×S」と記述.

RDBMSとSQL-142

Slide143

直積演算

名前

福田安倍小泉連絡先

123-456

789-012

345-678

商品名

牛乳

ジュース

価格

100

120

"

連絡表

"

"

商品表

"

直積集合演算

名前

福田

安倍

小泉

連絡先

123-456

789-012

345-678

福田

安倍

小泉

123-456

789-012

345-678

商品名

牛乳

ジュース

価格

100

120

牛乳

ジュース

100

120

牛乳

ジュース

100

120

RDBMS

SQL-

143

Slide144

射影演算

表から特定の列を抜き出す演算SELECT ?? FROM ...;

ここで行っている.RDBMSとSQL-144

Slide145

射影演算

名前

福田安倍小泉連絡先

123-456

789-012

345-678

"

連絡表

"

射影演算

名前

福田

安倍

小泉

RDBMS

SQL-

145

Slide146

選択演算

表から特定の行を抜き出す演算SELECT * FROM WHERE ??;

ここで行っている.RDBMSとSQL-146

Slide147

射影演算

名前

福田安倍小泉連絡先

123-456

789-012

345-678

"

連絡表

"

選択演算

名前

安倍

小泉

連絡先

789-012

345-678

RDBMS

SQL-

147

Slide148

結合演算

「結合演算」とは, 表Rと表SがありR×S(直積)の中から

それぞれの属性値を用いて特定の行を選択したもの.演算対象の表Rと表Sは和両立である必要はない.前述のSQLの結合演算.RDBMSとSQL-148

Slide149

商演算

表Rと表Sの商演算は,「R÷S」と記述. Rの列数>Sの列数であることが必要.

説明は,次スライドの例を用いて行う.代数的定義はR÷S={ t | t∈R ∧ (∀u∈S)((t , u)∈R) }RDBMSとSQL-149

Slide150

商演算

ユーザ

福田安倍小泉趣味

A

B

A

趣味

A

B

"

ユーザ趣味表

"

"

趣味表

"

名前

福田

小泉

商演算

福田

B

安倍

C

小泉

B

小泉

C

"

ユーザ趣味表

"

から,

「趣味

A

」と「趣味

B

」を両方持つ

ユーザを捜してくること.

RDBMS

SQL-

150

Related Contents


Next Show more