《【精品】关系数据库标准语言sql(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】关系数据库标准语言sql(可编辑.ppt(149页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、关系数据库标准语言SQL3.1 3.1 SQLSQL概述概述SQL语言及其标准2020世纪世纪7070年代中期,年代中期,IBMIBM公司在研制公司在研制System-R System-R RDBMSRDBMS的过程中,开发了世界上最早的的过程中,开发了世界上最早的SQLSQL语言,后语言,后来在许多数据库系统中被使用,由于其广泛的使用,来在许多数据库系统中被使用,由于其广泛的使用,出现标准化需求,形成出现标准化需求,形成SQLSQL标准。标准。SQL-86SQL-86SQL-89SQL-89SQL-92(SQL2)SQL-92(SQL2)SQL:1999(SQL3)SQL:1999(SQL3
2、)SQL2003SQL2003SQLSQL语言特点语言特点SQL的特点综合统一高度非过程化面向集合的操作方式以同一种语法结构提供两种使用方法语言简洁,易学易用5.5.语言简捷,易学易用语言简捷,易学易用3.2 3.2 架构(架构(SCHEMASCHEMA)CREATE CREATE SCHEMA SCHEMA AUTHORIZATION AUTHORIZATION CREATE SCHEME ST AUTHORIZATION WANGCREATE SCHEME ST AUTHORIZATION WANGDROP SCHEME DROP SCHEME DROP SCHEME ZHANG CSCA
3、DEDROP SCHEME ZHANG CSCADE架构与表架构与表要为每一个基本表指定所属模式,可通要为每一个基本表指定所属模式,可通过以下方式:过以下方式:在表名中显式地给出模式名;在表名中显式地给出模式名;在创建模式时创建表;在创建模式时创建表;设置所属的模式设置所属的模式3.33.3基本表的定义、删除和修改基本表的定义、删除和修改CREATE TABLE CREATE TABLE (,););:所要定义的基本表的名字:所要定义的基本表的名字 :组成该表的各个属性(列):组成该表的各个属性(列):仅仅涉涉及及单单列列的的完完整整性约束条件性约束条件 :涉及一个或多个属:涉及一个或多个属性
4、列的完整性约束条件性列的完整性约束条件 定义基本表(续)定义基本表(续)常用完整性约束常用完整性约束主码约束主码约束:PRIMARY KEYPRIMARY KEY唯一性约束:唯一性约束:UNIQUEUNIQUE非空值约束:非空值约束:NOT NULLNOT NULL检查约束:检查约束:CHECKCHECK参照完整性约束参照完整性约束:FOREIGN KEYFOREIGN KEY(属性名属性名)REFERENCESREFERENCES 表名表名(属性名属性名)PRIMARY KEYPRIMARY KEY与与 UNIQUE UNIQUE的区别?的区别?可使用可使用 UNIQUE UNIQUE 约束
5、确保在非主键列中不输入约束确保在非主键列中不输入重复值。重复值。UNIQUE UNIQUE 约束和约束和 PRIMARY KEY PRIMARY KEY约束都强制唯一约束都强制唯一性,性,一个表可以定义多个一个表可以定义多个 UNIQUE UNIQUE 约束,而只能定约束,而只能定义一个义一个 PRIMARY KEY PRIMARY KEY 约束。约束。允许空值的列。允许空值的列。允许空值的列上可以定义允许空值的列上可以定义 UNIQUE UNIQUE 约束,而不能定义约束,而不能定义 PRIMARY KEY PRIMARY KEY 约束。约束。SQL Server2005SQL Server
6、2005数据类型数据类型二进制数据类型二进制数据类型字符数据类型字符数据类型 Unicode Unicode 数据类型数据类型 日期和时间数据类型日期和时间数据类型 数值数据类型数值数据类型货币数据类型货币数据类型特殊数据类型特殊数据类型 二进制数据类型二进制数据类型Binary(N)Binary(N)是是 n n(1 1 到到 8000 8000)位固定位固定的二进制数据。的二进制数据。Varbinary(N)Varbinary(N)是是 n n(1 1 到到 8000 8000)位)位变长度的二进制数据。变长度的二进制数据。ImageImage 数据类型中存储的数据是以位字符串数据类型中存
7、储的数据是以位字符串存储的,不是由存储的,不是由 SQL Server SQL Server 解释的,必须解释的,必须由应用程序来解释。由应用程序来解释。字符型数据类型字符型数据类型CharChar(n n)定长字符数据,其长度最多为定长字符数据,其长度最多为 8KB8KB。VarChar VarChar(n n)是变长字符数据,其长度最是变长字符数据,其长度最多为多为 8KB 8KB。TextText数据类型,可用来存储超过数据类型,可用来存储超过8KB8KB的的ASCLLASCLL数据。数据。UnicodeUnicode 数据类型数据类型它为每种语言中的每个字符设定了统一并且它为每种语言中
8、的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。行文本转换、处理的要求。Unicode Unicode 数据类型包括数据类型包括 Nchar,Nvarchar Nchar,Nvarchar 和和NtextNtext。使用使用Unicode Unicode 数据类型,所占用的存储空间数据类型,所占用的存储空间是使用非是使用非 Unicode Unicode 数据类型所占用空间的两数据类型所占用空间的两倍。倍。日期和时间数据类型日期和时间数据类型 Date timeDate time所存储的日期范围是从所存储的日期范围
9、是从 1753 1753 年年 1 1 月月 1 1 日开始,到日开始,到9999 9999 年年1212月月3131日结束,日结束,每一个值要求每一个值要求 8 8 个存储字节。个存储字节。SmalldatetimeSmalldatetime所存储的日期范围是所存储的日期范围是 1900 1900年年1 1月月1 1日开始,到日开始,到 2079 2079 年年 12 12 月月 31 31 日结束,日结束,每一个值要求每一个值要求 4 4 个存储字节。个存储字节。日期格式包括日期格式包括 MDY MDY、DMYDMY、YMDYMD、YDMYDM、MYD MYD 和和 DYM DYM。在默认
10、情况下,日期格式为。在默认情况下,日期格式为 MDY MDY,可通过可通过Set DateFormatSet DateFormat改变。改变。数值数据类型数值数据类型 整数数据类型:整数数据类型:intint、smallintsmallint、tinyinttinyint分分别用别用4 4、2 2、1 1个字节存储整数。个字节存储整数。精确小数精确小数DecimalDecimal(n,m)n,m)和和NumbericNumberic(n,m),(n,m),占用存储空间由数据位数确定。占用存储空间由数据位数确定。decimal decimal 数据类型最多可以存储数据类型最多可以存储 38 38
11、 个数字,个数字,所有这些数字均可位于小数点后面。所有这些数字均可位于小数点后面。decimal decimal 数据类型存储精确的数字表示形式,存储值没数据类型存储精确的数字表示形式,存储值没有近似值。有近似值。定义定义 decimal decimal 列、变量和参数的两种属性为:列、变量和参数的两种属性为:p p:指定精度或对象能够支持的数字个数。指定精度或对象能够支持的数字个数。s s:指定可以放在小数点右边的小数位数或数字个数。指定可以放在小数点右边的小数位数或数字个数。p p 和和 s s 必须遵守规则:必须遵守规则:0=0=s s=p p=38=38。numeric numeric
12、 和和 decimal decimal 数据类型的默认最大精度为数据类型的默认最大精度为 3838。在。在 Transact-SQL Transact-SQL 中,中,numeric numeric 的功能等同于的功能等同于 decimal decimal 数据类型。数据类型。当数据值必须严格按指定存储时,可以使用当数据值必须严格按指定存储时,可以使用 decimal decimal 数据类型来存储带小数的数字。数据类型来存储带小数的数字。decimal(2,1)decimal(2,1),有效长度为,有效长度为2 2,小数位占,小数位占1 1位。位。此时,插入数据此时,插入数据“12.3”“1
13、2.3”、“12”“12”等会出现等会出现“数数据溢出错误据溢出错误”的异常;插入的异常;插入“1.23”“1.23”或或“1.2345.”“1.2345.”会自动四舍五入成会自动四舍五入成“1.2”“1.2”;插入;插入“2”“2”会自动补成会自动补成“2.0”“2.0”,以确保,以确保2 2位的有效长位的有效长度,其中包含度,其中包含1 1位小数。位小数。近似小数近似小数realreal和和floatfloatfloat float 和和 real real 数据类型被称为近似数据类型。数据类型被称为近似数据类型。近似数值数据类型并不存储为许多数字指定的精确近似数值数据类型并不存储为许多数
14、字指定的精确值,它们只储存这些值的最近似值。由于值,它们只储存这些值的最近似值。由于 float float 和和 real real 数据类型的这种近似特性,因此当要求使数据类型的这种近似特性,因此当要求使用精确数值时,比如在财务应用程序、需要等值核用精确数值时,比如在财务应用程序、需要等值核对中,请勿使用这些数据类型。而应使用对中,请勿使用这些数据类型。而应使用 integer integer、decimaldecimal、money money 或或 smallmoney smallmoney 数据类型。数据类型。在在 WHERE WHERE 子句搜索条件(特别是子句搜索条件(特别是=和
15、和 运算符)运算符)中,应避免使用中,应避免使用 float float 列或列或 real real 列。列。float float 列列和和 real real 列最好只限于列最好只限于 比较或比较或 比较。比较。货币数据类型货币数据类型Money Money 数据类型要求数据类型要求 8 8 个存储字节个存储字节Smallmoney Smallmoney 数据类型要求数据类型要求 4 4 个存储字节个存储字节两者都带有四位小数两者都带有四位小数货币数据不需要用单引号货币数据不需要用单引号()()引起来。虽引起来。虽然可以指定前面带有货币符号的货币值,但然可以指定前面带有货币符号的货币值,
16、但 SQL Server SQL Server 不存储任何与符号关联的货币不存储任何与符号关联的货币信息,它只存储数值。信息,它只存储数值。特殊数据类型特殊数据类型TimestampTimestamp 用于表示用于表示SQL Server SQL Server 活动的先后活动的先后顺序,与插入数据或者日期和时间没有关系。顺序,与插入数据或者日期和时间没有关系。uniqueidentifieruniqueidentifier此类型数据存储二进制值,此类型数据存储二进制值,其作用与全局唯一标识符其作用与全局唯一标识符(GUID)(GUID)一样。一样。GUID GUID 主要用于在有多个节点、多台
17、计算机的网络中,主要用于在有多个节点、多台计算机的网络中,分配必须具有唯一性的标识符。占用分配必须具有唯一性的标识符。占用16bytes16bytes存储空间。存储空间。BitBit由由1 1或者或者0 0组成。当表示真或者假、组成。当表示真或者假、ON ON 或或者者 OFF OFF 时,使用时,使用 Bit Bit 数据类型。数据类型。例例1 1 建建立立一一个个“学学生生”表表StudentStudent,它它由由学学号号SnoSno、姓姓名名SnameSname、性性别别SsexSsex、年年龄龄SageSage、所所在在系系SdeptSdept五五个个属属性性组组成成。其其中中学学号
18、号不不能能为为空空,值是唯一的,并且姓名取值也唯一。值是唯一的,并且姓名取值也唯一。CREATE TABLE Student CREATE TABLE Student (Sno CHAR(5)NOT NULL UNIQUE (Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20)UNIQUE Sname CHAR(20)UNIQUE,Ssex CHAR(1)Ssex CHAR(1),Sage INT Sage INT,Sdept CHAR(15)Sdept CHAR(15);例例2 2 建立一个建立一个“学生选课学生选课”表表SCSC,它由学号,它由学号SnoSno
19、、课程、课程号号CnoCno,修课成绩,修课成绩GradeGrade组成,其中组成,其中(Sno,Cno)(Sno,Cno)为主码为主码,Sno,Sno为外码参照为外码参照student.sno,student.sno,成绩在【成绩在【0 0100100】。】。CREATE TABLE SC(CREATE TABLE SC(Sno CHAR(5),Sno CHAR(5),Cno CHAR(3),Cno CHAR(3),Grade int,Grade int,CONSTRAINT grd_chk CHECK(Grade between 0 and CONSTRAINT grd_chk CHECK
20、(Grade between 0 and 100)100)Primary key(Sno,Cno)Primary key(Sno,Cno),CONSTRAINT frk_Sno FOREIGN KEY(Sno)CONSTRAINT frk_Sno FOREIGN KEY(Sno)REFERENCE student(Sno)REFERENCE student(Sno)ON DELETE CSCADE ON DELETE CSCADE ON UPDATE CSCADE;ON UPDATE CSCADE;二、修改基本表二、修改基本表ALTER TABLE ALTER TABLE ADD ADD 完整
21、性约束完整性约束 DROP DROP|ALTER ALTER ;:要修改的基本表:要修改的基本表ADDADD子句:增加新列和新的完整性约束条件子句:增加新列和新的完整性约束条件DROPDROP子句:删除指定的完整性约束条件或字段子句:删除指定的完整性约束条件或字段ALTERALTER子句:用于修改列名和数据类型子句:用于修改列名和数据类型向向StudentStudent表表增增加加“入入学学时时间间”列列,其其数数据据类类型型为为日日期期型。型。ALTER TABLE Student ADD Scome DATEALTER TABLE Student ADD Scome DATE;不不论论基基
22、本本表表中中原原来来是是否否已已有有数数据据,新新增增加加的的列列一一律律为为空值。空值。删除属性列删除属性列ALTER TABLE Student DROP COLUMN ScomeALTER TABLE Student DROP COLUMN Scome;将年龄的数据类型改为半字长整数。将年龄的数据类型改为半字长整数。ALTER TABLE Student MODIFY Sage SMALLINTALTER TABLE Student MODIFY Sage SMALLINT;删除学生姓名必须取唯一值的约束。删除学生姓名必须取唯一值的约束。ALTER TABLE Student DROP
23、UNIQUE(Sname)ALTER TABLE Student DROP UNIQUE(Sname);三、删除基本表三、删除基本表 DROP TABLE DROP TABLE;基基本本表表定定义义一一旦旦删删除除,表表中中的的数数据据、此此表表上上建建立立的的索索引引和和视视图图都都将将自自动动被被删删除除掉掉。但但是是有有的的系系统统,如如OracleOracle则则将将视视图图定定义义保保留留在在数数据据字字典典中中。但但是是用用户户引引用用时就报错。时就报错。删除删除StudentStudent表表DROP TABLEDROP TABLEStudent;Student;3.4 3.4
24、索引索引 索引索引一一个个索索引引就就是是一一个个指指向向表表中中数数据据的的指指针针,记记录了被索引列的每一个取值在表中的位置录了被索引列的每一个取值在表中的位置索引用途索引用途建立索引是加快查询速度的有效手段建立索引是加快查询速度的有效手段保证数据唯一性保证数据唯一性加快表联接的速度加快表联接的速度3.4 3.4 索引索引 索引类型索引类型单列索引单列索引唯一索引唯一索引符合索引符合索引3.4 3.4 索引索引 建立索引建立索引DBADBA或表的属主(即建立表的人)根据需要建立或表的属主(即建立表的人)根据需要建立SQL SERVERSQL SERVER自动建立以下列上的索引自动建立以下列
25、上的索引 PRIMARY KEYPRIMARY KEY UNIQUE UNIQUE维护索引维护索引 DBMS DBMS自动完成自动完成使用索引使用索引 DBMS DBMS自动选择是否使用索引以及使用哪些索引自动选择是否使用索引以及使用哪些索引一、建立索引一、建立索引 语句格式语句格式CREATE CREATE UNIQUE UNIQUE CLUSTERCLUSTER INDEX INDEX ON ON (,);用用 指定要建索引的基本表名字指定要建索引的基本表名字索索引引可可以以建建立立在在该该表表的的一一列列或或多多列列上上,各各列列名之间用逗号分隔名之间用逗号分隔用用 指指定定索索引引值值
26、的的排排列列次次序序,升升序序:ASCASC,降序:,降序:DESCDESC。缺省值:。缺省值:ASCASCUNIQUEUNIQUE表表明明此此索索引引的的每每一一个个索索引引值值只只对对应应唯唯一的数据记录一的数据记录CLUSTERCLUSTER表示要建立的索引是聚簇索引表示要建立的索引是聚簇索引唯一值索引唯一值索引对对于于已已含含重重复复值值的的属属性性列列不不能能建建UNIQUEUNIQUE索索引引对对某某个个列列建建立立UNIQUEUNIQUE索索引引后后,插插入入新新记记录录时时DBMSDBMS会会自自动动检检查查新新记记录录在在该该列列上上是是否否取取了了重重复复值值。这这相相当当
27、于于增增加加了了一一个个UNIQUEUNIQUE约约束束例题例题 例例6 6 为为学学生生-课课程程数数据据库库中中的的StudentStudent,CourseCourse,SCSC三三个个表表建建立立索索引引。其其中中StudentStudent表表按按学学号号升升序序建建唯唯一一索索引引,CourseCourse表表按按课课程程号号升升序序建建唯唯一一索索引引,SCSC表表按按学学号号升升序序和和课课程程号号降降序序建唯一索引。建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno)CREATE UNIQUE INDEX Stusno ON Stu
28、dent(Sno);CREATE UNIQUE INDEX Coucno ON Course(Cno)CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQUE INDEX SCno ON SC(Sno ASCCREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno Cno DESC)DESC);聚簇索引聚簇索引建建立立聚聚簇簇索索引引后后,基基表表中中数数据据也也需需要要按按指指定定的的聚聚簇簇属属性性值值的的升升序序或或降降序序存存放放。也也即即聚聚簇簇索索引引的的索索引项顺序与表中记录的物理顺序一致引项顺序与
29、表中记录的物理顺序一致例:例:CREATE CLUSTER INDEX Stusname ONCREATE CLUSTER INDEX Stusname ON Student(Sname)Student(Sname);在在StudentStudent表表的的SnameSname(姓姓名名)列列上上建建立立一一个个聚聚簇簇索索引,而引,而且且StudentStudent表中的记录将按照表中的记录将按照SnameSname值的升序存放值的升序存放 聚簇索引聚簇索引(续)(续)在一个基本表上最多只能建立一个聚簇索引聚簇索引的用途:对于某些类型的查询,可以提高查询效率聚簇索引的适用范围 很少对基表进行
30、增删操作很少对基表进行增删操作 很少对其中的变长列进行修改操作很少对其中的变长列进行修改操作 使用索引的原则使用索引的原则1 1、在需要经常搜索的列上创建索引、在需要经常搜索的列上创建索引2 2、经常用于连接的列上创建索引、经常用于连接的列上创建索引3 3、经常需要根据范围进行搜索的列上创建索引、经常需要根据范围进行搜索的列上创建索引4 4、经常需要排序的列上创建索引、经常需要排序的列上创建索引5 5、经常用于、经常用于wherewhere子句的列上创建索引子句的列上创建索引不创建索引的原则:不创建索引的原则:1 1、查询很少使用和参考的列不建索引、查询很少使用和参考的列不建索引2 2、对只有
31、少数值的列不建索引、对只有少数值的列不建索引3 3、定义为、定义为texttext、imageimage、bitbit的列不建索引的列不建索引4 4、当需要、当需要updateupdate性能远远高于性能远远高于selectselect性能时不应建索性能时不应建索二、删除索引二、删除索引 DROP INDEX DROP INDEX ;删除索引时,系统会从数据字典中删去有关删除索引时,系统会从数据字典中删去有关该索引的描述。该索引的描述。例例7 7 删除删除StudentStudent表的表的StusnameStusname索引。索引。DROP INDEX StusnameDROP INDEX
32、Stusname;3.5 3.5 查查 询询语句格式语句格式SELECTSELECT ALL|DISTINCT ALL|DISTINCT ,FROMFROM ,WHEREWHERE GROUPGROUP BYBY 1 HAVINGHAVING ORDERORDER BYBY ASC|DESC 2 ASC|DESC ;语句格式语句格式SELECTSELECT子句子句:指定要显示的属性列:指定要显示的属性列FROMFROM子句子句:指定查询对象:指定查询对象(基本表或视图基本表或视图)WHEREWHERE子句子句:指定查询条件:指定查询条件GROUPGROUP BYBY子子句句:对对查查询询结结果
33、果按按指指定定列列的的值值分分组组,该该属属性性列列值值相相等等的的元元组组为为一一个个组组。通通常常会在每组中作用集函数。会在每组中作用集函数。HAVINGHAVING短语短语:筛选出只有满足指定条件的组:筛选出只有满足指定条件的组ORDERORDER BYBY子句子句:对查询结果表按指定列值的:对查询结果表按指定列值的升序或降序排序升序或降序排序 3.5.2 3.5.2 单表查询单表查询 查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列二、选择表中的若干元组三、对查询结果排序四、使用集函数五、对查询结果分组 查询指定列查询指定列例1 查询全体学生的学号与姓名。SELECT Sn
34、o,SnameFROM Student;例2 查询全体学生的姓名、学号、所在系。SELECT Sname,Sno,SdeptFROM Student;例3 查询全体学生的详细记录。SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;或SELECT *FROM Student;3.3.查询经过计算的值查询经过计算的值 SELECTSELECT子句的子句的 为表达式为表达式算术表达式算术表达式字符串常量字符串常量函数函数列别名列别名 3.3.查询经过计算的值查询经过计算的值例4 查全体学生的姓名及其出生年份。SELECT Sname,2010-SageFRO
35、M Student;例5 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。SELECT Sname,Year of Birth:,2000-Sage ISLOWER(Sdept)FROM Student;使用列别名改变查询结果的列标题 SELECT Sname NAME,Year of Birth:BIRTH,2010-Sage BIRTHDAY,ISLOWER(Sdept)DEPARTMENT FROM Student;ALL ALL 与与 DISTINCT DISTINCT 例例6 6 查询选修了课程的学生学号。查询选修了课程的学生学号。(1)SELECT Sno(1)S
36、ELECT Sno FROM SC;FROM SC;或或(默认默认 ALL)ALL)SELECT ALL Sno SELECT ALL Sno FROM SC;FROM SC;(2)SELECT DISTINCT Sno(2)SELECT DISTINCT Sno FROM SC;FROM SC;例题(续)例题(续)注意 DISTINCT短语的作用范围是所有目标列例:查询选修课程的各种成绩错误的写法SELECT DISTINCT Cno,DISTINCT GradeFROM SC;正确的写法 SELECT DISTINCT Cno,Grade FROM SC;2.2.查询满足条件的元组查询满足
37、条件的元组WHERE子句常用的查询条件子句常用的查询条件查询条件查询条件谓词谓词比较比较=,=,=,!=,!,!;NOT+=,=,!=,!,!;NOT+上述比较上述比较运算符运算符确定范围确定范围BETWEEN AND,NOT BETWEEN ANDBETWEEN AND,NOT BETWEEN AND确定集合确定集合IN,NOT ININ,NOT IN字符匹配字符匹配LIKE,NOT LIKELIKE,NOT LIKE空值空值ISISNULL,IS NOT NULLNULL,IS NOT NULL多重条件多重条件AND,OR,NOTAND,OR,NOT(1)(1)比较大小比较大小在在WHER
38、EWHERE子句的子句的 中使用比较运算符中使用比较运算符=,=,=,!=!=或或 ,!,!,逻辑运算符逻辑运算符NOT +NOT +比较运算符比较运算符 例例8 8 查询所有年龄在查询所有年龄在2020岁以下的学生姓名及其年龄。岁以下的学生姓名及其年龄。SELECT Sname SELECT Sname,Sage Sage FROM Student FROM Student WHERE Sage 20WHERE Sage=20WHERE NOT Sage=20;(2)(2)确定范围确定范围使用谓词使用谓词 BETWEEN AND BETWEEN AND NOT BETWEEN AND NOT
39、 BETWEEN AND 例例10 10 查询年龄在查询年龄在/不在不在20232023岁(包括岁(包括2020岁和岁和2323岁)之间的学生的姓名、系别和年龄岁)之间的学生的姓名、系别和年龄。SELECT Sname SELECT Sname,SdeptSdept,SageSageFROM StudentFROM StudentWHERE Sage NOT BETWEEN 20 AND WHERE Sage NOT BETWEEN 20 AND 2323;(3)(3)确定集合确定集合使用谓词使用谓词 IN IN,NOT IN,NOT IN :用逗号分隔的一组取值用逗号分隔的一组取值 例例12
40、12查询信息系(查询信息系(ISIS)、数学系()、数学系(MAMA)和计算)和计算机科学系(机科学系(CSCS)学生的姓名和性别。)学生的姓名和性别。SELECT SnameSELECT Sname,SsexSsexFROM StudentFROM StudentWHERE Sdept IN(ISWHERE Sdept IN(IS,MAMA,CS);CS);(4)(4)字符串匹配字符串匹配 NOT NOT LIKE LIKE ESCAPE ESCAPE :指定匹配模板:指定匹配模板 匹配模板匹配模板:固定字符串或含通配符的字符串:固定字符串或含通配符的字符串 当匹配模板为固定字符串时,当匹配
41、模板为固定字符串时,可以用可以用=运算符取代运算符取代 LIKE LIKE 谓词谓词 用用!=!=或或 运算符取代运算符取代 NOT LIKE NOT LIKE 谓词谓词通配符通配符w%(%(百分号百分号)代表任意长度(长度可以为代表任意长度(长度可以为0 0)的字符串的字符串例:例:a%ba%b表示以表示以a a开头,以开头,以b b结尾的任意长度结尾的任意长度的字符串。如的字符串。如acbacb,addgbaddgb,abab 等都满足该等都满足该匹配串匹配串_(_(下横线下横线)代表任意单个字符代表任意单个字符例:例:a_ba_b表示以表示以a a开头,以开头,以b b结尾的长度为结尾的
42、长度为3 3的的任意字符串。如任意字符串。如acbacb,afbafb等都满足该匹配串等都满足该匹配串当用户要查询的字符串本身就含有当用户要查询的字符串本身就含有%或或 _ _ 时,时,要使用要使用ESCAPE ESCAPE 短语对通配符进短语对通配符进行转义。行转义。例题例题1)1)匹配模板为固定字符串匹配模板为固定字符串 例例14 14 查询学号为查询学号为9500195001的学生的详细情况。的学生的详细情况。SELECT*SELECT*FROM Student FROM Student WHERE Sno LIKE 95001 WHERE Sno LIKE 95001;等价于:等价于:
43、SELECT *SELECT *FROM Student FROM Student WHERE Sno=95001 WHERE Sno=95001;匹配模板为含通配符的字符串匹配模板为含通配符的字符串 例例15 15 查询所有姓刘学生的姓名、学号和性别。查询所有姓刘学生的姓名、学号和性别。SELECT Sname SELECT Sname,SnoSno,SsexSsex FROM Student FROM Student WHERE Sname LIKE WHERE Sname LIKE 刘刘%;例例16 16 查询姓查询姓 欧阳欧阳 且全名为三个汉字的学生的姓名。且全名为三个汉字的学生的姓名
44、。SELECT Sname SELECT Sname FROM Student FROM Student WHERE Sname LIKE WHERE Sname LIKE 欧阳欧阳_;例例17 17 查询名字中第查询名字中第2 2个字为个字为 阳阳 字的学生的姓名和学号。字的学生的姓名和学号。SELECT Sname SELECT Sname,SnoSno FROM Student FROM Student WHERE Sname LIKE _ WHERE Sname LIKE _阳阳%;例例18 18 查询所有不姓刘的学生姓名。查询所有不姓刘的学生姓名。SELECT Sname SELEC
45、T Sname,SnoSno,SsexSsex FROM Student FROM Student WHERE Sname NOT LIKE WHERE Sname NOT LIKE 刘刘%;使用转义字符将通配符转义为普通字符使用转义字符将通配符转义为普通字符 例例19 19 查询查询DB_DesignDB_Design课程的课程号和学分。课程的课程号和学分。SELECT Cno SELECT Cno,CcreditCcredit FROM Course FROM Course WHERE Cname LIKE DB_Design WHERE Cname LIKE DB_Design ESCA
46、PE ESCAPE 例例20 20 查询以查询以DB_DB_开头,且倒数第开头,且倒数第3 3个字符为个字符为 i i的课程的详细情况。的课程的详细情况。SELECT *SELECT *FROM Course FROM Course WHERE Cname LIKE DB WHERE Cname LIKE DB _%i_ _ _%i_ _ ESCAPE ESCAPE ;(5)(5)涉及空值的查询涉及空值的查询 使用谓词使用谓词 IS NULL IS NULL 或或 IS NOT NULL IS NOT NULL“IS NULL”“IS NULL”不能用不能用“=NULL”“=NULL”代替代替
47、 例例21 21 某些学生选修课程后没有参加考试,所以有选某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。号和相应的课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL;例例22 22 查所有有成绩的学生学号和课程号。查所有有成绩的学生学号和课程号。SELECT Sno SELECT Sno,CnoCno FROM SC FROM SC WHERE Grade IS NOT NULL WHERE Grade IS NOT NULL;(6)(6)多重条件查
48、询多重条件查询用逻辑运算符用逻辑运算符ANDAND和和 OR OR来联结多个查询条件来联结多个查询条件 AND AND的优先级高于的优先级高于OROR 可以用括号改变优先级可以用括号改变优先级可用来实现多种其他谓词可用来实现多种其他谓词 NOT IN NOT IN NOT BETWEEN AND NOT BETWEEN AND 例例23 23 查询计算机系年龄在查询计算机系年龄在2020岁以下的学生姓名。岁以下的学生姓名。SELECT SnameSELECT Sname FROM Student FROM Student WHERE Sdept=CS AND Sage20 WHERE Sdep
49、t=CS AND Sage=20 AND Sage=20 AND Sage=23;三、对查询结果排序三、对查询结果排序 使用使用ORDER BYORDER BY子句子句 可以按一个或多个属性列排序可以按一个或多个属性列排序 升序:升序:ASCASC;降序:;降序:DESCDESC;缺省值为升序缺省值为升序当排序列含空值时当排序列含空值时ASCASC:排序列为空值的元组最后显示:排序列为空值的元组最后显示DESCDESC:排序列为空值的元组最先显示:排序列为空值的元组最先显示 排序实例排序实例 例例2424查查询询选选修修了了3 3号号课课程程的的学学生生的的学学号号及及其其成成绩绩,查询结果按
50、分数降序排列。查询结果按分数降序排列。SELECT Sno SELECT Sno,GradeGrade FROM SC FROM SC WHERE Cno=3 WHERE Cno=3 ORDER BY Grade DESC ORDER BY Grade DESC;例例25 25 查查询询全全体体学学生生情情况况,查查询询结结果果按按所所在在系系的的系号升序排列,同一系中的学生按年龄降序排列。系号升序排列,同一系中的学生按年龄降序排列。SELECT *SELECT *FROM StudentFROM StudentORDER BY SdeptORDER BY Sdept,Sage DESCSag