Unified Modeling Language引言 SQL是关系数据库的标准语言...

129
3章 关系数据库语言SQL

Transcript of Unified Modeling Language引言 SQL是关系数据库的标准语言...

Page 1: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

第3章 关系数据库语言SQL

Page 2: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

内容提纲

1)SQL简介

SQL数据库的体系结构

SQL的组成

2)SQL的数据定义

SQL模式、基本表和索引的创建和撤销

3)SQL的数据查询

SELECT语句的句法

SELECT语句的三种形式及各种限定

基本表的连接操作

2

Page 3: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

内容提纲

4)SQL的数据更新

插入、删除和修改语句

5)视图

创建和撤消

视图的更新限制

6)嵌入式SQL(自学)

7)存储过程与SQL/PLM(自学)

3

Page 4: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

引言

SQL是关系数据库的标准语言

对关系模型的发展和商用DBMS的研制起着重要的作用

SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL语言的9个核心词汇

Create, Alter, Drop, Select, Insert, Update, Delete

Grant, Revoke

本章详细介绍SQL的核心部分内容

数据定义

数据查询

数据更新

4

Page 5: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL简介

SQL发展史

1970年

美国IBM研究中心的E.F.Codd连续发表多篇论文,提出关系模型

1972年

IBM公司开始研制实验型关系数据库管理系统SYSTEM R,配制的查询语言称为SQUARE语言

1974年

把SQUARE修改为SEQUEL语言

1978年,

SEQUEL简称为SQL,即“结构式查询语言”

5

Page 6: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL简介

SQL发展史

SQL86

1986年10月,ANSI SQL标准

1987年6月,ISO SQL标准

SQL2

1992年8月,ISO SQL标准

SQL3

1999年,ISO SQL标准

在未来很长一段时间,SQL仍将是关系数据库领域的主流语言

在软件工程、人工智能领域,SQL已显示出相当大的潜力

6

Page 7: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL简介

SQL数据库的体系结构

用户1 用户2 用户3 用户4

视图1 视图2

基本表1 基本表2 基本表3 基本表4

存储文件1 存储文件2 存储文件3 存储文件4

SQL用户

View

Base table

Stored file

7

Page 8: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL简介

SQL数据库的体系结构

1)一个SQL模式(Schema)是表和约束的集合

2)一个表由行集构成,一行是列的序列

3)表类型:基本表、视图和导出表

4)基本表与存储文件是M:N联系

存储文件与外部存储器的物理文件是一一对应的

5)SQL语句执行对基本表和视图查询等操作

在用户看来,两者是一样的,都是表

6)SQL用户可以是应用程序,也可以是终端用户

8

Page 9: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL简介

SQL组成

1)数据定义语言,即SQL DDL

用于定义SQL模式、基本表、视图、索引等结构

2)数据操纵语言,即SQL DML

数据查询

数据更新:包括插入、删除和修改三种操作

3)嵌入式SQL语言规则

SQL语句嵌入在宿主语言程序中的规则

4)数据控制语言,即SQL DCL

授权、完整性规则的描述、事务控制等

9

Page 10: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL简介

SQL特点

1)灵活和强大的查询功能

SELECT语句能完成相当复杂的查询操作

2)SQL不是一个应用开发语言

只提供对数据库的操作功能,不能完成屏幕控制、菜单管理、报表生成等功能

3)SQL是国际标准语言

有利于各种数据库之间交换数据,有利于程序的移植,有利于实现高度的数据独立性,有利于实现标准化

4)SQL的词汇不多

完成核心功能只用了9个英语动词,它的语法结构接近英语,因此容易学习和使用

10

Page 11: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

SQL模式的创建和撤销

模式(Schema)一词,来自于“ISO SQL标准”协议

Schema在SQL数据库中相当于一个容器

数据库所有的对象如表、视图、索引、用户、存储过程、触发器等都位于容器内

创建SQL模式,就是定义一个存储空间

在商业DBMS中,大多都使用Database代替Schema

11

Page 12: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

SQL模式的创建和撤销

创建

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>

撤销

DROP SCHEMA <模式名> [CASCADE│RESTRICT]

方式

CASCADE(级联式)

RESTRICT(约束式)

商业DBMS中

CREATE Database … …

DROP Database … …

12

Page 13: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

常用数据类型

1)数值型:Integer,Smallint,Numeric(p, d) / DEC(p,d)

2)字符串型:Char(n),Varchar(n)

3)位串型:Bit(n),Bit Varying(n)

4)时间型:DATE,TIME, DATETIME

在很多DBMS中支持自定义数据类型,如在Oracle中

CREATE DOMAIN <域名>

[AS] <数据类型> [列级完整性约束] ;

DROP DOMAIN <标识符> ;

13

Page 14: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

常用数据类型

示例:在Oracle中定义数据类型与应用

定义

Create domain COLOR Char(6) Default ’???’

Constraint VALID_COLORS

Check ( value in

(‘Red’, ’Yellow’, ’Green’, ’???’ ) ) ;

使用

Create Table PART (

… …

partcolor COLOR ,

… … ) ;14

Page 15: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

句法

CREATE TABLE <表名> (

<列名> <类型> [列级完整性约束条件]

{ ,<列名> <类型> [列级完整性约束条件] }

[ ,<表级完整性约束条件> ] ) ;

如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

列级完整性约束条件

NOT NULL / [NULL] :列值是否可以为空

UNIQUE :列值唯一,不得重复

DEFAULT :列值空缺时,由系统填写默认值15

Page 16: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

表级完整性约束条件

主键(PRIMARY KEY)子句

格式:PRIMARY KEY ( <列名表> )

作用:提供实体完整性约束的说明

说明

系统一般自动在主键上建索引

主键为单属性时,可直接在属性后的列级完整性约束条件中,使用PRIMARY KEY定义主键

16

Page 17: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

表级完整性约束条件

外键(FOREIGN KEY)子句

格式:Foreign key [外键名] ( <列名表1> )

references <主表名> [ (列名表2) ]

[ on delete < restrict|cascade|set null > ]

作用:提供参照完整性约束的说明

17

Page 18: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

表级完整性约束条件

外键(FOREIGN KEY)子句

on delete < restrict|cascade|set null > 子句的说明

RESTRICT :主表的主键值行不得删除

CASCADE :主表主键值行删除,从表的相关行随之删除

