第二章数据库基本原理_第1页
第二章数据库基本原理_第2页
第二章数据库基本原理_第3页
第二章数据库基本原理_第4页
第二章数据库基本原理_第5页
已阅读5页,还剩141页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章数据库系统基本原理2.1概念模型2.2E-R图2.3关系数据模型2.4SQL语言基础2.5小结1.概念模型(复习)

(1)实体(Entity)

客观存在并可相互区别的事物称为实体。可以是具体的人、事、物,也可以是抽象的概念或联系。实体举例:

一个学生,一个部门,一门课,学生的一次选课,老师与学院的联系(某个老师在某个哪个学院工作)

1.概念模型(2)属性(Attribute)

实体所具有的某一特性称为属性。一个实体可以具有若干个属性。

属性举例:学生实体可以由学号、姓名、性别、院系、入学时间等属性组成。(200204,张山,男,信息学院,2002)1.概念模型(3)码(Key)

唯一标识实体的属性集称为码或者称为键。

码举例:学生实体可以由学号、姓名、性别、院系、入学时间等属性组成。(200204,张山,男,信息学院,2002)其中,学号是学生实体的码。1.概念模型(4)域(Domain)

属性的取值范围

称为该属性的域。例如:

学号的域为8位整数

姓名的域为字符串集合

性别的域为(男,女)年龄的域为小于38岁的整数1.概念模型(5)实体集(EntitySet)

具有相同性质的实体集合称为实体集例如:全体学生,全体教师都是实体集。1.概念模型(6)联系(Relationship)

现实世界中事物内部以及事物之间的联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系两个实体型之间联系分为三类:一对一联系(1:1)

一对多联系(1:n)

多对多联系(m:n)

①一对一联系(1:1)如果实体集A中每个实体,实体集B中只有一个实体与之对应,反之,实体集B中的每个实体,实体集A中也只有一个实体与之对应,即实体集A与实体集B有一对一联系。如:正班长与班级。班长班级管理11三类实体间的联系:一对一、一对多、多对多②一对多联系(1:n)

如果实体集A中每个实体,实体集B中只有n个实体与之对应,反之,实体集B中的每个实体,实体集A中只有一个实体与之对应,即实体集A与实体集B有一对多联系。如:班级与学生。班级学生学习1n③多对多联系(m:n)如果实体集A中每个实体,实体集B中只有n实体与之对应,反之,实体集B中的每个实体,实体集A中也有m实体与之对应,即实体集A与实体集B有多对多联系。如:班干部与学生。班干部学生管理mn两个实体型间的3种联系实体型1联系名实体型2111:1联系实体型1联系名实体型2mnm:n联系实体型1联系名实体型21n1:n联系多个实体型间的联系多个实体型之间也存在:一对一联系一对多联系多对多联系供应商项目零件供应pmn同一实体集内各实体间的联系同一实体集内的各个实体之间也存在着:一对一联系一对多联系多对多联系职工领导1n

2.E-R图实体-联系方法(E-R方法)用E-R图来描述现实世界的概念模型E-R方法也称为E-R模型在E-R图中,可以表示实体型、属性和联系。E-R图实体型用矩形表示,矩形框内写明实体名。学生教师E-R图(续)属性用椭圆形表示,并用无向边将其与相应的实体连接起来学生(学号,姓名,性别,年龄)学生学号年龄性别姓名E-R图(续)联系联系本身:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)联系的属性:联系本身也是一种实体型,也可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来

实例1学生(学号,姓名,性别,年龄,系,年级)学号姓名年龄性别系年级学生实例2供应商供应项目零件mnp联系的属性:供应量例3:学生选修课程学生课程选修姓名学号系别课程名先修课学分成绩用矩形表示实体型,在框内写上实体名用椭圆表示实体的属性用无向边把实体与其属性连接起来用菱形表示实体间的联系将参与联系的实体用线段连接mn联系的数量用E-R图画出某个工厂物资管理的概念模型:

