《第03章 关系数据库标准语言 (1).ppt》由会员分享,可在线阅读,更多相关《第03章 关系数据库标准语言 (1).ppt(150页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第03章关系数据库标准语言(1)第三章第三章 关系数据库标准语言关系数据库标准语言SQLSQL3.1 SQL概述3.2 数据定义3.3 查询3.4 数据更新3.5 视图第3章 小结23.SQL3.SQL的特点的特点综合统一综合统一集集DDLDDL,DMLDML,DCLDCL于一体,语言风格统一,操作符统一于一体,语言风格统一,操作符统一高度非过程化高度非过程化用户只需提出用户只需提出“做什么做什么”,无须告诉,无须告诉“怎么做怎么做”,不必了,不必了解存取路径解存取路径面向集合的操作方式面向集合的操作方式一次一集合,操作方式、操作对象、结果均为集合一次一集合,操作方式、操作对象、结果均为集合一
2、种语法结构,两种使用方式一种语法结构,两种使用方式SQLSQL既是自含式语言(用户使用),既是自含式语言(用户使用),又是嵌入式语言(程序员使用)又是嵌入式语言(程序员使用)语言简洁,易学易用:语言简洁,易学易用:在语言上接近英语在语言上接近英语3.1 SQL3.1 SQL概述概述64.SQL4.SQL对关系数据库的支持对关系数据库的支持 即即SQLSQL对象与三级模式结构的对应关系对象与三级模式结构的对应关系3.1 SQL3.1 SQL概述概述存储文件存储文件1 1存储文件存储文件2 2基本表基本表1 1基本表基本表2 2基本表基本表3 3SQL视图视图1 1视图视图2 2外模式模式内模式关
3、系模型关系模型 SQL SQL-外模式外模式-视图视图(VIEW)模式模式-基本表基本表(TABLE)内模式内模式-存储文件存储文件_索引索引基本表基本表是本身独立存在的表,是本身独立存在的表,一个表带若干一个表带若干索引。索引。一个或多个基本表对应一一个或多个基本表对应一个个存储文件存储文件,它的物理结,它的物理结构对用户来说是透明的。构对用户来说是透明的。视图视图是从一个或多个基本表是从一个或多个基本表导出的表,不存放数据,是导出的表,不存放数据,是一个一个虚表虚表(数据库中(数据库中只存放只存放视图的定义视图的定义而不存放视图对而不存放视图对应的数据,这些数据仍存放应的数据,这些数据仍存
4、放在导出视图的基本表中,因在导出视图的基本表中,因此视图是一个虚表)。此视图是一个虚表)。视图视图上可以再定义视图。上可以再定义视图。73.1 SQL3.1 SQL概述概述5.SQL5.SQL的功能的功能SQLSQL设计巧妙,设计巧妙,核心功能只需核心功能只需9 9个动词个动词。在语言上接近英语。在语言上接近英语SQL功能操作符操作数据查询数据查询 DML DMLSELECT对基本表、视图进行对基本表、视图进行查询查询数据定义数据定义 DDL DDLCREATEALTERDROP创建创建数据库、基本表、视图、索引数据库、基本表、视图、索引修改修改数据库、基本表、视图数据库、基本表、视图删除删除
5、数据库、基本表、视图、索引数据库、基本表、视图、索引数据操纵数据操纵 DML DMLINSERTUPDATEDELETE在指定表中在指定表中插入插入数据(元组)数据(元组)在指定表中在指定表中修改修改数据数据在指定表中在指定表中删除删除数据数据数据控制数据控制 DCL DCLGRANTREVOKE将指定操作将指定操作权限授予权限授予指定用户指定用户收回权限收回权限8第三章第三章 关系数据库标准语言关系数据库标准语言SQLSQL3.1 SQL概述3.2 数据定义3.3 查询3.4 数据更新3.5 视图第3章 小结93.2 3.2 数据定义数据定义 操作对象操 作 方 式创建删除修改表CREATE
6、 TABLEDROP TABLEAlter Table视图CREATE VIEWDROP VIEWAlter View索引CREATE INDEXDROP INDEXSQLSQL的数据定义功能包括定义表、定义视图和定义索引。的数据定义功能包括定义表、定义视图和定义索引。表表3.2 SQL3.2 SQL的数据定义语句的数据定义语句 103.2 3.2 数据定义(续)数据定义(续)3.2.1 域定义3.2.2 定义基本表3.2.3 修改基本表3.2.4 删除基本表3.2.5 建立与删除索引11SQLServer数据类型说明说明charchar(n n)固定长度的字符串类型固定长度的字符串类型,n
7、n表示字符串的最大长度,取值范围为表示字符串的最大长度,取值范围为1 180008000varcharvarchar(n n)可变长度的字符串类型可变长度的字符串类型,n n表示字符串的最大长度,取值范围为表示字符串的最大长度,取值范围为1 180008000IntInt4 4字节,存储从字节,存储从223131(2,147,483,648)(2,147,483,648)到到2 23131-1 (-1 (2,147,483,647)2,147,483,647)范围的整数范围的整数 smallintsmallint2 2字节,存储从字节,存储从221515(32,768)(32,768)到到2
8、21515-1(32,767)-1(32,767)范围的整数范围的整数numericnumeric(p,qp,q)或)或decimaldecimal(p,qp,q)定点精度和小数位数。使用最大精度时,有效值从定点精度和小数位数。使用最大精度时,有效值从 10 103838+1 +1 到到 10103838-1-1。其中,。其中,p p为精度为精度,指定小数点左边和右边可以存储的十,指定小数点左边和右边可以存储的十进制数字的最大个数。进制数字的最大个数。q q为小数位数为小数位数,指定小数点右边可以存储,指定小数点右边可以存储的十进制数字的最大个数,的十进制数字的最大个数,0=0=q q=p p
9、。q q的默认值为的默认值为0 0floatfloat8 8字节,存储从字节,存储从1.79E+308 1.79E+308 到到 1.79E+308 1.79E+308 范围的浮点型数范围的浮点型数realreal4 4字节,存储从字节,存储从 3.40E+38 3.40E+38 到到 3.40E+38 3.40E+38 范围的浮点范围的浮点型数型数datetimedatetime占用占用8 8字节空间,存储从字节空间,存储从17531753年年1 1月月1 1日到日到99999999年年1212月月3131日的日期和时间数日的日期和时间数据,精确到百分之三秒(或据,精确到百分之三秒(或 3.
10、33 3.33 毫秒)毫秒)3.2.1 3.2.1 域定义域定义121.1.定义语句格式定义语句格式3.2.2 3.2.2 定义基本表定义基本表CREATETABLE(,):所要定义的基本表的名字:所要定义的基本表的名字(在整个数据库中必须唯一在整个数据库中必须唯一):组成该表的各个属性(列):组成该表的各个属性(列)(列名在表中必须唯一列名在表中必须唯一)CREATETABLEstudent(Snochar(9)PRIMARYKEY,-列级完整性约束条件列级完整性约束条件,SnoSno是主码是主码Snamevarchar(20)UNIQUE,-Sname-Sname取唯一值取唯一值Ssexc
11、har(2),Sageint,Sdeptchar(20)SQL serverSQL server中的注中的注释释问题:问题:SnameSname中能保存多少个汉中能保存多少个汉字或英文字母字或英文字母?表示内容为可选的表示内容为可选的133.2.2 3.2.2 定义基本表(续)定义基本表(续)2.2.定义完整性约束定义完整性约束为了维护数据完整性,为了维护数据完整性,DBMSDBMS必须提供一种机制,检查必须提供一种机制,检查DBDB 中的数据是否满足语义规定的条件。中的数据是否满足语义规定的条件。这些这些加在加在DBDB的数据之上的语义约束条件的数据之上的语义约束条件就是就是数据完整性数据完
12、整性 约束条件约束条件,这些条件作为表定义的一部分存储在数据库,这些条件作为表定义的一部分存储在数据库 的数据字典中。的数据字典中。用户操作数据库中的数据时用户操作数据库中的数据时由由DBMSDBMS自动检查数据是否满自动检查数据是否满 足完整性约束条件足完整性约束条件。143.2.2 3.2.2 定义基本表(续)定义基本表(续)2.2.定义完整性约束定义完整性约束定义表的同时,可定义与该表有关的完整性约束条件。定义表的同时,可定义与该表有关的完整性约束条件。:涉及表中涉及表中一个一个属性列属性列的完整性的完整性 约束条件,用于限制该属性列的取值,如约束条件,用于限制该属性列的取值,如 (NO
13、T NULL/UNIQCE/DEFAULTNOT NULL/UNIQCE/DEFAULT等)。等)。在定义列时定义。在定义列时定义。:涉及表中涉及表中多个多个属性列属性列的完整性的完整性 约束条件,用于限制元组中各属性列之间的联系,如约束条件,用于限制元组中各属性列之间的联系,如 (开始日期(开始日期 结束日期、发货数量结束日期、发货数量 0)CREATETABLESC(Snochar(9),Cnochar(10),gradesmallint,PRIMARYKEY(Sno,Cno),FOREIGNKEY(Sno)REFERENCESstudent(Sno),FOREIGNKEY(Cno)REF
14、ERENCEScourse(Cno),CHECK(grade=0andgrade=100)应注意完整性约束的定义1)主码:PRIMARY KEY关键字。2)外码:FOREIGN KEY关键字。3)用户定义:CHECK关键字等。列级完整性约束列级完整性约束表级完整性约束表级完整性约束173.2.2 3.2.2 定义基本表(续)定义基本表(续)4.4.实体完整性约束:用主码约束(实体完整性约束:用主码约束(PRIMARYKEY)来保证)来保证每个表只有一个每个表只有一个PRIMARYKEY约束约束PRIMARYKEY约束的列值集合必须是唯一的且不允许有约束的列值集合必须是唯一的且不允许有空值空值C
15、REATETABLEstudent(Snochar(9)PRIMARYKEY,-主码只有主码只有1 1个属性个属性 )CREATETABLESC(Snochar(9),Cnochar(10),PRIMARYKEY(Sno,Cno),-主码由多个属性构成主码由多个属性构成)列级完整性约束列级完整性约束表级完整性约束表级完整性约束183.2.2 3.2.2 定义基本表(续)定义基本表(续)5.5.参照完整性约束:用外码约束(参照完整性约束:用外码约束(FOREIGNKEY)来保证)来保证FOREIGNKEY(外码外码)REFERENCES(列名列名)外码必须引用有外码必须引用有PRIMARYKEY
16、或或UNIQUE约束的列约束的列CREATETABLESC(Snochar(9),Cnochar(10),FOREIGNKEY(Sno)REFERENCESstudent(Sno),FOREIGNKEY(Cno)REFERENCEScourse(Cno),)SnoCnoGrade95011929501286SCsnoSnameSsexSageSdept9501李勇李勇男男20CS9502刘晨刘晨女女19ISStudentCnoCnameCpnoCcredit1数据库数据库542数学数学2Course193.2.2 3.2.2 定义基本表(续)定义基本表(续)6.6.用户定义完整性约束用户定义完
17、整性约束唯一性约束:唯一性约束:UNIQUE非空值约束:非空值约束:NOTNULL默认值约束:默认值约束:DEFAULTCHECK约束:用于限制列的取值在指定的范围内,或约约束:用于限制列的取值在指定的范围内,或约束同一个表某个元组中多个列之间的取值束同一个表某个元组中多个列之间的取值*一个表中可以在一个列或多个列上定义一个表中可以在一个列或多个列上定义UNIQUE*每个列只有一个每个列只有一个DEFAULT约束,允许使用系统提供的约束,允许使用系统提供的值作为默认值值作为默认值*执行执行INSERT语句或语句或UPDATE语句,系统自动检查语句,系统自动检查CHECK约束,只有在向表中插入数
18、据时才检查约束,只有在向表中插入数据时才检查DEFAULT约束约束206.6.用户定义完整性约束用户定义完整性约束例子例子说明说明Student表的表的Ssex只能取只能取“男男”、“女女”。Ssexchar(2)CHECK(SsexIN(男男,女女)说明说明SC表的表的Grade在在0到到100分之间分之间CHECK(Grade=0andGradeoldvalue)3.2.2 3.2.2 定义基本表(续)定义基本表(续)列级完整性约束列级完整性约束表级完整性约束表级完整性约束213.2.3 3.2.3 修改基本表修改基本表ALTERTABLEADD完整性约束完整性约束DROP|ALTER :
19、要修改的基本表:要修改的基本表ADD子句子句:增加新列和新的完整性约束条件:增加新列和新的完整性约束条件DROP子句子句:删除指定的完整性约束条件或列:删除指定的完整性约束条件或列ALTER子句子句:用于修改列名和数据类型:用于修改列名和数据类型22 例例1 1向向Student表增加表增加“入学时间入学时间”列,其数据类型为日期型列,其数据类型为日期型ALTERTABLEStudentADDSentranceDATETIME不论基本表中原来是否已有数据,新增加的列一律为空值。不论基本表中原来是否已有数据,新增加的列一律为空值。例例2 2删除列删除列ALTERTABLEStudentDropC
20、olumnSentrance 例例3 3将年龄的数据类型由整数改为短整数。将年龄的数据类型由整数改为短整数。ALTERTABLEStudentALTERSageSmallInt注:修改原有的列定义有可能会破坏已有数据注:修改原有的列定义有可能会破坏已有数据 例例4 4增加课程名称必须取唯一值的约束条件。增加课程名称必须取唯一值的约束条件。ALTERTABLECourseADDUNIQUE(Cname)3.2.3 3.2.3 修改基本表(续)修改基本表(续)233.2.4 3.2.4 删除基本表删除基本表DROPTABLE删除基本表时,系统会将与该表有关的所有对象一并删除基本表时,系统会将与该表
21、有关的所有对象一并删除。删除。即表中的数据、表上的索引都删除,即表中的数据、表上的索引都删除,表上的视表上的视图往往仍然保留,但无法引用。图往往仍然保留,但无法引用。例例1111删除删除Student表表DROPTABLEStudent执行删除基本表的操作一定要格外小心!执行删除基本表的操作一定要格外小心!243.2.5 3.2.5 建立与删除索引建立与删除索引 1 索引2 建立索引3 删除索引251.1.索引索引建立索引的目的:建立索引的目的:加快查询速度,提高加快查询速度,提高数据文件访问效率。数据文件访问效率。缺点:缺点:索引是有索引是有代价的(时、空)。代价的(时、空)。为了维护索引,
22、对为了维护索引,对数据进行插入、更新、删除操作所花费的时间会更长。数据进行插入、更新、删除操作所花费的时间会更长。在设计和创建索引时,应确保对性能的提高程度大于在存储在设计和创建索引时,应确保对性能的提高程度大于在存储空间和处理资源方面的代价。空间和处理资源方面的代价。3.2.5 3.2.5 建立与删除索引(续)建立与删除索引(续)26 Microsoft SQL Server Microsoft SQL Server 支持在表中任何列(包括计算列)支持在表中任何列(包括计算列)上定义的索引。上定义的索引。如果一个表没有创建索引,则数据行不按任何特定的顺序如果一个表没有创建索引,则数据行不按任
23、何特定的顺序存储。这种结构称为存储。这种结构称为堆集堆集。SQL Server SQL Server 索引的两种类型为:索引的两种类型为:聚集索引聚集索引 、非聚集索引、非聚集索引维护索引维护索引 DBMS DBMS自动完成自动完成使用索引使用索引 DBMS DBMS自动选择是否使用索引以及使用哪些索引自动选择是否使用索引以及使用哪些索引3.2.5 3.2.5 建立与删除索引(续)建立与删除索引(续)27CLUSTERED(聚集索引聚集索引):数据文件中的记录按照索引键指定数据文件中的记录按照索引键指定的顺序排序,使得具有相同索引键值的记录在物理上聚集在的顺序排序,使得具有相同索引键值的记录在
24、物理上聚集在一起(一起(即构成一簇即构成一簇cc)。)。即即索引项的顺序与表中记录的物理顺序一致索引项的顺序与表中记录的物理顺序一致。一个表只能建立一个聚集索引。一个表只能建立一个聚集索引。-如字典的排列顺序如字典的排列顺序3.2.5 3.2.5 建立与删除索引(续)建立与删除索引(续)非聚集索引非聚集索引:除除ClusterCluster之外的索引都是非聚集索引方式之外的索引都是非聚集索引方式-如按偏旁部首来找某一汉字时,就是使用非如按偏旁部首来找某一汉字时,就是使用非聚集索引方式聚集索引方式282.2.建立索引建立索引 语句格式语句格式CREATE CREATE UNIQUE CLUSTE
25、RUNIQUE CLUSTER INDEX INDEX ON ON(,);用用 指定要建索引的基本表名字指定要建索引的基本表名字索索引引可可以以建建立立在在该该表表的的一一列列或或多多列列上上,各各列列名名之之间间用用逗逗号分隔号分隔用用 指指定定索索引引值值的的排排列列次次序序,升升序序:ASCASC,降降序序:DESCDESC。缺省值:。缺省值:ASCASC3.2.5 3.2.5 建立与删除索引(续)建立与删除索引(续)例例1313CREATEINDEXstu_snameONStudent(Sname)在在Student表的表的Sname(姓名)列上建立索引。(姓名)列上建立索引。UNIQ
26、UE(唯一索引唯一索引):非聚集索引中的特例非聚集索引中的特例 不允许存在索引值相同的两行不允许存在索引值相同的两行(相当于增加了一个(相当于增加了一个UNIQUEUNIQUE约约束)束)293.3.删除索引删除索引DROPINDEX删除索引时,系统会从数据字典中删去有关该索引的删除索引时,系统会从数据字典中删去有关该索引的描述。描述。例例7 7删除删除Student表的表的stu_sname索引。索引。DROPINDEXstu_sname3.2.5 3.2.5 建立与删除索引(续)建立与删除索引(续)30第三章第三章 关系数据库标准语言关系数据库标准语言SQLSQL3.1 SQL概述3.2
27、数据定义3.3 查询3.4 数据更新3.5 视图第3章 小结313.3 3.3 查询查询 3.3.1 概述3.3.2 单表查询3.3.3 连接查询3.3.4 嵌套查询3.3.5 集合查询3.3.6 小结 32 查询功能是查询功能是SQLSQL语言的核心,是数据库中用得最多的操语言的核心,是数据库中用得最多的操作。作。SQLSQL语言的所有查询都是利用语言的所有查询都是利用SELECTSELECT语句完成的。语句完成的。SELECTSELECT语句的功能:用于检索和统计数据语句的功能:用于检索和统计数据作用对象:关系(表)作用对象:关系(表)结果:产生一个新的关系(表)结果:产生一个新的关系(表
28、)使用方式:交互式、嵌入式使用使用方式:交互式、嵌入式使用3.3.1 3.3.1 概述概述 333.3.1 3.3.1 概述(续)概述(续)1.1.语句格式:语句格式:SELECTALL|DISTINCT-显示哪些列显示哪些列FROM,-来自哪些表来自哪些表WHERE-根据什么条件根据什么条件GROUPBYHAVINGORDERBYASC|DESCDISTINCT表示在查询结果中去掉重复行,表示在查询结果中去掉重复行,ALL缺省缺省 例例1 1查询全体学生的学号与姓名。查询全体学生的学号与姓名。SELECTSno,SnameFROMStudent342.SELECT2.SELECT查询语句,可
29、看成是关系代数运算表达式查询语句,可看成是关系代数运算表达式SELECT子句子句:指定要显示的属性列,作:指定要显示的属性列,作投影投影运算运算FROM子句子句:指定查询对象:指定查询对象(基本表或视图基本表或视图),多个关系,多个关系时则表示要做时则表示要做笛卡尔积笛卡尔积运算运算WHERE子句子句:指定查询条件,做:指定查询条件,做选择选择运算运算GROUPBY子句子句:对查询结果按指定列的值分组,该:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用属性列值相等的元组为一个组。通常会在每组中作用集函数。集函数。HAVING短语短语:筛选出只有满足指定条件的组:筛
30、选出只有满足指定条件的组ORDERBY子句子句:对查询结果表按指定列值的升序或:对查询结果表按指定列值的升序或降序排序降序排序3.3.1 3.3.1 概述(续)概述(续)353.3.2 3.3.2 单表查询单表查询 查询仅涉及一个表,是一种最简单的查询操作查询仅涉及一个表,是一种最简单的查询操作1.选择表中的若干列2.查询满足条件的元组3.对查询结果排序4.使用集函数5.对查询结果分组 361.1.选择表中若干列选择表中若干列 例例1 1查询全体学生的学号与姓名。查询全体学生的学号与姓名。SELECTSno,SnameFROMStudent 例例2 2查询全体学生的姓名、学号、所在系。查询全体
31、学生的姓名、学号、所在系。SELECTSname,Sno,SdeptFROMStudent 例例3 3 查询全体学生的详细记录。查询全体学生的详细记录。SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent或或SELECT*FROMStudent;3.3.2 3.3.2 单表查询(续)单表查询(续)*表示取所有列的信息表示取所有列的信息列名要用逗号分开列名要用逗号分开37(1)(1)目标列表达式目标列表达式 不仅可以使用列名,还可以使用算术表达不仅可以使用列名,还可以使用算术表达式、字符串常量和函数等。式、字符串常量和函数等。例例查全体学生的姓名、出生年份和所有系
32、,要求用小写字查全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。母表示所有系名。SELECTSname,YearofBirth:,2005Sage,LOWER(Sdept)FROMStudent3.3.2 3.3.2 单表查询单表查询 列表达式的显示结果均没有列标题列表达式的显示结果均没有列标题如何为空白列提供一个列标题如何为空白列提供一个列标题?表达式函数常量38使用使用列别名列别名改变查询结果的列标题改变查询结果的列标题别名要用别名要用空格或空格或AS分开分开例:例:SELECTSnameNAME,YearofBirth:BIRTH,2005-SageASBIRTHDAY,L
33、OWER(Sdept)ASDEPARTMENTFROMStudent3.3.2 3.3.2 单表查询单表查询 列的别名列的别名空格空格39(2)(2)消除取值重复的行消除取值重复的行在在SELECT子句中使用子句中使用DISTINCT短语短语例:查询选修了课程的学生学号。例:查询选修了课程的学生学号。1)SELECTSnoFROMSC2)SELECTDISTINCTSnoFROMSC3.3.2 3.3.2 单表查询单表查询 SC去掉重复元组40注意:注意:DISTINCT短语的作用范围是所有目标列短语的作用范围是所有目标列例:例:查询选修课程的各种成绩查询选修课程的各种成绩错误的写法错误的写法
34、SELECTDISTINCTCno,DISTINCTGradeFROMSC正确的写法正确的写法SELECTDISTINCTCno,GradeFROMSC3.3.2 3.3.2 单表查询单表查询 412.2.查询满足条件的元组查询满足条件的元组WHEREWHERE子句常用的查询条件子句常用的查询条件查询条件查询条件谓谓 词词比较比较=,=,=,!=,!,!,NOT+上述比较运算符上述比较运算符确定范围确定范围BETWEENAND,NOTBETWEENAND确定集合确定集合IN,NOTIN字符匹配字符匹配LIKE,NOTLIKE空值空值ISNULL,ISNOTNULL逻辑运算逻辑运算AND,OR,
35、NOT3.3.2 3.3.2 单表查询(续)单表查询(续)42(1)(1)比较大小比较大小在在WHERE子句的子句的中使用比较运算符中使用比较运算符=,=,=,!=或或,!,!,逻辑运算符逻辑运算符NOT+比较运算符比较运算符 例例8 8查询所有年龄在查询所有年龄在20岁以下的学生姓名及其年龄。岁以下的学生姓名及其年龄。SELECTSname,SageFROMStudentWHERESage=20*取反操作的执行效率比较低,尽量少用取反操作的执行效率比较低,尽量少用43注:注:如果如果取取“NULL值值”的字段出现在条件表达式中,将使条的字段出现在条件表达式中,将使条件计算为件计算为NULL,
36、进而被排除于结果外,进而被排除于结果外。例如,查找成绩在例如,查找成绩在90分以上分以上(含含)的学生的学号:的学生的学号:SELECTDISTINCTSnoFROMSCWHEREGrade=90成绩为成绩为NULL的学生的学号并不出现在结果中。的学生的学号并不出现在结果中。SELECTDISTINCTSnoFROMSCWHEREISNULL(Grade,0)=90如果如果Grade为为NULL,则用则用0代替代替44(2)(2)确定范围确定范围使用谓词使用谓词BETWEENANDNOTBETWEENAND 例例1010查询年龄在查询年龄在2023岁(包括岁(包括20岁和岁和23岁)之间的学岁
37、)之间的学生的姓名、系别和年龄。生的姓名、系别和年龄。SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23该查询等价于下面的查询SELECTSname,Sdept,SageFROMStudentWHERESage=20ANDSage=2345(3)(3)确定集合确定集合IN是表示某元素是否属于某集合的谓词是表示某元素是否属于某集合的谓词语法格式语法格式WHERENOTIN:用逗号分隔的一组取值:用逗号分隔的一组取值 例例12 12 查询信息系(查询信息系(IS)、数学系()、数学系(MA)和计)和计算机科学系(算机科学系(CS)学生的
38、姓名和性别。)学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptIN(IS,MA,CS)snoSnameSsexSageSdept9501李勇李勇男男20CS9502刘晨刘晨女女19IS9503王敏王敏女女18MA9504张立张立男男19IS9505赵阳赵阳女女21GL46(4)(4)字符串匹配字符串匹配格式格式1 1:NOT LIKE 含义:含义:查找指定列值与查找指定列值与相匹配的元组。相匹配的元组。其中其中可含:可含:-通配符通配符(百分号百分号):代表任意长度:代表任意长度(可为可为0)的字符串。的字符串。_(下横线下横线):代表任意单个字符。
39、代表任意单个字符。相当于相当于WindowsWindows、dosdos等中查文件名的等中查文件名的*和?和?例:例:查所有姓刘或姓王的学生姓名、学号和性别。查所有姓刘或姓王的学生姓名、学号和性别。SELECT Sname,Sno,SsexFROM StudentWHERE Sname LIKE 刘刘 OR Sname LIKE 王王 新的问题:如何表示新的问题:如何表示%和和_ _本身?本身?用用ESCAPE换码转义换码转义逻辑运算符逻辑运算符47格式格式2 2:LIKEESCAPE若要查的串本身含或若要查的串本身含或_,用,用ESCAPE对通对通配符进行转义。配符进行转义。例例2020:查
40、查“DB_”开头,且倒数第开头,且倒数第2个字符为个字符为i的课程情况的课程情况SELECT*FROMCourseWHEREcnameLIKEDB_i_ESCAPE _表示要找内容为表示要找内容为 _表示任意单个字符表示任意单个字符48书上用书上用换码转义换码转义不幸,不幸,postgres恰好不能用恰好不能用实际上可以更灵活(常用实际上可以更灵活(常用#,&,!等,甚至用字母都可以!)。等,甚至用字母都可以!)。如下面的!转义:如下面的!转义:SELECTc1FROMtbWHEREc1LIKE%10-15!%off%ESCAPE!%进行换码转义进行换码转义49(5)(5)涉及空值的查询涉及空
41、值的查询使用谓词使用谓词ISNULL或或ISNOTNULL“ISNULL”不能用不能用“=NULL”代替代替 例例2121某些学生选修课程后没有参加考试,所以有选课记录,某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。号。SELECTSno,CnoFROMSCWHEREGradeISNULL50(6)(6)复合条件查询复合条件查询用逻辑运算符用逻辑运算符AND和和OR来联结多个查询条件来联结多个查询条件AND的优先级高于的优先级高于OR可以用括号改变优先级可以用括号改变优先级 例例232
42、3查询计算机系年龄在查询计算机系年龄在20岁以下的学生姓名。岁以下的学生姓名。SELECTSnameFROMStudentWHERESdept=CSANDSage20513.3.2 3.3.2 单表查询(续)单表查询(续)3.3.对查询结果排序对查询结果排序使用使用ORDERBY子句子句可以按一个或多个属性列排序可以按一个或多个属性列排序升序:升序:ASC;降序:;降序:DESC;当排序列含空值(当排序列含空值(NULL)时)时ASC:排序列为空值的元组最后显示:排序列为空值的元组最后显示DESC:排序列为空值的元组最先显示:排序列为空值的元组最先显示默认为升序默认为升序(ASC),NULL值
43、最大(值最大(这里说这里说“NULL值值最大最大”,仅仅针对,仅仅针对NULL值排序值排序的情况。的情况。SQLserver中中相反为最小)相反为最小)52 例例2424查询选修了查询选修了3号课程的学生的学号及其成绩,查询结号课程的学生的学号及其成绩,查询结果按分数降序排列。果按分数降序排列。SELECTSno,GradeFROMSCWHERECno=3ORDERBYGradeDESC3.3.2 3.3.2 单表查询(续)单表查询(续)若先按分数排序,后再按学若先按分数排序,后再按学号排序?号排序?ORDER BY Grade,Sno用逗号隔开534.4.使用集函数使用集函数为了进一步方便用
44、户,增强检索功能,为了进一步方便用户,增强检索功能,SQL提供了许多集函提供了许多集函数,主要包括:数,主要包括:COUNT(DISTINCT|ALL*)统计统计元组个数元组个数COUNT(DISTINCT|ALL)统统计计指指定定列列非非空空的的记记录个数。录个数。SUM(DISTINCT|ALL)计计算算一一列列值值的的总总和和(此此列必须是数值型)列必须是数值型)AVG(DISTINCT|ALL)计计算算一一列列值值的的平平均均值值(此列必须是数值型)(此列必须是数值型)MAX(DISTINCT|ALL)求一列值中的求一列值中的最大值最大值MIN(DISTINCT|ALL)求一列值中的求
45、一列值中的最小值最小值 3.3.2 3.3.2 单表查询(续)单表查询(续)54使用集函数(续)使用集函数(续)DISTINCT短语:短语:在计算时要取消指定列中的重复值在计算时要取消指定列中的重复值ALL短语:短语:不取消重复值不取消重复值ALL为缺省值为缺省值 例例2626查询学生总人数。查询学生总人数。SELECTCOUNT(*)FROMStudent;例例2727查询选修了课程的学生人数。查询选修了课程的学生人数。SELECTCOUNT(DISTINCTSno)FROMSC;注:注:学生每选修一门课,在学生每选修一门课,在SC中都有一条相应的记录,而一中都有一条相应的记录,而一个学生一
46、般都要选修多门课程,为避免重复计算学生人数,必个学生一般都要选修多门课程,为避免重复计算学生人数,必须在须在COUNT函数中用函数中用DISTINCT短语。短语。记录数不等于选课的学生记录数不等于选课的学生数,因此要加上数,因此要加上Distinct55使用集函数(续)使用集函数(续)例例2828计算计算1号课程的学生平均成绩。号课程的学生平均成绩。SELECTAVG(Grade)FROMSCWHERECno=1;例例2929查询选修查询选修1号课程的学生最高分数。号课程的学生最高分数。SELECTMAX(Grade)FROMSCWHERCno=1;除除count(*)外,外,NULL值均被聚
47、集函数所忽略。值均被聚集函数所忽略。565.5.对查询结果分组对查询结果分组GROUPBY子句可以将查询结果表的各行按一列或多子句可以将查询结果表的各行按一列或多列取值相等的原则进行分组。列取值相等的原则进行分组。对查询结果分组的目的是为了细化集函数的作用对象。对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用于整个查询结如果未对查询结果分组,集函数将作用于整个查询结果,即整个查询结果只有一个函数值。否则,集函数果,即整个查询结果只有一个函数值。否则,集函数将作用于每一个组,即每一组都有一个函数值。将作用于每一个组,即每一组都有一个函数值。如例如例28中中SEL
48、ECTAVG(Grade)FROMSCWHERECno=1表示课程表示课程1的平均分,若要的平均分,若要同时查同时查 每门课程的平均分?每门课程的平均分?3.3.2 3.3.2 单表查询(续)单表查询(续)57使用使用GROUP BYGROUP BY子句分组子句分组 例例3030求各门课程的平均分数。求各门课程的平均分数。SELECTCno,AVG(Grade)asAvg_GrageFROMSCGROUPBYCno;重要:分组查询的重要:分组查询的SELECT目目标列中只允许出现聚集函数和标列中只允许出现聚集函数和GROUPBY子句中出现过的子句中出现过的列列注:注:SQL规定,所有带有规定,
49、所有带有NULL值的记录在分组时被作为一组。值的记录在分组时被作为一组。58注:注:使用使用HAVING短语筛选最终输出结果短语筛选最终输出结果 例例3131查询选修了查询选修了3门及以上课程的学生学号。门及以上课程的学生学号。SELECTSno,COUNT(*)FROMSCGROUPBYSnoHAVINGCOUNT(*)=3;HAVING条件针对的是条件针对的是GROUP分组,分组,WHERE针对的是元组,针对的是元组,两者并不矛盾。两者并不矛盾。使用使用GROUP BYGROUP BY子句分组子句分组只有满足只有满足HAVING短语指短语指定条件的组才输出定条件的组才输出59 例例3232
50、查查询询有有3门门以以上上课课程程是是85分分以以上上的的学学生生的的学学号号及及(85分分以以上的)课程数上的)课程数SELECTSno,COUNT(*)FROMSCWHEREGrade=85-成绩为成绩为85分以上的课程分以上的课程GROUPBYSnoHAVINGCOUNT(*)=3;-有有3门这样的课程门这样的课程HAVING短语与短语与WHERE子句的区别:作用对象不同子句的区别:作用对象不同WHERE子子句句作作用用于于基基表表或或视视图图,从从中中选选择择满满足足条条件件的的元元组。组。HAVING短语作用于组,从中选择满足条件的组。短语作用于组,从中选择满足条件的组。使用使用GR