SET NULL :主表主键值行删除,从表的相关行的列值设为NULL,前提是该列的值可以为NULL

18

Page 19: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

表级完整性约束条件

检查(CHECK)子句

格式:CHECK (约束表达式)

作用:对某元组某属性取值的约束说明

说明

表创建后是一个空表,需要使用DML(insert,update,delete)语句装入或维护数据行

19

Page 20: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

示例 S(SNO,SNAME,AGE,SEX,NativePlace)

字段含义:学号,姓名,年龄,性别,籍贯

T(TNO,TNAME,TITLE,SEX)

字段含义:教师号,教师姓名,职称,性别

Create Table S (

SNO CHAR(3) ,

SNAME CHAR(8) NOT NULL,

AGE Integer NULL,

SEX CHAR(1) DEFAULT ‘M’,

NativePlace VARCHAR(20) ,

Primary Key (SNO) ,

Check (SEX IN (‘M’, ‘F’) ) ) ;

Create Table T (

TNO CHAR(3) Primary Key ,

TNAME CHAR(8) UNIQUE ,

TITLE CHAR(6) NOT NULL,

SEX CHAR(1) DEFAULT ‘M’ ,

Check (TITLE IN ( ‘教授’, ‘副教授’,

‘讲师’, ‘助教’ ) ) ) ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

20

Page 21: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

示例 C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

字段含义:课程号,课程名,学分,学时数,先修课号,授课教师号

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

Create Table C (

CNO CHAR(3) Primary Key ,

CNAME CHAR(8) , Credit Integer ,

CreditHours Integer ,

CPNO CHAR(3) NULL ,

TNO CHAR(3) NOT NULL ,

Foreign Key (CPNO) References C(CNO) ON DELETE SET NULL ,

Foreign Key (TNO) References T ON DELETE SET NULL ) ;

?

?

21

Page 22: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

示例 SC(SNO,CNO,Grade)

字段含义:学号,课程号,成绩

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

Create Table SC (

SNO CHAR(3) , CNO CHAR(3) ,

GRADE DEC(5, 2) ,

Primary Key (SNO, CNO) ,

Foreign Key (SNO) References S(SNO) ON DELETE restrict ,

Foreign Key (CNO) References C ON DELETE cascade ,

Check ( GRADE Between 0 And 100) ) ;

?

?

22

Page 23: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的创建

问关于表T、S、C、SC的创建顺序,下列选项正确的是?

A) C → T → SC → S

B) T → S → C → SC

C) S → T → C → SC

D) S → T → SC → C

E) T → C → S → SC

F) SC → C → S → T

G) SC → C → T → S

?

23

Page 24: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的修改

句法

ALTER TABLE <表名> <修改动作… …>

增加属性

Alter table <表名> add <属性名> <类型> ;

删除属性

Alter table <表名> drop <属性名> [cascade|restrict]

CASCADE:引用该列的视图和约束随之删除

RESTRICT:只在没有被引用时才可删除

不是所有的DBMS都支持

24

Page 25: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的修改

句法

ALTER TABLE <表名> <修改动作… …>

修改属性的类型

Alter table <表名> modify <列名> <类型>

modify → alter column

其他修改,如

补充定义主键,撤销主键定义

补充定义外键,撤销外键定义

定义和撤销别名

25

Page 26: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

修改基本表示例:

[例1]向S表增加“入学时间”列,其数据类型为日期型。

ALTER TABLE S ADD S_entrance DATE;

不论基本表中原来是否已有数据,新增加的列一律为空值。

[例2]将年龄的数据类型由整数(假设原来的数据类型是整数)改为字符型。

ALTER TABLE S ALTER COLUMN Sage char(4);

[例3]增加课程名称必须取唯一值的约束条件。

ALTER TABLE C ADD UNIQUE(Cname);

Page 27: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据定义

基本表的创建、修改和撤销

表的撤销

句法

DROP TABLE <表名> [cascade|restrict]

说明

CASCADE:删除该基本表时,所有引用该基本表的视图和约束一起自动被删除

RESTRICT:没有视图和约束引用该基本表时,才能撤销

27

Page 28: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

谁可以建立索引 DBA 或 表的属主(即建立表的人)

DBMS一般会自动建立以下列上的索引

PRIMARY KEY

UNIQUE

谁 维护索引DBMS自动完成

使用索引DBMS自动选择是否使用索引以及使用哪些索引

SQL的数据定义 索引概念

是物理存取路径,不属于逻辑数据模式

RDBMS通常在主键上自动建立索引

查询、更新时自动起作用(适当建立索引会提高查询速度)

Page 29: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

创建索引

CREATE [UNIQUE] INDEX <索引名>

ON 基表名 ( <列名> [ASC |DESC]

[ { , <列名> [ASC |DESC] } ] ) ;

撤销索引DROP INDEX <索引名列表> ;

UNIQUE索引,每个索引键值对应唯一的数据记录

Page 30: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

建立索引

[例1]为学生-课程数据库中的Student,Course,SC三个表建 立索引。

CREATE UNIQUE INDEX Stusno ON Student(Sno);

CREATE UNIQUE INDEX Coucno ON Course(Cno);

CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

Student表按学号升序建唯一索引

Course表按课程号升序建唯一索引

SC表按学号升序和课程号降序建唯一索引

Page 31: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

删除索引

DROP INDEX <索引名>;

删除索引时,系统会从数据字典中删去有关该索引的

描述。

[例] 删除Student表的Stusname索引

DROP INDEX Stusname;

Page 32: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

句型

SELECT <目标表的列名或列表达式序列>

FROM < 表名、视图名或导出表序列>

WHERE <行条件表达式>

只有SELECT和FROM子句是每个SQL查询语句所必需的

语义

示例

查询选修了DB课程的学生的姓名

SELECT A1, … , An

FROM R1, … , Rn

WHERE F ;

ΠA1, … , An(σF(R1× … ×Rn) )

32

Page 33: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

示例

ΠSNAME(σCNAME=‘DB‘ AND S.SNO=SC.SNO AND SC.CNO=C.CNO(SSCC))

Select Sname From S, SC, C

Where Cname=‘DB’

And S.Sno=SC.Sno

And SC.Cno=C.Cno

S.SNO SNAME … C.CNO CNAME … SC.SNO SC.CNO GRADE

… … … … … … … … …