物资管理涉及的实体有:仓库(仓库号,面积,电话号码)零件(零件号,名称,规格,单价,描述)供应商(供应商号,姓名,地址,电话号码,帐号)项目(项目号,预算,开工日期)职工(职工号,姓名,年龄,职称)提示:职工在仓库中工作;职工集内部联系;试画出此工厂的物资管理E-R图

课堂作业:设计实例这些实体间的联系如下:

1)一个仓库可以存放多种零件,一种零件可以存放在多个仓库中,因此仓库和零件具有多对多联系

2)一个仓库可以有多个职工当保管员,一个职工只能在一个仓库工作,因此仓库和职工是一对多联系

3)职工之间具有领导与被领导关系,仓库主任领导若干保管员,职工实体集中具有一对多联系

4)供应商、项目和零件之间具有多对多关系

课堂作业:设计实例课后作业:设计实例学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修请用E-R图画出此学校的概念模型1970年,美国IBM公司的E.F.Codd提出关系数据模型之后,提出了关系代数和关系演算的概念1971-1972年,E.F.Codd提出了关系的第一、第二、第三范式从而开创了数据库的关系方法和数据规范化理论的研究1977年IBM公司研制的关系数据库的代表SystemR开始运行,其后又进行了不断的改进和扩充,出现了基于SystemR的数据库系统SQL/DB。80年代后,关系数据库系统成为最重要、最流行的数据库系统

3、关系数据模型关系数据库的典型实例典型商用系统ORACLESYBASEINFORMIXACESSSQLSERVER关系数据库1关系模型概述2关系数据结构3关系的完整性4

关系数据库的优缺点1.关系模型概述关系数据库系统是支持关系模型的数据库系统关系模型的三大组成部分关系数据结构关系操作集合关系完整性约束(1)关系模型的数据结构单一的数据结构----关系现实世界的实体以及实体间的各种联系均用关系来表示数据的逻辑结构----二维表从用户角度,关系模型中数据的逻辑结构是一张二维表。

(2)关系操作集合1)常用的关系操作2)关系操作的特点3)关系数据语言的特点关系操作集合(续)1)常用的关系操作数据查询选择、投影、连接、除、并、交、差数据更新插入、删除、修改关系操作集合(续)2)关系操作的特点集合操作方式,即操作的对象和结果都是集合。关系模型操作的方式:一次一集合非关系模型操作的方式:一次一记录关系操作集合(续)3)关系数据语言的特点关系语言是一种高度非过程化的语言具备完备的表达能力,功能强能够嵌入高级语言中使用(3)关系的三类完整性约束实体完整性参照完整性这2种完整性通常由关系系统自动支持用户定义的完整性反映应用领域需要遵循的约束条件,体现了具体领域中的语义约束用户定义后由系统支持关系数据库1关系模型概述2关系数据结构3关系的完整性4

关系数据库的优缺点教学数据库的关系模型以下给出了教学数据库的关系模型及其实例,包含五个关系:教师关系T、学生关系S、课程关系C、选课关系SC和授课关系TC,分别对应五张表。下面以教学数据库的关系模型为例,介绍关系模型中所涉及的一些基本概念。T(教师表)TNO教师号TN姓名SEX性别AGE年龄PROF职称SAL工资COMM岗位津贴DEPT系别T1李力男47教授15003000计算机T2王平女28讲师8001200信息T3刘伟男30讲师9001200计算机T4张雪女51教授16003000自动化T5张兰女39副教授13002000信息S(学生表)SNO学号SN姓名SEX性别AGE年龄DEPT系别S1赵亦女17计算机S2钱尔男18信息S3孙珊女20信息S4李思男21自动化S5周武男19计算机S6吴丽女20自动化C(课程表)CNO课程号CN课程名CT课时C1程序设计60C2微机原理80C3数字逻辑60C4数据结构80C5数据库60C6编译原理60C7操作系统60SC(选课表)TC(授课表)

SNO学号CNO课程号SCORE成绩

TNO教师号CNO课程号S1C190

T1C1S1C285

T1C4S2C557

