1、数据库系统原理 厦门大学计算机科学系 林子雨 2017版 计算机科学系 2017版厦门大学厦门大学第第3章章 关系数据库标准语言关系数据库标准语言SQL(2017版)版)数据库系统原理数据库系统原理数据库系统原理 厦门大学计算机科学系 林子雨 2017版提纲n3.1 SQL概述概述n3.2 学生学生-课程数据库课程数据库n3.3 数据定义数据定义n3.4 数据查询数据查询n3.5 数据更新数据更新n3.6 视图视图数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.1 SQL概述 3.1.1 SQL的产生与发展的产生与发展 3.1.2 SQL的特点的特点 3.1.3 SQL的基本概念的
2、基本概念数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.1.1 SQL的产生与发展 1974年,由Boyce和Chamberlin提出,并在IBM公司研制的关系数据库管理系统原型System R 上实现 1986年10月,美国国家标准局的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准,并公布了SQL标准文本 1987年,国际标准化组织通过这一标准数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.1.2 SQL的特点SQL的特点的特点n 1.综合统一n 2.高度非过程化n 3.面向集合的操作方式n 4.以同一种语法结构提供两种使用方法n 5.语言简洁,易学易用
3、数据库系统原理 厦门大学计算机科学系 林子雨 2017版1、综合统一(操纵三级模式)SQL视图1视图2基表1基表2基表3基表4存储文件1存储文件2外模式模式内模式数据库系统原理 厦门大学计算机科学系 林子雨 2017版5、语言简捷,易学易用表语言的动词SQL 功 能动 词数 据 定 义CREATE,DROP,ALTER数 据 查 询SELECT数 据 操 纵数 据 控 制GRANT,REVOKE3.1 SQLINSERT,UPDATE,DELETE数据库系统原理 厦门大学计算机科学系 林子雨 2017版第3章 关系数据库标准语言SQL 3.1 SQL概述概述 3.2 学生学生-课程数据库课程数
4、据库 3.3 数据定义数据定义 3.4 数据查询数据查询 3.5 数据更新数据更新 3.6 视图视图数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.2 学生-课程数据库学生学生-课程数据库课程数据库 学生表:学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:学生选课表:SC(Sno,Cno,Grade)数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.2 学生-课程数据库学 号Sno姓 名Sname性 别Ssex年 龄Sage所 在 系Sdept95001李勇
5、男20CS95002刘晨女19IS95003王敏女18MA95004张立男19IS Student(a)数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.2 学生-课程数据库课程号课程名先行课学分CnoCnameCpnoCcredit1数据库542数学 23信息系统144操作系统635数据结构746数据处理 27PASCAL语言64Course(b)数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.2 学生-课程数据库学 号课 程 号成 绩SnoCnoGrade9500119295001285950013889500229095002380SC(c)数据库系统原理 厦门大学
6、计算机科学系 林子雨 2017版提纲 3.1 SQL概述概述 3.2 学生学生-课程数据库课程数据库 3.3 数据定义数据定义 3.4 数据查询数据查询 3.5 数据更新数据更新 3.6 视图视图数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3 数据定义 3.3.1 模式的定义与删除模式的定义与删除 3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改 3.3.3 索引的建立与删除索引的建立与删除数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3 数据定义表表3.2 SQL的的数数据据定定义义语语句句操操 作作 方方 式式操操 作作 对对象象创创 建建删删 除
7、除修修 改改表表CREATET ABLEDROPT ABLEALTERT ABLE视视 图图CREATEVIEWDROP VIEW索索 引引CREATEINDEXDROPINDEX数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3 数据定义 3.3.1 模式的定义与删除模式的定义与删除 3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改 3.3.3 索引的建立与删除索引的建立与删除数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3.1 模式的定义与删除一、定义模式一、定义模式 CREATE SCHEMA AUTHORIZATION Ps:1、若没有指定、若没有
8、指定,那么,那么隐含为隐含为2、要创建模式,调用该命令的用户必须具有、要创建模式,调用该命令的用户必须具有DBA权限,或者权限,或者获得了获得了DBA授予的授予的CREATE SCHEMA的权限的权限数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题例例1 定义一个学生定义一个学生-课程模式课程模式S-TCREATE SCHEMA“S-T”AUTHORIZATION WANG;为用户为用户“WANG”定义了一个模式定义了一个模式S-T数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3.1 模式的定义与删除二、删除模式二、删除模式 DROP SCHEMA 其中其中CASCA
9、DE和和RESTRICT两者必选其一两者必选其一1、CASCADE(级联),表示在删除模式同时把该模式中所(级联),表示在删除模式同时把该模式中所有的数据库对象全部一起删除有的数据库对象全部一起删除2、RESTRICT(限制),表示若该模式下已定义了下属的数(限制),表示若该模式下已定义了下属的数据库对象,则拒绝删除据库对象,则拒绝删除数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题例例4 删除模式删除模式ZHANGDROP SCHEMA ZHANG CASCADE数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3 数据定义 3.3.1 模式的定义与删除模式的定义与删除
10、 3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改 3.3.3 索引的建立与删除索引的建立与删除数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3.2 基本表的定义、删除与修改一、定义基本表一、定义基本表 :所要定义的基本表的名字:所要定义的基本表的名字:组成该表的各个属性(列):组成该表的各个属性(列):涉及相应属性列的完整性约束条件:涉及相应属性列的完整性约束条件:涉及一个或多个属性列的完整性约束条件:涉及一个或多个属性列的完整性约束条件CREATE TABLE (,);数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题例例1 建立一个建立一个“学生学生”
11、表表Student,它由学号,它由学号Sno、姓名、姓名Sname、性别、性别Ssex、年龄、年龄Sage、所在系、所在系Sdept五个属性组成。其中学号是主键,并且姓名五个属性组成。其中学号是主键,并且姓名取值也唯一。取值也唯一。CREATE TABLE Student (Sno CHAR(5)primary key,Sname CHAR(8)UNIQUE,Ssex CHAR(2),Sage INT,Sdept CHAR(10);数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)SnoSnameSsexSageSdept 字符型 字符型 字符型 整数 字符型长度为5 长度为8
12、 长度为2 长度为10不能为空值数据库系统原理 厦门大学计算机科学系 林子雨 2017版定义基本表(续)常用完整性约束常用完整性约束 主码约束:主码约束:PRIMARY KEY 唯一性约束:唯一性约束:UNIQUE 非空值约束:非空值约束:NOT NULL 参照完整性约束参照完整性约束PRIMARY KEY与与 UNIQUE的区别?的区别?数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)例例2 建立一个建立一个“学生选课学生选课”表表SC,它,它由学号由学号Sno、课程号、课程号Cno,修课成绩,修课成绩Grade组成,其中组成,其中(Sno,Cno)为主码。为主码。CREA
13、TE TABLE SC(Sno CHAR(5),Cno CHAR(3),Grade int,Primary key(Sno,Cno);数据库系统原理 厦门大学计算机科学系 林子雨 2017版二、修改基本表ALTER TABLE ADD 完整性约束完整性约束 DROP ALTER COLUMN DROP COLUMN ;n:要修改的基本表nADD子句:增加新列和新的完整性约束条件nDROP子句:删除指定的完整性约束条件nALTER COLUMN子句:用于修改列名和数据类型nDROP COLUMN子句:用于删除列数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题例例2 向向Student
14、表增加表增加“入学时间入学时间”列,其数列,其数据类型为日期型。据类型为日期型。ALTER TABLE Student ADD Scome DATETIME;n不论基本表中原来是否已有数据,新增加的列一律为空值。数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题例例3 将入学日期的数据类型改为字符型。将入学日期的数据类型改为字符型。ALTER TABLE Student ALTER COLUMN Scome char(8);n注:修改原有的列定义有可能会破坏已有数据数据库系统原理 厦门大学计算机科学系 林子雨 2017版语句格式(续)删除属性列删除属性列例例4 将入学日期列删除掉。将
15、入学日期列删除掉。ALTER TABLE Student DROP COLUMN Scome 数据库系统原理 厦门大学计算机科学系 林子雨 2017版三、删除基本表 DROP TABLE;基本表删除基本表删除数据、表上的索引数据、表上的索引 自动都删除自动都删除数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题例例5 删除删除SC表表DROP TABLE SC;数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3 数据定义 3.3.1 模式的定义与删除模式的定义与删除 3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改 3.3.3 索引的建立与删除索引的建立与删除
16、数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.3.3 索引的建立与删除 建立索引是加快查询速度的有效手段建立索引是加快查询速度的有效手段 建立索引建立索引 DBA或表的属主(即建立表的人)根据需要建立或表的属主(即建立表的人)根据需要建立 有些有些DBMS自动建立以下列上的索引自动建立以下列上的索引 PRIMARY KEY UNIQUE 维护索引维护索引 DBMS自动完成自动完成 使用索引使用索引 DBMS自动选择是否使用索引以及使用哪些索引自动选择是否使用索引以及使用哪些索引数据库系统原理 厦门大学计算机科学系 林子雨 2017版一、建立索引 语句格式语句格式CREATE UN
17、IQUE CLUSTER INDEX ON(,);nn用指定要建索引的基本表名字n索引可以建立在该表的一列或多列上,各列名之间用逗号分隔n用指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASCnUNIQUE表明此索引的每一个索引值只对应唯一的数据记录nCLUSTER表示要建立的索引是聚簇索引数据库系统原理 厦门大学计算机科学系 林子雨 2017版建立索引(续)唯一值索引唯一值索引 对于已含重复值的属性列不能建对于已含重复值的属性列不能建UNIQUE索引索引 对某个列建立对某个列建立UNIQUE索引后,插入新记录时索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复会自
18、动检查新记录在该列上是否取了重复值。这相当于增加了一个值。这相当于增加了一个UNIQUE约束约束数据库系统原理 厦门大学计算机科学系 林子雨 2017版建立索引(续)聚簇索引聚簇索引 建立聚簇索引后,基表中数据也需要按指定的建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致的索引项顺序与表中记录的物理顺序一致例:例:CREATE CLUSTER INDEX Stusname ON Student(Sname);在在Student表的表的Sname(姓名)列上建立一个聚簇索引,而(姓名)列上
19、建立一个聚簇索引,而且且Student表中的记录将按照表中的记录将按照Sname值的升序存放值的升序存放 数据库系统原理 厦门大学计算机科学系 林子雨 2017版建立索引(续)在一个基本表上最多只能建立一个聚簇索引在一个基本表上最多只能建立一个聚簇索引 聚簇索引的用途:对于某些类型的查询,可聚簇索引的用途:对于某些类型的查询,可以提高查询效率以提高查询效率 聚簇索引的适用范围聚簇索引的适用范围 很少对基表进行增删操作很少对基表进行增删操作 很少对其中的变长列进行修改操作很少对其中的变长列进行修改操作 聚簇索引的不适用情形聚簇索引的不适用情形 表记录太少 经常插入、删除、修改的表 数据分布平均的
20、表字段数据库系统原理 厦门大学计算机科学系 林子雨 2017版建立索引(续)在下列三种情况下,有必要建立簇索引:(1)查询语句中采用该字段作为排序列(2)需要返回局部范围的大量数据(3)表格中某字段内容的重复性比较大例如,student表中dno(系号)一列有大量重复数据,当在dno列上建立了簇索引后,下面的连接查询速度会加快。数据库系统原理 厦门大学计算机科学系 林子雨 2017版建立索引(续)多列索引和多个单列索引考虑两种不同的建立索引方式:case 1:对c1,c2,c3三列按此顺序添加一个多列索引;case 2:对c1,c2,c3分别建立三个单列索引;问题1:按c1搜索时,哪种索引效率
21、快?答:case2问题2:按C2搜索时,哪种索引效率快?答:case2,并且,case1的索引无效问题3:按C1,C2,C3搜索哪种效率快?答:case1问题4:按C2,C3,C1搜索时哪种效率快?答:case2,因为没有按多列索引的顺序搜索,case1的索引没有使用到。覆盖查询简单的说就是所有查询列被所使用的索引覆盖的查询覆盖查询简单的说就是所有查询列被所使用的索引覆盖的查询数据库系统原理 厦门大学计算机科学系 林子雨 2017版建立索引(续)如何去建立一个多列索引,最重要的一个问题是如何安排列的顺序是至关重要的比如需要对一个表tb里面的两个字段foo,bar建一个索引,那么索引的顺序是(f
22、oo,bar)还是(bar,foo)呢假设tb表有1700条记录,foo字段有750个不同的记录,那么foo字段上的cardinality是750。总规则可以说是cardinality越大的字段应该排在索引的第一位就是说索引的位置是(foo,bar),因为cardinality越大那么第一次取出来的记录集就越小,再进行第二次查询的次数就越少了。数据库系统原理 厦门大学计算机科学系 林子雨 2017版建立索引(续)当在同一表格中建立簇索引和非簇索引时,先建立簇索引后建非簇索引比较好。因为如先建非簇索引的话,当建立簇索引时,SQL Server会自动将非簇索引删除,然后重新建立非簇索引。每个表仅可
23、以有一个簇索引,最多可以有249个非簇索引。它们均允许以一个或多个字段作为索引关键字(Index Key),但最多只能有16个字段。SQL Server只对那些能加快数据查询速度的索引才能被选用。如果利用索引检索还不如顺序扫描速度快,SQL Server仍用扫描方法检索数据。建立不能被采用的索引只会增加系统的负担,降低检索速度。因此,可利用性是建立索引的首要条件。数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题 例例6 为学生为学生-课程数据库中的课程数据库中的Student,Course,SC三个表建立索引。其中三个表建立索引。其中Student表按学号升序建唯一表按学号升序建唯
24、一索引,索引,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);数据库系统原理 厦门大学计算机科学系 林子雨 2017版二、删除索引 DROP INDEX;删除索引时,系统会从数据字典中删去有关删除索引时,系统会从数据字典中删去有关该索引的描
25、述。该索引的描述。例例7 删除删除Student表的表的Stusname索引。索引。DROP INDEX Student.Stusname;数据库系统原理 厦门大学计算机科学系 林子雨 2017版第3章 关系数据库标准语言SQL 3.1 SQL概述概述 3.2 学生学生-课程数据库课程数据库 3.3 数据定义数据定义 3.4 数据查询数据查询 3.5 数据更新数据更新 3.6 视图视图数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.4 查 询 n3.4.1 单表查询单表查询n3.4.2 连接查询连接查询n3.4.3 嵌套查询嵌套查询n3.4.4 集合查询集合查询n3.4.5 SEL
26、ECT 语句的一般格式语句的一般格式 数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.4 查 询 语句格式语句格式SELECT ALL|DISTINCT ,FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC ;数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.4 查 询 SELECT子句子句:指定要显示的属性列:指定要显示的属性列 FROM子句子句:指定查询对象:指定查询对象(基本表或视图基本表或视图)WHERE子句子句:指定查询条件:指定查询条件 GROUP BY子句子句:对查询结果按指定列的:对查询结果按指定列的值分组,该属性列值
27、相等的元组为一个组。值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。通常会在每组中作用集函数。HAVING短语短语:筛选出只有满足指定条件的:筛选出只有满足指定条件的组组 ORDER BY子句子句:对查询结果表按指定列:对查询结果表按指定列值的升序或降序排序值的升序或降序排序 数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.4 查 询 n3.4.1 单表查询单表查询n3.4.2 连接查询连接查询n3.4.3 嵌套查询嵌套查询n3.4.4 集合查询集合查询n3.4.5 SELECT 语句的一般格式语句的一般格式 数据库系统原理 厦门大学计算机科学系 林子雨 2017版
28、3.4.1 单表查询 查询仅涉及一个表,是一种最简单的查询操作查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列一、选择表中的若干列二、选择表中的若干元组二、选择表中的若干元组三、对查询结果排序三、对查询结果排序四、使用集函数四、使用集函数五、对查询结果分组五、对查询结果分组 数据库系统原理 厦门大学计算机科学系 林子雨 2017版查询指定列例例1 查询全体学生的学号与姓名。查询全体学生的学号与姓名。SELECT Sno,SnameFROM Student;例例2 查询全体学生的姓名、学号、所在系。查询全体学生的姓名、学号、所在系。SELECT Sname,Sno,SdeptFROM
29、 Student;数据库系统原理 厦门大学计算机科学系 林子雨 2017版查询全部列例例3 查询全体学生的详细记录。查询全体学生的详细记录。SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;或或SELECT *FROM Student;数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.查询经过计算的值 SELECT子句的子句的为表达式为表达式 算术表达式算术表达式 字符串常量字符串常量 函数函数 列别名列别名 等等 数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.查询经过计算的值例例4 查全体学生的姓名及其出生年份。查全体学生的姓
30、名及其出生年份。SELECT Sname,2011-SageFROM Student;数据库系统原理 厦门大学计算机科学系 林子雨 2017版3.查询经过计算的值例例5 查询全体学生的姓名、出生年份和查询全体学生的姓名、出生年份和所在系。在出生年份前面增加一个说明所在系。在出生年份前面增加一个说明,在系名称后面增加一个,在系名称后面增加一个“系系”作为表作为表示示SELECT Sname,出生年份出生年份:,2011-Sage,Sdept +系系FROM Student;数据库系统原理 厦门大学计算机科学系 林子雨 2017版例5.1 使用列别名改变查询结果的列标题SELECT Sname 姓
31、名姓名,Year of Birth:生日标识生日标识,2011-Sage 生日生日,Sdept+系系 系名系名FROM Student;数据库系统原理 厦门大学计算机科学系 林子雨 2017版二、选择表中的若干元组 消除取值重复的行消除取值重复的行 查询满足条件的元组查询满足条件的元组 数据库系统原理 厦门大学计算机科学系 林子雨 2017版1.消除取值重复的行在在SELECT子句中使用子句中使用DISTINCT短语短语假设假设SC表中有下列数据表中有下列数据 Sno Cno Grade -95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3
32、80数据库系统原理 厦门大学计算机科学系 林子雨 2017版ALL 与 DISTINCT 例例6 查询选修了课程的学生学号。查询选修了课程的学生学号。(1)SELECT Sno FROM SC;或或(默认默认 ALL)SELECT ALL Sno FROM SC;(2)SELECT DISTINCT Sno FROM SC;数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)注意注意 DISTINCT短语的作用范围是所有目标列短语的作用范围是所有目标列例:查询选修课程的各种成绩例:查询选修课程的各种成绩错误的写法错误的写法SELECT DISTINCT Cno,DISTINCT
33、GradeFROM SC;正确的写法正确的写法 SELECT DISTINCT Cno,Grade FROM SC;数据库系统原理 厦门大学计算机科学系 林子雨 2017版2.查询满足条件的元组表表3.3 常用的查询条件常用的查询条件查查 询询 条条 件件谓谓 词词比比 较较=,=,=,!=,!,!;NOT +上述比较运算符上述比较运算符确定范围确定范围BETWEEN AND,NOT BETWEEN AND确定集合确定集合IN,NOT IN字符匹配字符匹配LIKE,NOT LIKE空空 值值IS NULL,IS NOT NULL多重条件多重条件AND,ORWHERE子句常用的查询条件子句常用的
34、查询条件数据库系统原理 厦门大学计算机科学系 林子雨 2017版(1)比较大小在在WHERE子句的子句的中使用比较运算符中使用比较运算符l=,=,=,!=或或,!,!,l 逻辑运算符逻辑运算符NOT +比较运算符比较运算符例例8 查询所有年龄在查询所有年龄在20岁以下的学生姓名及其年龄。岁以下的学生姓名及其年龄。SELECT Sname,Sage FROM Student WHERE Sage=20;数据库系统原理 厦门大学计算机科学系 林子雨 2017版(2)确定范围 使用谓词使用谓词 BETWEEN AND NOT BETWEEN AND 例例10 查询年龄在查询年龄在2023岁(包括岁(
35、包括20岁和岁和23岁)岁)之间的学生的姓名、系别和年龄之间的学生的姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23;数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)例例11 查询年龄不在查询年龄不在2023岁之间的学生姓名、岁之间的学生姓名、系别和年龄。系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage NOT BETWEEN 20 AND 23;数据库系统原理 厦门大学计算机科学系 林子雨 2017版(3)确定集合使用谓词使用
36、谓词 IN,NOT IN :用逗号分隔的一组取值用逗号分隔的一组取值例例12查询信息系(查询信息系(IS)和计算机科学系)和计算机科学系(CS)学生的姓名和性别。)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN(IS,CS );数据库系统原理 厦门大学计算机科学系 林子雨 2017版(3)确定集合例例13查询既不是信息系又不是计算查询既不是信息系又不是计算 机科学系的学生的姓名和性别。机科学系的学生的姓名和性别。SELECT Sname,SsexFROM Student WHERE Sdept NOT IN(IS,CS);数据库系统原理
37、 厦门大学计算机科学系 林子雨 2017版(4)字符串匹配 NOT LIKE ESCAPE :指定匹配模板:指定匹配模板 匹配模板:固定字符串或含通配符的字符串匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时,当匹配模板为固定字符串时,可以用可以用=运算符取代运算符取代 LIKE 谓词谓词 用用!=或或 运算符取代运算符取代 NOT LIKE 谓词谓词数据库系统原理 厦门大学计算机科学系 林子雨 2017版通配符w%(百分号百分号)代表任意长度(长度可以为代表任意长度(长度可以为0)的字符串)的字符串 例:例:a%b表示以表示以a开头,以开头,以b结尾的任意长度的字符结尾的任意
38、长度的字符串。如串。如acb,addgb,ab 等都满足该匹配串等都满足该匹配串 _(下横线下横线)代表任意单个字符代表任意单个字符 例:例:a_b表示以表示以a开头,以开头,以b结尾的长度为结尾的长度为3的任意的任意字符串。如字符串。如acb,afb等都满足该匹配串等都满足该匹配串数据库系统原理 厦门大学计算机科学系 林子雨 2017版ESCAPE 短语:当用户要查询的字符串本身就含有当用户要查询的字符串本身就含有%或或 _ 时,要使用时,要使用ESCAPE 短语对通配符进行转义。短语对通配符进行转义。数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题1)匹配模板为固定字符串匹配模
39、板为固定字符串 例例14 查询学号为查询学号为95001的学生的详细情况。的学生的详细情况。SELECT*FROM Student WHERE Sno LIKE 95001;等价于:等价于:SELECT *FROM Student WHERE Sno=95001;数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)2)匹配模板为含通配符的字符串匹配模板为含通配符的字符串例例15 查询所有姓刘学生的姓名、学号和性别。查询所有姓刘学生的姓名、学号和性别。SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘刘%;数据库系统原理 厦门
40、大学计算机科学系 林子雨 2017版例题(续)匹配模板为含通配符的字符串(续)匹配模板为含通配符的字符串(续)例例16 查询姓查询姓“刘刘且全名为三个汉字的学且全名为三个汉字的学生的姓名。生的姓名。SELECT Sname FROM Student WHERE Sname LIKE 刘刘_;备注:这里有两个_数据库系统原理 厦门大学计算机科学系 林子雨 2017版关于SQL Server 2008字符集SELECT COLLATIONPROPERTY(Chinese_PRC_Stroke_CI_AI_KS_WS,CodePage)查询结果:936 简体中文GBK 950 繁体中文BIG5 43
41、7 美国/加拿大英语 932 日文 949 韩文 866 俄文 65001 unicode UFT-8数据库字符集为ASCII时,一个汉字需要两个_;当数据库字符集为GBK时,一个汉字只需要一个_数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)匹配模板为含通配符的字符串(续)匹配模板为含通配符的字符串(续)例例17 查询名字中第查询名字中第2个字为个字为“敏敏”字的学生字的学生的姓名和学号。的姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname LIKE _敏敏%;数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)例例
42、18 查询所有不姓刘的学生姓名。查询所有不姓刘的学生姓名。SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE 刘刘%;数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)3)使用换码字符将通配符转义为普通字符使用换码字符将通配符转义为普通字符 例例19 查询课程名称中包含查询课程名称中包含“面向对象面向对象_C+课程课程”的课程号和学分。的课程号和学分。SELECT Cno,Ccredit FROM Course WHERE Cname LIKE%面向对象面向对象_C+%数据库系统原理 厦门大学计算机科学系 林子雨 20
43、17版例题(续)SELECT Cno,Ccredit FROM Course WHERE Cname LIKE%面向对象面向对象 _C+%ESCAPE 数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题(续)使用换码字符将通配符转义为普通字使用换码字符将通配符转义为普通字符符(续续)例例20 查询以查询以DB_开头,且倒数第开头,且倒数第3个个字符为字符为 i的课程的详细情况。的课程的详细情况。SELECT *FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE ;数据库系统原理 厦门大学计算机科学系 林子雨 2017版(5)涉及空值的查询 使用谓
44、词使用谓词 IS NULL 或或 IS NOT NULL “IS NULL”不能用不能用“=NULL”代替代替例例21 有些课没有先修课程。查询没有先修课有些课没有先修课程。查询没有先修课程的课程名称。程的课程名称。Select CnameFrom CourseWhere Cpno IS NULL数据库系统原理 厦门大学计算机科学系 林子雨 2017版(6)多重条件查询用逻辑运算符用逻辑运算符AND和和 OR来联结多个查询条件来联结多个查询条件 AND的优先级高于的优先级高于OR 可以用括号改变优先级可以用括号改变优先级可用来实现多种其他谓词可用来实现多种其他谓词 NOT IN NOT BET
45、WEEN AND 数据库系统原理 厦门大学计算机科学系 林子雨 2017版例题例例23 查询计算机系年龄在查询计算机系年龄在20岁以下的学生姓名。岁以下的学生姓名。SELECT Sname FROM Student WHERE Sdept=CS AND Sage=20 AND Sage=23;数据库系统原理 厦门大学计算机科学系 林子雨 2017版三、对查询结果排序 使用使用ORDER BY子句子句 可以按一个或多个属性列排序可以按一个或多个属性列排序 升序:升序:ASC;降序:;降序:DESC;缺省值为升序;缺省值为升序当排序列含空值时当排序列含空值时空值的显示顺序由具体系统实现来决定空值的
46、显示顺序由具体系统实现来决定例如按升序排,含空值的元组最后显示例如按升序排,含空值的元组最后显示按降序排,空值的元组最先显示按降序排,空值的元组最先显示各个系统的实现可以不同,只要保持一致即可各个系统的实现可以不同,只要保持一致即可数据库系统原理 厦门大学计算机科学系 林子雨 2017版对查询结果排序(续)例例24 查询选修了查询选修了3号课程的学生的学号号课程的学生的学号及其成绩,查询结果按分数降序排列。及其成绩,查询结果按分数降序排列。SELECT Sno,Grade FROM SC WHERE Cno=3 ORDER BY Grade DESC;数据库系统原理 厦门大学计算机科学系 林子
47、雨 2017版对查询结果排序(续)例例25 查询全体学生情况,查询结果按所查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生在系的系号升序排列,同一系中的学生按年龄降序排列。按年龄降序排列。SELECT *FROM Student ORDER BY Sdept,Sage DESC;数据库系统原理 厦门大学计算机科学系 林子雨 2017版四、使用集函数 5类主要聚集函数类主要聚集函数 计数计数COUNT(DISTINCT|ALL*)COUNT(DISTINCT|ALL)计算总和计算总和SUM(DISTINCT|ALL)计算平均值计算平均值AVG(DISTINCT|ALL)数据库系统
48、原理 厦门大学计算机科学系 林子雨 2017版使用集函数(续)求最大值求最大值MAX(DISTINCT|ALL)求最小值求最小值MIN(DISTINCT|ALL)DISTINCT短语:在计算时要取消指定列中短语:在计算时要取消指定列中的重复值的重复值 ALL短语:不取消重复值短语:不取消重复值 ALL为缺省值为缺省值数据库系统原理 厦门大学计算机科学系 林子雨 2017版使用集函数(续)例例26 查询学生总人数。查询学生总人数。例例27 查询选修了课程的学生人数。查询选修了课程的学生人数。SELECT COUNT(DISTINCT Sno)FROM SC;注:用注:用DISTINCT以避免重复
49、计算学生人数以避免重复计算学生人数 SELECT COUNT(*)FROM Student;数据库系统原理 厦门大学计算机科学系 林子雨 2017版使用集函数(续)例例28 计算计算2号课程的学生平均成绩。号课程的学生平均成绩。例例29 查询选修查询选修3号课程的学生最高分数。号课程的学生最高分数。SELECT AVG(Grade)FROM SC WHERE Cno=2;SELECT MAX(Grade)FROM SC WHER Cno=3;数据库系统原理 厦门大学计算机科学系 林子雨 2017版五、对查询结果分组 使用使用GROUP BY子句分组子句分组 细化聚集函数的作用对象细化聚集函数的
50、作用对象 未对查询结果分组,聚集函数将作用于整未对查询结果分组,聚集函数将作用于整个查询结果个查询结果 对查询结果分组后,聚集函数将分别作用对查询结果分组后,聚集函数将分别作用于每个组于每个组 数据库系统原理 厦门大学计算机科学系 林子雨 2017版使用GROUP BY子句分组例例30 求各个课程号及相应的选课人数。求各个课程号及相应的选课人数。SELECT Cno,COUNT(Sno)FROM SC GROUP BY Cno;数据库系统原理 厦门大学计算机科学系 林子雨 2017版使用GROUP BY子句分组O_IdOrderDateOrderPriceCustomer12008/12/29