… … … … … … … … …

S C SC

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

S

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

C

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

SC

1000行

1000行

10000行

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

33

Page 34: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

示例

ΠSNAME(σCNAME=‘DB‘(S⋈SC⋈C))

DBMS的优化

ΠSNAME(ΠSNO,SNAME(S)⋈ΠSNO(ΠCNO(σCNAME=‘DB‘(C))⋈ΠSNO,CNO(SC)))

Select Sname From S

Where Sno in ( Select Sno From SC

Where Cno in ( Select Cno From C

Where

Cname=‘DB’ )) ;

ΠCNO(σCNAME=‘DB‘ (C)) ΠSNO,CNO(SC)

ΠSNO,SNAME (S) ΠSNO( )

ΠSNAME ( )

1000→1 10000

<= 10001000<= 1000

<= 1000

<= 1000

34

Page 35: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

常见的3种SELECT语句写法

示例:查询选修‘C2’课程的学生学号和姓名

1)连接查询

Select S.Sno, Sname

From S, SC

Where S.Sno=SC.Sno and Cno=‘C2’

语句的执行步骤

1)笛卡尔积

2)等值连接

2)选择和投影

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 NULL

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 NULL

S4 C4 75

35

Page 36: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

常见的3种SELECT语句写法

示例:查询选修‘C2’课程的学生学号和姓名

2)IN嵌套查询

Select Sno, Sname From S Where Sno in

( Select Sno From SC Where Cno=‘C2’ ) ;

Select Sno, Sname From S Where ‘C2’ in

( Select Cno From SC Where Sno=S.Sno ) ;

区别

1)由里到外,内层查询(执行1次)结果供给外层使用

2)依赖于外层值,内层(执行n次)结果供给外层使用

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 NULL

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 NULL

S4 C4 75

?

36

Page 37: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

嵌套查询

不相关子查询:

子查询的查询条件不依赖于父查询

由里向外 逐层处理。即每个子查询在上一级查询处理之前求解

,子查询的结果用于建立其父查询的查找条件。

Page 38: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

嵌套查询

相关子查询:子查询的查询条件依赖于父查询

首先取外层查询中表的第一个元组,根据它与内层查询相关的

属性值处理内层查询,若WHERE子句返回值为真,则取此元

组放入结果表

然后再取外层表的下一个元组

重复这一过程,直至外层表全部检查完为止

Page 39: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

常见的3种SELECT语句写法

示例:查询选修‘C2’课程的学生学号和姓名

3)EXISTS嵌套查询

Select Sno, Sname From S

Where EXISTS ( Select * From SC

Where Sno=S.Sno and Cno=‘C2’ ) ;

说明

EXISTS表示“”,判定内层查询结果是否为非空,

即至少存在一个元组(满足外查询的条件)

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 NULL

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 NULL

S4 C4 75

39

Page 40: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

EXISTS谓词的子查询

EXISTS谓词

存在量词

带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。 若内层查询结果非空,则外层的WHERE子句返回真值

若内层查询结果为空,则外层的WHERE子句返回假值

由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义

NOT EXISTS谓词 若内层查询结果非空,则外层的WHERE子句返回假值

若内层查询结果为空,则外层的WHERE子句返回真值

Page 41: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

1)检索学习课程号为C2课程的学生学号与成绩

ΠSNO,Grade(σCNO = 'C2'(SC))

Select Sno, Grade

From SC

Where Cno=‘C2’ ;

2)检索学习课程号为C2的学生学号与姓名

ΠSNO,SNAME(σCNO = 'C2'(S ⋈ SC))

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

41

Page 42: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

3)检索至少选修LIU所授课程一门课程的学生学号与姓名

ΠSNO,SNAME(σTNAME = 'LIU'(S ⋈ SC ⋈ C ⋈ T))

Select S.Sno, Sname From S, SC, C, T

Where Tname=‘LIU’ and S.Sno= SC.Sno

and SC.Cno=C.Cno and C.TNO=T.Tno ;

Select Sno, Sname From S Where Sno in (

Select Sno From SC Where Cno in (

Select Cno From C Where Tno in (

Select Tno From T Where

Tname=‘LIU’ ) ) ) ;

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

42

Page 43: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

4)检索选修课程号为C2或C4的学生学号

ΠSNO(σCNO = 'C2‘ ∨ CNO = 'C4'(SC))

Select Sno From SC

Where Cno = ‘C2’ or Cno = ‘C4’ ;

Select Sno From SC

Where Cno in (‘C2’, ‘C4’) ;

Select Sno From SC

Where Cno =SOME(‘C2’, ‘C4’) ;

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

43

Page 44: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

5)检索至少选修课程号为C2和C4的学生学号

Π1(σ1 = 4 ∧ 2 = 'C2‘ ∧ 5 = 'C4'(SC×SC)) Select X.Sno

From SC as X, SC as Y

Where X.Sno=Y.Sno

and X.Cno=‘C2’

and Y.Cno=‘C4’ ;

SELECT Sno

FROM SC

WHERE Cno=' C2 ' AND Sno IN

(SELECT Sno FROM SC WHERE Cno=' C4 ');

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

FROM子句中,可以用 as为表和视图取一别名,这种别名只在本句中有效,as可不写

44

Page 45: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

学号 课程号 成绩

984101 C4 85

984101 C2 90

984102 C2 85

984103…

C4…

90…

学号 课程号 成绩

984101 C4 85

984101 C4 85

984101 C4 85

984101…

C4…

85…

学号 课程号 成绩

984101 C4 85

984101 C2 90

984102 C2 85

984103 C4 90

学号 课程号 成绩

984101 C4 85

984101 C2 90

984102 C2 85

984103 C4 90

SC SC

SC×SC

思考:至少选了2门课的学生学号?至少有两个人选的课程号?

45

Page 46: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

6)检索不学C2课的学生姓名与年龄

ΠSNAME,AGE(S)- ΠSNAME,AGE(σCNO = 'C2‘(S ⋈ SC))

不能用连接查询写

Select Sname, Age From S

Where Sno not in (

Select Sno From SC Where Cno=‘C2’ ) ;

Select Sname, Age From S Where not Exists (

Select * From SC

Where Sno = S.Sno and Cno=‘C2’ ) ;

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

46

Page 47: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

7)检索学习全部课程的学生姓名