T2C5S2C680

T3C1S2C7

T3C5S2C570

T4C2S3C10

T4C3S3C270

T5C5S3C485

T5C7S4C193

S4C285

S4C383

S5C289

(1)关系(Relation)一个关系对应一张二维表,五张表对应五个关系。(2)元组(Tuple)——记录表格中的一行,如S表中的一个学生记录即为一个元组(3)属性(Attribute)——字段表格中的一列,相当于记录中的一个字段,如S表中有五个属性(学号,姓名,性别,年龄,系别)。(4)域(Domain)属性的取值范围,如年龄的域是(14-40),性别的域是(男,女)。2.关系数据结构关系数据结构(续)(5)码候选码(Candidatekey)若关系中的某一属性组的值能唯一地标识一个元组则称该属性组为候选码在最简单的情况下,候选码只包含一个属性。全码(All-key)在最极端的情况下,关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)关系数据结构(续)码(续)主码若一个关系有多个候选码,则选定其中一个为主码(Primarykey)主码的诸属性称为主属性(Primeattribute)不包含在任何侯选码中的属性称为非码属性(Non-keyattribute)

导师

专业研究生姓名张清玫信息专业李勇张清玫信息专业刘晨刘逸信息专业王敏有意义的关系及其值:研究生学号100110021003候选码主码(6)分量每一行对应的列的属性值,即元组中的一个属性值,如学号、姓名、年龄等均是一个分量。(7)关系模式对关系的描述,一般表示为:

关系名(属性1,属性2,……属性n),如:学生(学号,姓名,性别,年龄,系别)。请写出其他4个关系的关系模式。关系数据结构(续)关系数据结构(续)1)关系的表示关系是一个二维表,表的每行对应一个元组,表的每列对应一个域(属性)。关系数据结构(续)2)三类关系基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示查询表:查询结果对应的表视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据对关系的几点说明关系可以是一个无限集合但无限关系在数据库系统中是无意义的因此,数据库中的关系必须是有限集合。

基本关系的性质①列是同质的,类型和域相同②不同的列可出自同一个域③列的顺序无所谓④任意两个元组不能完全相同⑤行的顺序无所谓⑥分量必须取原子值注意:关系表中每一列都是不可再分的数据项;关系表中的字段不能重复。关系数据库1关系模型概述2关系数据结构3关系的完整性4

关系数据库的优缺点3.关系的完整性

关系模型的完整性规则:

是对关系的某种约束条件。关系模型中三类完整性约束:实体完整性参照完整性用户定义的完整性3.1实体完整性规则2.1

若属性A是基本关系R的主属性,则属性A不能取空值例:学生(学号,姓名,系别)课程(课程号,课程名,学分)选课(学号,课程号,成绩)实体完整性(续)关系模型必须遵守实体完整性规则的原因:(1)实体完整性规则是针对基本关系而言的。

一个基本表通常对应现实世界的一个实体集。(2)现实世界中的实体和实体间的联系都是可区分

的,即它们具有某种唯一性标识。(3)相应地,关系模型中以主码作为唯一性标识。(4)主码中的属性即主属性不能取空值。如果取空值,即说明存在某个不可标识的实体,与(2)矛盾。3.2参照完整性1.关系间的引用2.外码3.参照完整性规则

关系间的引用例1学生实体、专业实体的关系表示如下:

学生(学号,姓名,性别,专业号,年龄)专业(专业号,专业名)

专业号是学生关系的外码。

学生关系是参照关系。

专业关系是被参照关系。关系间的引用(续)例2学生、课程、选课的关系表示如下:

学生(学号,姓名,性别,专业号,年龄)课程(课程号,课程名,学分)选修(学号,课程号,成绩)学号,课程号是选修关系的外码

学生关系和课程关系是被参照关系

选课关系是参照关系

学生学生选课课程关系间的引用(续)例3学生实体表示如下:

学生(学号,姓名,性别,专业号,年龄,班长)

参照完整性规则定义:

若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:

R:学生(学号,姓名,性别,专业号F,年龄)

S:专业(专业号Ks,专业名)

或者取空值(F的每个属性值均为空值)

或者等于S中某个元组的主码值。参照完整性规则(续)

例1:学生关系中,每个元组的“专业号”属性只能取下面两类值:(1)空值,表示尚未给该学生分配专业(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中参照完整性规则(续)

例2

选修(学号,课程号,成绩)“学号”和“课程号”是选修关系中的主属性按照实体完整性和参照完整性规则,它们只能取相应被参照关系中已经存在的主码值关系的完整性(续)3.1实体完整性3.2.参照完整性3.3.用户定义的完整性3.3用户定义的完整性用户定义的完整性:针对某一个具体数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。(人为规定的条件)关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。关系数据库1关系模型概述2关系数据结构3关系的完整性4

关系数据库的优缺点(1)与非关系模型不同,它有较强的数学理论根据。(2)数据结构简单、清晰,用户易懂易用,不仅用关系描述实体,而且用关系描述实体间的联系。(3)关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库建立和开发的工作。4、关系模型的优点关系模型的缺点

由于存取路径对用户透明,查询效率往往不如非关系模型,因此,为了提高性能,必须对用户的查询表示进行优化,增加了开发数据库管理系统的负担。4.关系数据库标准语言SQL4.1SQL概述4.2数据定义4.3查询4.4数据更新4.5视图4.6数据控制SQL语言的前身是SEQUEL语言,是1974年由Boyce和Chamberlin提出的,作为SystemR上的查询语言。后改为SQL(结构查询语言

StructuredQueryLanguage)。1986年美国国家标准局ANSI将SQL语言作为数据库语言的美国标准,即SQL-86标准1987年国际标准化组织ISO将SQL作为数据库语言的国际标准。4.1SQL概述

4.1.1SQL语言的特点综合统一高度非过程化面向集合的操作方式以同一种语法提供两种使用方式语言简洁,易学易用,9个动词

4.1.1SQL语言的特点(续)SQL视图V1视图V2基表B1基表B2基表B3基表B4存储文件S1存储文件S2存储文件S3存储文件S4用户外模式模式内模式4.1.2SQL数据库体系结构4.2数据定义

SQL的数据定义功能包括:定义表定义视图定义索引SQL的数据定义语句如下页表所示:4.2数据定义

操作对象操作方式创建删除修改表CreateTableDropTableAlterTable视图CreateViewDropView索引CreateIndexDropIndex表3.2SQL的数据定义语句4.2.1定义基本表在SQL中,定义表(基本表)主要包括以下的操作:

定义(创建)基本表修改基本表删除基本表一、定义基本表SQL中定义基本表的格式如下:CREATETABLE<表名>(<列名><数据类型>[<列级完整性约束条件>][,<列名><数据类型>[<列级完整性约束条件>]

]…[,<表级完整性约束条件>]);一、定义基本表

<表名>:所要定义的基本表的名字

<列名>:组成该表的各个属性(列)

<列级完整性约束条件>:涉及相应属性列的完整性约束条件

<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件PS:默认情况下,SQL语言不区分大小写

程序首行USESC

/*表示将SC数据库指定为当前数据库

INTEGER或INT全字长(31bits精度)的二进制整数SMALLINT半字长(精度为15bits)的二进制整数FLOAT双字长(8B)的浮点数CHARTER(N)或CHAR(N)长度为n的定长字符串VARCHAR(N)变长字符串,最大长度为nDATE日期型,格式为YYYY-MM-DDTIME时间型,格式为HH.MM.SSMONEY4B货币型SQL支持以下数据类型:例题[例1]建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。

CREATETABLE

Student(

Sno

CHAR(5)NOTNULLUNIQUE,

Sname

CHAR(20)UNIQUE,

Ssex

CHAR(1)

Birthday

Smalldatetime,

Sdept

CHAR(15))

定义基本表(续)常用完整性约束

主码约束:

PRIMARYKEY

唯一性约束:UNIQUE

非空值约束:NOTNULL

参照完整性约束例题(续)[例2]建立一个“学生选修课”表SC,它由学号Sno、课程号Cno,选修课成绩Grade组成,其中(Sno,Cno)为主码。CREATETABLE

SC(SnoCHAR(5),

CnoCHAR(3),

GradeintCHECK(Grade>0),

Primarykey(Sno,Cno));二、修改基本表<表名>:要修改的基本表ADD子句:增加新列和新的完整性约束条件DROP子句:删除指定的完整性约束条件MODIFY子句:用于修改列名和数据类型PS:SQL中是用ALTERCOLUMN子句;语句格式:ALTERTABLE<表名>[ADD<新列名><数据类型>[完整性约束]][DROP<完整性约束名>][MODIFY<列名><数据类型>];例题[例2,P30]向Student表增加“出生年月”列Bith,其数据类型为日期型(DATETIME)ALTERTABLE

Student

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

[例3,P30]将学生选修课表SC中成绩Grade数据类型改为半字长整数。例题ALTERTABLESC

ALTERCOLUMNGrade

SMALLINT;

注意:SQLServer2000数据库系统中不支持Modify关键字,用altercolumn替代modify可以修改数据库中的列。Modify语句在MySQL中能用。三、删除基本表 格式:DROPTABLE

<表名>;

[例5]删除Student表DROPTABLE

Student;删除基本表后,表中的数据、表上的索引全部自动删除,但原表上的视图往往仍然保留,但无法引用。建立索引是加快查询速度的有效手段建立索引DBA或表的属主(即建立表的人)根据需要建立有些DBMS自动建立以下列上的索引

PRIMARYKEYUNIQUE维护索引

DBMS自动完成

使用索引

DBMS自动选择是否使用索引以及使用哪些索引4.2.2建立与删除索引

CREATE

[UNIQUE][CLUSTERED]

INDEX

<索引名>

ON

<表名>

(<列名>[<次序>]

[,<列名>[<次序>]]…);

4.2.2建立与删除索引一、建立索引(CREATEINDEX)语句格式:一、建立索引<表名>:指定要建索引的基本表名字索引可以建立在该表的一列或多列上,各列之间用逗号分隔<次序>:指定索引值的排列次序升序:ASC,降序:DESC。缺省值:ASCUNIQUE:表明此索引的每一个索引值只对应唯一的数据记录,已含重复值的字段不能建立唯一索引CLUSTERED:表示要建立的索引是聚簇索引,即将表中记录按照某列升序排列。例题

[例6]为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建聚簇索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATE

CLUSTERED

INDEXStusnoONStudent(Sno)CREATE

UNIQUE

INDEXSCno

ONSC(SnoASC,CnoDESC);

CREATE

UNIQUE

INDEXCoucnoONCourse(Cno);二、删除索引

DROPINDEX<索引名>;[例7,P31]删除Student表的Stusno索引注意:删除索引时,系统会从数据字典中删去有关该索引的描述。

SQL:DROPINDEX

Stusno;

SQL2000:

DROPINDEX

Student.Stusno;本小节重点定义基本表CREATETABLE修改基本表ALTERTABLE删除基本表DROPTABLE建立索引CREATEINDEXON删除索引DROPINDEX4.3查询4.3.1概述4.3.2单表查询4.3.3联接查询4.3.1概述在SQL中进行数据数据查询时,使用Select语句,一般格式如下:SELECT

[ALL|DISTINCT]<目标列表达式>

[,<目标列表达式>]…FROM

<表名或视图名>[,<表名或视图名>]…[WHERE<条件表达式>][GROUPBY<列名1>[HAVING<条件表达式>]][ORDERBY<列名2>[ASC|DESC]];语句格式SELECT子句:指定选出哪些属性列组成新表FROM子句:指定要查询对象(基本表或视图)WHERE子句:指定查询条件GROUPBY子句:对查询结果按列名1的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。HAVING短语:说明只输出满足指定条件的组ORDERBY子句:对查询结果表按列名2的值的升序或降序排序示例数据库学生-成绩数据库学生表:

Student(Sno,Sname,Ssex,Birthday,Sdept)课程表:

Course(Cno,Cname,Ccredit,Period)学生选课表:

SC(Sno,Cno,Grade)4.3.2单表查询查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列二、选择表中的若干元组三、对查询结果排序四、使用函数五、对查询结果分组

1.查询指定列[例1]查询全体学生的学号与姓名。SELECTSno,SnameFROMStudent;

[例2]查询全体学生的姓名、学号、所在系SELECTSname,Sno,SdeptFROMStudent;

2.查询全部列[例3]查询全体学生的详细记录。方法二:

SELECT*FROMStudent;

方法一:

SELECTSno,Sname,Ssex,Birthday,SdeptFROMStudent;注意:只有列的显示顺序与基本表中列的顺序一致时,才能用*代替。

3.查询经过计算的值SELECT子句的<目标列表达式>可以是以下情况:列名(属性名)算术表达式字符串常量函数列别名

3.查询经过计算的值[例4]查全体学生的姓名及其出生年份。输出结果:SELECTSname,2005–birthdayasSageFROMStudent;

二、选择表中的若干元组消除取值重复的行(DISTINCT短语)查询满足条件的元组(WHERE子句)1.消除取值重复的行在SELECT子句中使用DISTINCT短语SELECTSnoFROMSCSELECT

DISTINCTSno

FROMSC例6(续)

DISTINCT短语的作用范围:注意所有目标列例:查询选修课程的各种成绩错误的写法:SELECTDISTINCTCno,DISTINCTScoreFROMSC;正确的写法:SELECTDISTINCTCno,ScoreFROMSC;

2.查询满足条件的元组WHERE子句常用的查询条件如下:查询条件

谓词比较=><>=<=!=<>!>!<NOT+上述比较运算符确定范围BetweenAnd,NotBetweenAnd确定集合In,NotIn字符匹配Like,NotLike空值IsNull,IsNotNull多重条件And,Or(1)比较大小[例7]查询英语系所有学生的名单。SELECTSnameFROMStudentWHERESdept=‘英语系’;(1)比较大小[例8]查询考试成绩不及格的学生的学号和成绩。

SELECTSno,GradeFROMSCWHEREGrade<60;

(2)确定范围使用谓词BETWEEN…AND…NOTBETWEEN…AND

…[例9]查询成绩在80~100岁(包括80和100)之间的学生的学号,课程号和成绩。SELECTSno,Cno,GradeFROMSCWHEREGradeBETWEEN80AND100;

例题(续)[例10]查询成绩不在80~100岁之间学生的学号,课程号和成绩。SELECTSno,Cno,GradeFROMSCWHEREGradeNOTBETWEEN80AND100;

(3)确定集合[例11]查询化学系、计算机系学生的学号,姓名和性别。使用谓词IN<值表>,NOTIN<值表>值表:用逗号分隔的一组取值SELECTSno,Sname,SsexFROMStudentWHERESdeptIN(‘化学系’,’计算机系’);(3)确定集合[例12]查询既不是化学系,也不是计算机系的学生的学号,姓名和性别。SELECTSno,Sname,SsexFROMStudent WHERESdeptNOTIN(‘化学系’,’计算机系’);(4)字符串匹配使用谓词[NOT]Like‘<匹配串>’[Escape‘<换码字符>’]<匹配串>:可以是一个完整的字符串,

也可以含有通配符

%和

_(4)字符串匹配%:代表任意长度的字符串(长度可以为0)a%b:以a开头,以b结尾的任意长度的字符串例如:acb,addgb,ab_:代表任意单个字符a_b:以a开头,以b结尾的长度为3的任意字符串例如:acb,afb等都满足该匹配串,但是abbhb则不满足该匹配串。ESCAPE短语:当用户要查询的字符串本身就含有%或_时,要使用ESCAPE'<换码字符>'

短语对通配符进行转义。例题:匹配串为固定字符串

[例13]查询学号为20040106的学生的详细情况。等价于:SELECT*FROMStudentWHERESno=‘20040106';SELECT*FROMStudentWHERESnoLIKE‘20040106’;注意:当Like后的匹配串中不含通配符时,可用=

代替Like谓词,用

!=

代替NotLike。例题:匹配串中含通配符[例14]查询所有姓金学生的姓名、学号和性别.SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE‘金%’;例题:匹配串中含通配符SELECTSnameFROMStudentWHERESnameLIKE‘金__’;[例15]查询姓“金"且全名为三个汉字的学生的姓名.例题:匹配串中含通配符[例16]查询所有不姓金的学生姓名。SELECTSnameFROMStudentWHERESnameNOTLIKE‘金%’

;用换码字符将通配符转义为普通字符

[例17]假设有门课程叫DB_Design,查询该课程的课程号和学分。

SELECTCno,CcreditFROMCourseWHERECnameLIKE'DB\_Design'

ESCAPE‘\’

;(5)涉及空值的查询使用谓词ISNULL

或ISNOTNULL“ISNULL”不能用“=NULL”代替(5)涉及空值的查询[例18]某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。

SELECTSno,CnoFROMSCWHEREGradeISNULL;Grade=NULL;×例题(续)

[例19]查所有有成绩的学生学号和课程号。

SELECTSno,CnoFROMSCWHEREGradeISNOTNULL;(6)多重条件查询当查询条件多于一个时,可以用逻辑运算符AND

和OR来联结多个查询条件

AND的优先级高于OR

可以用括号改变优先级可用来表示多种其他谓词

[NOT]IN

[NOT]BETWEEN…AND…(6)多重条件查询[例20]查询成绩在90~100直接的学生学号。

SELECTSnoFROMSCWHEREGrade>=90ANDGrade<100;

三、对查询结果排序排序使用ORDERBY

子句当排序列含有空值时ASC:排序列为空值的元组最后显示DESC:排序列为空值的元组最先显示对查询结果排序(续)[例21]查询选修了280010号课程的学生的学号及其成绩,查询结果按分数降序排列。

SELECTSno,Grade

FROMSC

WHERECno='280010'

ORDERBYGradeDESC;四、使用集函数SQL提供了以下集函数:

COUNT([DISTINCT|ALL]*)

COUNT([DISTINCT|ALL]<列名>)

SUM([DISTINCT|ALL]<列名>)

AVG([DISTINCT|ALL]<列名>)

MAX([DISTINCT|ALL]<列名>)

MIN([DISTINCT|ALL]<列名>)PS:DISTINCT指在计算时取消指定列中的重复值。ALL不取消重复值(默认值)。使用集函数(续)[例22]查询学生总人数。

SELECTCOUNT(*)FROMStudent;[例23]查询选修了课程的学生人数。

SELECTCOUNT(DISTINCTSno)FROMSC;注:用DISTINCT以避免重复计算学生人数使用集函数(续)[例24]计算1号课程的学生平均成绩。[例25]查询选修1号课程的学生最高分数。

SELECTAVG(Grade)FROMSCWHERECno='280010';

SELECTMAX(Grade)FROMSCWHERCno='280010';五、对查询结果分组使用GROUPBY

子句分组分组的依据:将查询结果按照某一列或者多列值分组,值相等的为一组,例如按系统计学生人数分组的目的:对查询结果分组后,集函数将分别作用于每个组,即每一组都有一个函数值使用GROUPBY子句分组[例26]求各个系相应的学生人数。结果:SELECTSdeptas系名,COUNT(Sno)as学生人数

FROMStudent

GROUPBYSdept;

使用HAVING短语筛选最终输出结果[例27]查询选修了3门以上课程的学生学号。

SELECTSnoFROMSC

GROUPBYSno

HAVINGCOUNT(*)>3

例题[例28]查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数。SELECTSno,COUNT(*)FROMSCWHEREGrade>=80GROUPBYSnoHAVINGCOUNT(*)>=3;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论