ΠSNAME(S ⋈(ΠSNO,CNO(SC)÷ ΠCNO(C)))

Select Sname From S

Where not Exists (

Select * From C

Where not Exists (

Select * From SC

Where Sno=S.Sno and Cno=C.Cno) );

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

47

Page 48: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

7)检索学习全部课程的学生姓名

理解

逐行扫描S表中的每条记录,对每一个Sno,都顺序扫描C表,读取全部的Cno,形成(Sno,Cno)

对于每一个Sno的(Sno,Cno) 全集,都在SC表中查找有没有与之对应的行

若一个Sno的(Sno,Cno) 全集,都在SC表中找到对应关系,则这个Sno的学生就选修了全部的课程

S1,C2

S1,Cn

S C SC S1 C1

.

.

.

Cn

S1,C1

… … …

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

48

Page 49: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

7)检索学习全部课程的学生姓名

理解

在SQL中没有全称量词,涉及到“全部”的问题只能通过“( x)P ≡ ┐( x(┐P))”的转化来解决,即:

查询“没有一门课程是他没选修的”的学生姓名

SQL规定:子查询的where句可以调用上面任意层次的主查询中关系的属性

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

49

Page 50: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

8)检索所学课程包含学生S3所学课程的学生学号

ΠSNO,CNO(SC)÷ ΠCNO(σSNO = 'S3‘(SC))

Select Distinct Sno From SC as X

Where not Exists (

Select * From SC as Y

Where Y.Sno=‘S3’ and not Exists (

Select * From SC as Z

Where Sno=X.Sno and Cno=Y.Cno) );

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

52

Page 51: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的基本结构

基本句型的综合应用

8)检索所学课程包含学生S3所学课程的学生学号

理解

“包含学生S3所学课程”是“全部”的一个限定条件

思考:查询选修了‘LIU’老师所授全部课程的学生学号?

S1,C2

S1,Cn

SC As X

S1 C1←S3 . . .

Cn←S3

S1,C1

… … …

SC As Y

SC As Z

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

53

Page 52: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

句型

执行过程

① 读取FROM子句中的数据源,执行笛卡尔积(×) ② 选择(σ)满足WHERE子句值的元组 ③ 按GROUP BY子句指定的列值,将元组进行分组 ④ 在③分出的所有组中,选取满足HAVING子句值的组 ⑤ 按SELECT子句的指定项,求值投影(Π)输出 ⑥ 按ORDER BY子句对⑤式的输出进行排序

SELECT <目标表的列名或列表达式序列>

FROM < 表名、视图名或导出表序列>

[WHERE <行条件表达式>]

[GROUP BY <列名序列>

[HAVING <组条件表达式>] ]

[ORDER BY <列名[ASC│DESC]>, … …]

54

Page 53: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

查询中的5个聚合函数

函数 释义

COUNT ( * ) :统计元组的个数 COUNT

COUNT ( <列名>) :对指定列,统计列值个数

SUM SUM ( <列名>) :对数值型列,求和

AVG AVG ( <列名>) :对数值型列,求平均值

MAX MAX ( <列名>) :对指定列,求最大值

MIN MIN ( <列名>) :对指定列,求最小值

55

Page 54: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

应用示例

统计选修课程的人次数

Select COUNT(Sno) as 人次数

From SC ;

统计选修课程的人数

Select COUNT(Distinct Sno) as 人数

From SC ;

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

56

Page 55: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

应用示例

统计男学生的总人数和平均年龄

Select COUNT(*) as 总人数,

AVG(Age) as 平均年龄From S

Where Sex = 'M' ;

按性别统计学生的总人数和平均年龄

Select Sex, COUNT(*) as 总人数,

AVG(Age) as 平均年龄From S

Group By Sex ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

57

Page 56: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

应用示例

统计每门课程的学生选修人数,要求显示课程号、课程名和学生人数

Select C.Cno, Cname, COUNT(Sno) as 学生人数From C, SC

Where C.Cno = SC.Cno

Group By C.Cno, Cname ;

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

58

Page 57: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

应用示例

按教师号统计每位教师每门课程的学生选修人数,要求:

1)仅显示选修人数在3人(>=3)以上的信息

2)显示TNO、CNO和选修人数

3)显示时,查询结果按选修人数降序排列,人数相同按TNO升序、 CNO降序排列

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

59

Page 58: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

应用示例

Select Tno, C.Cno, COUNT(Sno) as 选修人数From C, SC

Where C.Cno = SC.Cno

Group By Tno, C.Cno

Having COUNT(*)>=3

Order By 3 DESC, Tno, C.Cno DESC

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

60

Page 59: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

[GROUP BY <列名序列>[HAVING <组条件表达式>]]

作用

1)数据按GROUP BY子句列名序列中的列值进行分组 2)组内数据按SELECT子句中的聚合函数进行计算 3)提取满足HAVING子句的条件表达式值的分组

注意

HAVING子句支持聚合函数

WHERE子句不支持聚合函数

SELECT子句只能取聚合函数或GROUP BY子句指的列

Select {列名表 1} , 聚合函数

… …

Group By {列名表 2}

… … ;

{列名表 1} {列名表 2}

61

Page 60: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

GROUP BY子句

GROUP BY子句分组:

细化聚合函数的作用对象

未对查询结果分组,聚合函数将作用于整个查询结果

对查询结果分组后,聚合函数将分别作用于每个组

作用对象是查询的中间结果表

按指定的一列或多列值分组,值相等的为一组

Page 61: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

GROUP BY子句(续)

HAVING短语与WHERE子句的区别:

作用对象不同

WHERE子句作用于基表或视图,从中选择满足条

件的元组

HAVING短语作用于组,从中选择满足条件的组。

Page 62: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

[ORDER BY <列名︱列序号>[ASC︱DESC]

[{, <列名︱列序号>[ASC︱DESC]}]

对查询结果按子句中指定列的值排序,如果ORDER BY后有多个列名

先按第一列名值排序

再对于第一列值相同的行,按第二列名值排序

依次类推… …

列序号是在SELECT子句中出现的序号(选的列是聚集函数或表达式时)

ASC表示升序,DESC表示降序,缺省时表示升序

64

Page 63: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SELECT语句的完整结构

应用示例

问:在使用聚合函数进行数据统计时,为什么有的语句使用了Group By子句,有的没有?

什么情况下,应该有?可以没有?

65

Page 64: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

查询中的限制和规定

Select子句的规定

子句描述查询输出的表格结构,即输出值的列名或表达式

格式

SELECT[ALL︱DISTINCT]<列名或列表达式序列>︱ *

释义

All︱Distinct,[保留︱消除]查询结果中的重复行

* 是对From子句中表的所有列的简写

列表达式

列名、常量、算数运算符、函数、聚合函数

66

Page 65: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

查询中的限制和规定

别名

用关键字AS为列、表、表达式起别名,AS可以省略

集合运算

(Select查询1) UNION[ALL](Select查询2)

(Select查询1) INTERSECT[ALL](Select查询2)

(Select查询1) EXCEPT[ALL](Select查询2)

备注

并交差运算的前提:相同的关系模式

关键字ALL,表示保留运算后的重复元组

67

Page 66: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

查询中的限制和规定

示例

Select NativePlace, Sname, Sex

From S ;

Select Sno, Sname, Age, Sex, NativePlace

From S ;

Select *

From S ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

68

Page 67: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

查询中的限制和规定

示例

Select Sname, Year(getdate()) – Age as BirthYear

From S AS X ;

Select Sname as 姓名, ‘BirthYear :’ as BIRTH,

2011 – Age as YEAY, Lower(Sex) as 性别

From S ;

说明

函数getdate(), year(), month(), day()

函数upper(), lower()

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

69

Page 68: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

查询中的限制和规定

示例

Select *

From S

Where Sex=‘F’ Or NativePlace=‘四川’

(Select * From S Where Sex='F')

UNION

(Select * From S Where NativePlace=‘四川’)

(Select * From S Where Sex='F')

UNION ALL

(Select * From S Where NativePlace='四川')

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

70

Page 69: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

查询中的限制和规定

示例

Select Sno

From SC ;

Select All Sno

From SC ;

Select Distinct Sno

From SC ;

Select top 5 Sno

From SC ;

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

SNO

S1

S1

S1

S2

S2

S2

S2

S3

S3

S4

S4

SNO

S1

S2

S3

S4

SNO

S1

S1

S1

S2

S2

71

Page 70: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

构成Where语句的条件运算符

查询条件 运算符

算数比较判断 = , > , < , >= , <= , != , <> , !> , !<

限定比较判断 单值比较运算 + <ALL│ANY│SOME│UNIQUE>

区间判断 BETWEEN … AND… , NOT BETWEEN … AND…

集合成员资格判断 IN , NOT IN

存在量词判断 EXISTS , NOT EXISTS

字符匹配判断 LIKE , NOT LIKE

空值比较判断 IS NULL , IS NOT NULL

逻辑运算判断 NOT , AND , OR

72

Page 71: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

算数比较运算

查询学号是S3的学生姓名

Select Sname From S Where Sno = ‘S3’ ;

查询年龄小于18的学生姓名

Select Sname From S Where Age < 18 ;

查询性别为男的学生的姓名、年龄和籍贯

Select Sname, Age, NativePlace

From S

Where Sex = ‘M’ ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

73

Page 72: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

区间运算

查询年龄[不]在17 ~ 19岁之间的学生的学号

Select Sno From S Where Age Between 17 and 19 ;

Select Sno From S Where Age>=17 and Age<=19 ;

Select Sno From S

Where Age not Between 17 and 19 ;

Select Sno From S

Where not (Age>=17 and Age<=19) ;

Select Sno From S Where Age<17 or Age>19 ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

74

Page 73: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

字符匹配运算

查询籍贯[不]是上海的学生姓名

Select Sname From S Where NativePlace = ‘上海’ ;

Select Sname From S

Where NativePlace Like ‘%上海%’ ;

Select Sname From S

Where NativePlace Like ‘%上%海%’ ;

Select Sname From S Where NativePlace <> ‘上海’ ;

Select Sname From S

Where NativePlace Not Like ‘%上海%’ ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

75

Page 74: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

字符匹配运算

注解

LIKE与通配符“%”和“_”

使用格式:[not] Like <匹配串> [Escape <换码字符>]

“%” :字符串中所处位置的0~n个字符

“_” :字符串中所处位置的 1 个字符

换码字符

查询课程名以“DB_C%A”开头的课程号和学分

Select Cno, Credit From C

Where Cname like ‘DB\_C\%A%’ Escape ‘\’ ;

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

76

Page 75: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

空值比较运算

查询[未]缺考学生的学号和课程号

Select Sno, Cno From SC

Where Grade is Null ;

Select Sno, Cno From SC

Where Grade is not Null ;

说明,在Where语句中

“is NULL”不能用“= NULL”替换

“is not NULL”不能用“<> NULL”替换

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 NULL

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 NULL

S4 C4 75

77

Page 76: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

空值比较运算

查询[未]缺考过的学生的学号

Select Distinct Sno From SC

Where Grade is Null ;

Select Distinct Sno From SC

Where Grade is not Null ;

Select Sno From S

Where Sno not in ( Select Sno From SC

Where Grade is Null ) ;

?

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 NULL

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 NULL

S4 C4 75

78

Page 77: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

集合成员运算

查询[未]选修‘C2’或‘C3’课程的学生学号

Select Sno From SC

Where Cno = ‘C2’ or Cno = ‘C3’ ;

Select Sno From SC

Where Cno = (‘C2’, ‘C3’) ;

Select Sno From SC Where Cno in (‘C2’, ‘C3’) ;

Select Sno From SC Where Cno =SOME(‘C2’, ‘C3’) ;

Select Sno From SC Where Cno not in (‘C2’, ‘C3’) ;

Select Sno From SC Where Cno <>ALL(‘C2’, ‘C3’) ;

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 NULL

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 NULL

S4 C4 75

?

? ?

79

Page 78: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

集合成员运算

查询[未]选修‘C2’或‘C3’课程的学生学号

Select Sno From S

Where Sno not in (

Select Sno from SC

Where Cno in (‘C2’, ‘C3’) ) ;

Select Sno From S

Where Sno <>ALL (

Select Sno from SC

Where Cno in (‘C2’, ‘C3’) ) ;

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 NULL

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 NULL

S4 C4 75

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

80

Page 79: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

集合成员运算

查询[未]选修‘LIU’老师所授课程的学生学号

Select Sno From SC, C, T

Where Tname=‘LIU’

and SC.Cno=C.Cno and C.TNO=T.Tno ;

Select Sno From SC Where Cno in (

Select Cno From C Where Tno in (

Select Tno From T Where

Tname=‘LIU’ ) ) ;

Select Sno From S

Where Sno not in

( 选过…的学号 ) ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

81

Page 80: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

集合成员运算

查询选修了‘LIU’老师所授全部课程的学生姓名

Select Sname From S

Where not Exists (

Select * From C

Where Tno in (Select Tno From T

Where Tname=‘LIU’ )

and not Exists (

Select * From SC

Where Sno=S.Sno

and Cno=C.Cno) );

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

82

Page 81: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

集合成员运算

查询至少有一门成绩超过S4一门成绩的学生学号

Select Distinct Sno From SC

Where Grade >Some(

Select Grade From SC

Where Sno=‘S4’ ) ;

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 NULL

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 NULL

S4 C4 75

83

Page 82: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

集合成员运算

查询平均成绩最高的学生学号

使用导出表

Select S#

From ( Select Sno, AVG(Grade)

From SC Group By Sno

) AS TmpTable(S#, AVG_Grade)

Where AVG_Grade >= ALL ( Select AVG(Grade)

From SC

Group By Sno ) ;

84

Page 83: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

(

)

AS RESULT ( S#, AVG_GRADE )

SELECT S#, AVG_GRADE

FROM

WHERE AVG_GRADE > 80;

导出表的使用

在FROM子句中使用子查询,给子查询的结果起表名和相应列名

例:检索平均成绩超过80分的学生学号和平均成绩SELECT S#,AVG(GRADE)FROM SC

GROUP BY S#

HAVING AVG(GRADE)> 80;

用导出表:SELECT S#,AVG(GRADE)FROM SC

GROUP BY S#

第三章 关系数据库语言SQL 3.3 SQL的数据查询 85

Page 84: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

嵌套查询的改进写法

导出表

在From子句中使用子查询,子查询必须起别名

命名的导出表只在From中起作用,离开From子句失效

WITH语句和临时视图(SQL Server 2005以上版本)

作用类同于导出表,但语句的逻辑组织比含导出表更清晰

WITH TmpTable(S#, AVG_Grade) AS

Select Sno, AVG(Grade) From SC Group By Sno

Select S# From TmpTable

Where AVG_Grade >= ALL ( Select AVG_Grade

From TmpTable ) ;

86

Page 85: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

集合空否的测试

Select …

From R

Where [NOT]EXISTS ( Select *

From S

Where S.A=R.A and … ) ;

说明

当内层集合非空,返回True,否则返回False

87

Page 86: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

条件表达式中的比较操作

集合中是否有重复元组的判定

查询只选修了一门课的学生的学号和姓名

Select Sno, Sname From S

Where unique( Select Sno From SC

Where Sno=S.Sno ) ;

Select S.Sno, Sname

From S, SC

Where S.Sno=SC.Sno

Group by S.Sno, Sname

Having Count(Cno) = 1 ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

88

Page 87: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

基本表的联接操作

89

Page 88: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据查询

SQL3中的递归查询

90

Page 89: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据插入

句法

1)单元组的插入

INSERT INTO 基本表名 [(列名表)] VALUES(元组值)

2)多元组的插入:不是所有版本的DBMS都支持

INSERT INTO 基本表名 [(列名表)]

VALUES (元组值), … , (元组值)

3)查询结果的插入

INSERT INTO 基本表名 [(列名表)] <SELECT查询语句>

4)表的插入:

INSERT INTO 基本表名1 [(列名表)] TABLE 基本表名2

91

Page 90: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据插入

说明

若插入的元组值,其属性个数、次序和域,与表结构的定义一致,则列名表可以省略

否则需要列名表,且列名表的属性个数和次序,需与待插入值一一对应

数据插入受关系完整性约束的制约

数据类型

实体完整性:主键值唯一,非空

参照完整性:不允许引用不存在的实体

用户自定义的完整性

92

Page 91: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据插入

示例

Insert Into S(Sno, Sname, Age, Sex, NativePlace)

Values('S5', 'GU', 20, 'M', NULL) ;

Insert Into S Values('S5', 'GU', 20, 'M', NULL) ;

Insert Into S(Sno, Sname, Age, Sex)

Values('S5', 'GU', 20, 'M') ;

Insert Into S(Sname, Sno, Sex, Age)

Values('GU', 'S5', 'M', 20) ;

Insert Into SC(S#, C#) Values('S5', 'C8');

Insert Into SC Values('S5', 'C8', NULL);

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

93

Page 92: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

数据插入

示例

Insert Into S_Grade(S#, AVG_Grade)

Select Sno, AVG(Grade) From SC

Where Sno in (Select Sno From S Where Sex='M')

Group By Sno

Having AVG(Grade)>80 ;

Insert Into SC(Sno, Cno) TABLE SC4 ;

SQL的数据更新 C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

94

Page 93: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据插入

示例,问:

Insert Into SC Values('S4', 'C569', 105) ;

Insert Into SC Values(‘S4’, ‘C5’,105) ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

?

95

Page 94: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据插入

示例,问:

Insert Into SC Values(‘S4’, ‘C5’, 95) ;

Insert Into SC Values(‘S4’, ‘C4’, 95) ;

如图示4条相关数据的

插入顺序是什么?

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

?

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

96

?

Page 95: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据删除

句法

DELETE FROM <基本表名> [ WHERE 条件表达式 ]

语义

是从基本表中删除满足条件表达式的元组

注意

DELETE语句只能从一个基本表中删除元组

WHERE子句中条件可以嵌套,也可以是来自几个基本表的复合条件

如果没有WHERE子句,则删除表的所有元组,表成为空表

97

Page 96: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据删除

示例

Delete From SC Where Grade is NULL ;

Delete From C Where Cname Like ‘%M%’ ;

Delete From SC Where Cno in (

Select Cno From C Where Cname = ‘MATHS’ ) ;

Delete From SC, C

Where SC.Cno = C.Cno and Cname = ‘MATHS’ ;

Delete From SC Where Cno = ‘C4’ and Grade < (

Select AVG(Grade) From SC Where Cno = ‘C4’ );

?

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

98

Page 97: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据删除

示例,问

Delete From S Where Sname Like ‘%U%’ ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

Create Table SC (

SNO CHAR(3) , CNO CHAR(3) , GRADE DEC(5, 2) ,

Primary Key (SNO, CNO) ,

Foreign Key (SNO)

References S(SNO) ON DELETE restrict ,

Foreign Key (CNO)

References C ON DELETE cascade ,

Check ( GRADE Between 0 And 100) ) ;

99

Page 98: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据删除

示例,问

Delete From S Where Sname Like ‘%U%’ ;

Delete From SC Where Sno in (

Select Sno From S

Where Sname Like ‘%U%’ );

Delete From S Where Sname Like ‘%U%’ ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

100

Page 99: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据删除

示例,问

如图示4条相关数据的删除顺序是什么?

Drop Table SC

Delete From SC

的区别是什么

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

?

101

Page 100: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据删除

当LIU老师不再教授课程时,删除其基本信息

Delete From T

Where Tname = ‘LIU’

AND Tno Not in ( Select Tno

From C)

当PM课程没人选修时,删除这门课程信息

当WANG同学不再选修课程时,删除其基本信息

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

? ?

102

Page 101: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据修改

句法

UPDATE <基本表名>

SET 列名=值表达式[,列名=值表达式…]│ROW = (元组)

[ WHERE 条件表达式 ]

语义

修改基本表中满足条件表达式元组的指定属性值

说明

WHERE子句表示要修改的元组需满足的条件

SET子句表示要修改的列及其新值或元组值

UPDATE语句一次只能修改一个表中的元组

105

Page 102: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据修改

示例

Update C Set Cname=‘SE’ Where Cno=‘C3’ ;

Update SC Set Grade = Grade * 1.1

Where Sno in (

Select Sno From S Where Sex = ‘F’ ) ;

Update SC, S Set Grade = Grade * 1.1

Where SC.Sno = S.Sno

and Sex = ‘F’ ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

?

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1 106

Page 103: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据修改

示例

Update SC Set Grade = Grade * 1.05

Where Cno='C4' and Grade < (

Select AVG(Grade) From SC Where Cno='C4');

Update C

Set Row = ('C3', ‘SE', 4, 64 , 'C1', ‘T2' )

Where Cno = 'C3' ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1 107

Page 104: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据修改

示例

Update SC Set Grade = 60

Where Grade is NULL ;

Update SC Set Grade = Grade + 60

Where Grade is NULL ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

? ?

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1 108

Page 105: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据修改

示例

Update SC Set Grade is NULL

Where Grade = 70 and Cno in (

Select Cno From C Where Cname = 'MATH' ) ;

Update SC Set Grade = NULL

Where Grade = 70 and Cno in (

Select Cno From C Where Cname = 'MATH' ) ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

?

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1 109

Page 106: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据修改

示例

Update SC Set Grade = Grade * 1.5

Where Sno= 'S2' and Cno= 'C3' ;

Update C Set Tno = 'T3' Where Cno= 'C3' ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

?

110

Page 107: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

SQL的数据更新

数据修改

示例

Update C Set Cno = 'C3' Where Cno= 'C4' ;

Update C

Set Cno=NULL

Where Cno= 'C4' ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

CNO CNAME Credit CreditHours CPNO TNO

C1 Math 3 48 NULL T1

C2 English 4 64 NULL T2

C3 PM 2 32 C2 T2

C4 DB 3.5 56 C1 T1

SNO CNO Grade

S1 C2 80

S1 C3 70

S1 C4 85

S2 C1 60

S2 C2 75

S2 C3 90

S2 C4 NULL

S3 C1 85

S3 C4 80

S4 C2 85

S4 C4 75

TNO TNAME TITLE SEX

T1 ZHAO 讲师 M

T2 LIU 教授 F

?

?

?

111

Page 108: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

视图

虚表

创建视图仅定义视图结构和抽取数据的规则

不存储视图对应的数据

在使用视图时动态地从相应的基本表中获取数据

SQL

视图1 视图2

基本表1 基本表2 基本表3 基本表4

存储文件1 存储文件2 存储文件3 存储文件4

外模式

模式

内模式

View

用户的局部数据视角

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

112

Page 109: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

视图

创建 句法

CREATE VIEW <视图名> [列名表] AS <查询语句>

说明

[列名表]是否省略,要看具体情况

通过函数或表达式定义视图的列时或需在视图中 取更合适的名字时→必须在列名表中定义新的列名(也有规定:多表连接选出同名列时)

对视图查询,和对基本表的查询一样,没有限制

对视图的更新(insert、update、delete)是受限制的

撤销 句法

DROP VIEW <视图名>

113

Page 110: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

建立视图(续)

RDBMS执行CREATE VIEW语句时只是把视图定义存入

数据字典,并不执行其中的SELECT语句。

在对视图查询时,首先判断视图是否存在,如果存在,则

从数据字典中取出视图的定义,把定义中的子查询和对视

图的查询结合起来,转换成等价的对基本表的查询。

Page 111: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

视图

视图的更新限制

对视图的数据更新,最终要更新到基本表上

只有“行列子集视图”的更新是不受限制的

行列子集视图

定义在单个基本表上

定义时仅使用了选择、投影操作

包含了基本表的候选键和所有的非空字段

其他形式的视图都不允许更新操作,如

视图的列定义中使用了表达式或函数

视图定义来自多表连接

视图定义中用到GROUP BY子句或聚集函数

115

Page 112: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

视图

示例

构建平均成绩子模式,要求显示学号、姓

名、平均成绩

G视图不允许更新

G(S#,SNAME,Gavg)

Create View G ( S#, SNAME,Gavg)

AS Select S.SNO, SNAME, AVG(Grade)

From S, SC

Where S.SNO = SC.SNO

GROUP BY S.SNO, SNAME;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

… … … … …

SNO CNO Grade

S1 C2 80

… … …

S# SNAME Gavg

S1 WANG 75

… … …

S SC

G

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

116

Page 113: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

视图

示例

Create View S_MALE

as

Select Sno, Sname, Age

From S

Where Sex = ‘M’ ;

视图S_MALE是可以更新的

Insert into S_MALE

Values (‘S5’, ‘LI’, 19) ;

Insert into S

Values (‘S5’, ‘LI’, 19, ‘M’, NULL) ;

Create Table S (

SNO CHAR(3) ,

SNAME CHAR(8) NOT NULL,

AGE Integer NULL,

SEX CHAR(1) DEFAULT ‘M’,

NativePlace VARCHAR(20) ,

Primary Key (SNO) ,

Check (SEX IN (‘M’, ‘F’) ) ) ;

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

S2 LIU 18 F 山东

S3 HU 17 M 上海

S4 XIA 19 F 四川

C(CNO,CNAME,Credit,CreditHours,CPNO,TNO)

S(SNO,SNAME,AGE,SEX,NativePlace)

T(TNO,TNAME,TITLE,SEX)

SC(SNO,CNO,Grade)

117

Page 114: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

视图

示例

Create View Grade-AVG(Sname, AVG_Grade)

as

Select Sname, AVG(Grade) From SC, S

Where SC.SNO = S.SNO

Group by Sname ;

Create View Grade-AVG

as

Select Sname, AVG(Grade) as AVG_Grade From SC, S

Where SC.SNO = S.SNO

Group by Sname ;

118

Page 115: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

视图

优点

提供逻辑数据独立性

应该是映像的作用

简化用户观点

数据安全保护

Create View G ( S#, SNAME, C#, SCORE)

AS

Select S.SNO, SNAME, CNO, Grade

From S, SC

Where S.SNO = SC.SNO

SNO SNAME AGE SEX NativePlace

S1 WANG 20 M 北京

… … … … …

SNO CNO Grade

S1 C2 80

… … …

S# SNAME C# SCORE

S1 WANG C2 80

… … … …

S SC

G

119

Page 116: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

视图分为普通视图与检查视图。

通过检查视图更新基表数据时,只有满足检查条件的更新语句才能成功执行。创建检查视图的语法格式如下。

create view 视图名 [ (视图字段列表) ]

as

select语句with [ local | cascaded ] check option

检查视图

Page 117: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

检查视图分为local检查视图与cascade检查视图。local:只要满足本视图的条件就可以更新cascade:级联视图,必须满足所有针对该视图的所有视图的条件才可以更新。默认cascade

local与cascade检查视图

Page 118: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

local 检查视图与cascade检查视图

cascaded检查视图

检查条件:c<60

a e c c h fcascaded检查视图

检查条件:c>50

local检查视图

检查条件:c>50

操作1:

通过该视图执行update

操作,将c赋值为70。

将无法完成此操作

操作2:

通过该视图执行update操

作,将c赋值为70。

此操作可以成功执行

a e c h f

a b

基本表1

c d e

基本表2

f g h

基本表3

local与cascade检查视图

Page 119: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

嵌入式SQL

125

Page 120: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

存储过程与SQL/PSM

126

Page 121: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

如图所示成绩管理系统的部分表中,S存储学生数据,C存储课程数据,SC存储学生选修课程的数据,假设S表、C表和SC表的定义如下:

Create Table S ( SNO CHAR(3), SNAME CHAR(8) NOT NULL, AGE Integer,

SEX CHAR(1) DEFAULT ‘M’,

Primary Key (SNO) ) ;

Create Table C ( CNO CHAR(3), CNAME CHAR(18) NOT NULL, Credit Integer,

CHours Integer, Primary Key(CNO) ) ;

Create Table SC ( SNO CHAR(3), CNO CHAR(3),

GRADE Integer, Primary Key (SNO, CNO),

Foreign Key (SNO) References S(SNO),

Foreign Key (CNO) References C(CNO),

Check (GRADE Between 0 And 100) ) ;

问:请指出上述表实例的数据中存在的5处错误,并简述理由?

127

Page 122: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

128

C 表 CNO CNAME Credit CHours

5 C1 Math 3 48

6 C2 NULL 4 64

7 C3 PM 2 32

8 C4 DB 3 48

S 表 SNO SNAME AGE SEX

1 S1 WANG 20 M

2 S2 ZHAO 18 F

3 S3 HU 17 M

4 NULL XIA 19 F

SC 表 SNO CNO Grade

9 S1 C2 80

10 S1 C3 70

11 S1 C4 115

12 S2 C1 60

13 S2 C2 75

14 S2 C2 90

15 S2 C4 80

16 S3 C1 85

17 S3 C2 80

18 S3 C4 85

19 S4 C4 75

Page 123: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

An Introduction to Database

System

自身连接

自身连接:一个表与其自己进行连接

需要给表起别名以示区别

由于所有属性名都是同名属性,因此必须使用别名前缀

[思考题]查询每一门课的先修课程名

SELECT FIRST.Cname 课程名,SECOND.Cname 先修课程名

FROM Course FIRST,Course SECOND

WHERE FIRST.Cpno = SECOND.Cno;

Page 124: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

An Introduction to Database

System

自身连接(续)

FIRST表(Course表)

Cno Cname Cpno Ccredit

1 数据库 5 4

2 数学 2

3 信息系统 1 4

4 操作系统 6 3

5 数据结构 7 4

6 数据处理 2

7 PASCAL语言 6 4

Page 125: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

An Introduction to Database

System

自身连接(续)

Cno Cname Cpno Ccredit

1 数据库 5 4

2 数学 2

3 信息系统 1 4

4 操作系统 6 3

5 数据结构 7 4

6 数据处理 2

7 PASCAL语言 6 4

SECOND表(Course表)

Page 126: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

An Introduction to Database System

自身连接(续)

查询结果:

课程名 先修课程名

数据库 数据结构

信息系统 数据库

操作系统 数据处理

Page 127: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

An Introduction to Database

System

[例]查询每一门课的间接先修课号(即先修课的先修课)

SELECT FIRST.Cno,SECOND.Cpno

FROM Course FIRST,Course SECOND

WHERE FIRST.Cpno = SECOND.Cno;

Page 128: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

An Introduction to Database System

自身连接(续)

查询结果:

Cno Pcno

1 7

3 5

5 6

Page 129: Unified Modeling Language引言 SQL是关系数据库的标准语言 对关系模型的发展和商用DBMS的研制起着重要的作用 SQL语言是介乎于关系代数和元组演算之间的一种语言

An Introduction to Database

System

[例]查询每一门课的间接先修课名(即先修课的先修课)

SELECT FIRST.Cname,THREE.Cname

FROM Course FIRST,Course SECOND,Course THREE

WHERE FIRST.Cpno = SECOND.Cno

AND SECOND.Cpno=THREE.Cno;