第03章SQL语言基础精.ppt
第03章SQL语言基础2022/12/31第1页,本讲稿共70页19991999年年SQL-99SQL-99标准(简称标准(简称SQL3SQL3)。增加了对对象关系模)。增加了对对象关系模型的支持。目前仅部分实现。型的支持。目前仅部分实现。最流行的国际标准数据库语言。最流行的国际标准数据库语言。主要特点:主要特点:SQLSQL是非结构化的语言,使用是非结构化的语言,使用SQL SQL 查询数据库时,只需要查询数据库时,只需要告诉它做什么而不用告诉它如何去做。告诉它做什么而不用告诉它如何去做。SQL SQL 本身不提供任何程序流程控制结构,而是通过本身不提供任何程序流程控制结构,而是通过PL/SQLPL/SQL提供提供SQLSQL语言的过程化功能语言的过程化功能SQLSQL提供相对固定的数据类型,一般不需要扩展提供相对固定的数据类型,一般不需要扩展SQLSQL本身十分灵活,方便易学。本身十分灵活,方便易学。2022/12/32第2页,本讲稿共70页标准标准SQLSQL只包含只包含9 9种语句:种语句:w数据查询:数据查询:selectselectw数据定义数据定义:create,drop,alter:create,drop,alterw数据操纵数据操纵:insert,update,delete:insert,update,deletew数据控制数据控制:grant,revoke:grant,revoke2022/12/33第3页,本讲稿共70页数据定义语言(数据定义语言(DDLDDL),用于定义数据结构),用于定义数据结构数据操纵语言(数据操纵语言(DMLDML),用于检索和修改数),用于检索和修改数据结构据结构数据控制语言(数据控制语言(DCLDCL),用于规定数据库用),用于规定数据库用户的各种权限户的各种权限数据库事务处理,用来保证数据库的完整性数据库事务处理,用来保证数据库的完整性SQLSQL语言分类语言分类2022/12/34第4页,本讲稿共70页SQLSQL语言分类语言分类数据定义语言(数据定义语言(DDLDDL):用于定义数据结):用于定义数据结构构能使用户完成下列任务能使用户完成下列任务n创建数据库对象创建数据库对象n删除数据库对象删除数据库对象n更改数据库对象更改数据库对象2022/12/35第5页,本讲稿共70页常用的数据定义语言常用的数据定义语言DDLDDL语句包括:语句包括:Create Table:Create Table:创建数据库表创建数据库表Create Index:Create Index:创建数据库表的索引创建数据库表的索引Drop Table:Drop Table:删除数据库表删除数据库表Drop Index:Drop Index:删除数据库表的索引删除数据库表的索引TruncateTruncate:删除表中所有行:删除表中所有行Alter TableAlter Table:增加表列,重定义表列,更改存储:增加表列,重定义表列,更改存储分配分配Alter Table ADD CONSTRAINT:Alter Table ADD CONSTRAINT:在已有的表上增加约在已有的表上增加约束束2022/12/36第6页,本讲稿共70页数据操纵语言数据操纵语言(DML)(DML):允许用户对数据库:允许用户对数据库中的数据进行中的数据进行Insert,Update,DeleteInsert,Update,Delete和和SelectSelect等操作等操作常用常用DMLDML语句包括:语句包括:Insert Insert:增加数据行到表:增加数据行到表DeleteDelete:从表中删除数据行:从表中删除数据行UpdateUpdate:更改表中数据:更改表中数据SelectSelect:从表中或视图中检索数据行:从表中或视图中检索数据行2022/12/37第7页,本讲稿共70页数据控制语言(数据控制语言(DCLDCL):用于规定数据库):用于规定数据库用户的各种权限用户的各种权限常用的数据控制语句包括:常用的数据控制语句包括:GRANTGRANT:将权限或角色授予用户或其它角:将权限或角色授予用户或其它角色色REVOKEREVOKE:从用户或数据库角色回收权限:从用户或数据库角色回收权限Set RoleSet Role:禁止或允许一个角色:禁止或允许一个角色2022/12/38第8页,本讲稿共70页数据库事务控制数据库事务控制:用来保证数据库的完整用来保证数据库的完整性性常用的事务处理语句包括:常用的事务处理语句包括:COMMIT WORKCOMMIT WORK:把当前事务所作的更改永:把当前事务所作的更改永久化(写入磁盘)久化(写入磁盘)ROLLBACK:ROLLBACK:作废上次提交以来的所有更改作废上次提交以来的所有更改2022/12/39第9页,本讲稿共70页事务:指作为单个逻辑工作单元执行的事务:指作为单个逻辑工作单元执行的一系列操作,而这些逻辑工作单元需要一系列操作,而这些逻辑工作单元需要具有原子性,一致性,隔离性和持久性具有原子性,一致性,隔离性和持久性四个属性。四个属性。2022/12/310第10页,本讲稿共70页SQLSQL语句的基本语法语句的基本语法基本语法如下:基本语法如下:每条每条SQLSQL语句必须以分号结束语句必须以分号结束每条每条SQLSQL语句可以单独写成一行,也可以语句可以单独写成一行,也可以分成若干行分成若干行SQLSQL语句对大小写不敏感,对于语句对大小写不敏感,对于SQLSQL语句语句的关键字(如的关键字(如InsertInsert等),表名,列名等),表名,列名等,可以大小写混合;但对列的内容则等,可以大小写混合;但对列的内容则是大小写敏感的。是大小写敏感的。2022/12/311第11页,本讲稿共70页对象命名约定对象命名约定SQL ServerSQL Server用三段式名字标识对象:用三段式名字标识对象:.前两者可以省略,系统自动有一个默认值。数据库名的前两者可以省略,系统自动有一个默认值。数据库名的默认值是当前数据库,所有者名的默认值是数据库的默认值是当前数据库,所有者名的默认值是数据库的所有者(所有者(dbodbo)例如:在例如:在pubspubs数据库中的数据库中的authorsauthors表的所有者是表的所有者是dbodbo,它可以在多个数据库中按如下方法引用:它可以在多个数据库中按如下方法引用:pubs.dbo.authorspubs.dbo.authorsPubs.authorsPubs.authors2022/12/312第12页,本讲稿共70页别名:使用别名的主要目的是增加别名:使用别名的主要目的是增加selectselect语句的可读性。可使用如下语句语句的可读性。可使用如下语句指派数据表的别名:指派数据表的别名:数据表名称数据表名称 as as 数据表别名数据表别名2022/12/313第13页,本讲稿共70页例如:例如:use sampleuse sampleSelect e.Select e.员工编号员工编号,e.,e.员工姓名员工姓名From From 员工数据表员工数据表 as eas e注意:如果为数据表指定了别名,则在相应的注意:如果为数据表指定了别名,则在相应的T-SQLT-SQL语语句中,对该数据表的所有显式引用都必须使用别句中,对该数据表的所有显式引用都必须使用别名,而不能使用数据表名。例如:名,而不能使用数据表名。例如:Select Select 员工数据表员工数据表.员工编号员工编号,e.,e.员工姓名员工姓名From From 员工数据表员工数据表 as eas e2022/12/314第14页,本讲稿共70页SELECT SELECT 语句语句数据检索是数据库中最频繁执行的活动数据检索是数据库中最频繁执行的活动在在 SQL SQL 中中,使使用用 SELECT SELECT 语语句句可可以以在在需需要的表单中检索数据要的表单中检索数据在在进进行行检检索索之之前前,必必须须知知道道需需要要的的数数据据存储在哪里存储在哪里SELECT SELECT 语句可以由多个查询子句组成语句可以由多个查询子句组成2022/12/315第15页,本讲稿共70页SELECT SELECT 语句语句SELECT SELECT 语句可用于检索:语句可用于检索:n全部的行和列全部的行和列n全部的行和特定的列全部的行和特定的列n限定范围的行限定范围的行n与一组值匹配的行与一组值匹配的行n根据未知值检索的行根据未知值检索的行n隐藏有重复值的行隐藏有重复值的行n根据多个搜索条件检索的行根据多个搜索条件检索的行2022/12/316第16页,本讲稿共70页SELECT SELECT 语句语句SelectSelect语句的基本结构如下:语句的基本结构如下:SELECT ALL|DISTINCT select_listSELECT ALL|DISTINCT select_listINTO new_table_nameINTO new_table_nameFROM table_name|view_name FROM table_name|view_name,table_name2|view_name2,table_name2|view_name2 .,table_name16|.,table_name16|view_name16 view_name16 WHERE search_conditionsWHERE search_conditionsGROUP BY group_by_listGROUP BY group_by_listHAVING search_conditionsHAVING search_conditionsORDER BY order_list ASC|DESCORDER BY order_list ASC|DESC2022/12/317第17页,本讲稿共70页SELECT SELECT 子子 句句SELECT SELECT 子句指定需要通过查询返回的表的列。其语子句指定需要通过查询返回的表的列。其语法如下法如下:SELECT ALL|DISTINCT SELECT ALL|DISTINCT TOP n TOP n各参数说明如下:各参数说明如下:其中,其中,select_listselect_list表示需要检索的字段的列表,字段表示需要检索的字段的列表,字段名称之间用逗号分隔。这个列表中既可以包含数据源名称之间用逗号分隔。这个列表中既可以包含数据源表或视图中的字段名称,还可以包含其它表达式。如表或视图中的字段名称,还可以包含其它表达式。如用用*,则系统将返回数据表中的所有字段。,则系统将返回数据表中的所有字段。2022/12/318第18页,本讲稿共70页 ALL ALL:指明查询结果中可以显示值相同的列:指明查询结果中可以显示值相同的列ALL ALL 是系统默认的是系统默认的 DISTINCTDISTINCT:指明查询结果中如果有值相同的列,:指明查询结果中如果有值相同的列,则只显示其中的一列。对则只显示其中的一列。对DISTINCT DISTINCT 选项来说,选项来说,Null Null 值被认为是相同的值值被认为是相同的值 TOP n PERCENTTOP n PERCENT:指定返回查询结果的前:指定返回查询结果的前n n 行数行数据,如果据,如果PERCENT PERCENT 关键字指定的话,则返回查询结关键字指定的话,则返回查询结果的前百分之果的前百分之n n 行数据。行数据。2022/12/319第19页,本讲稿共70页INTO INTO 子句子句INTO INTO 子句用于把查询结果存放到一个新子句用于把查询结果存放到一个新建的表中。建的表中。SELECT.INTO SELECT.INTO 句式不能与句式不能与COMPUTE COMPUTE 子句一起使用。其语法如下子句一起使用。其语法如下INTO new_tableINTO new_table参数参数new_table new_table 指定了新建的表的名称,指定了新建的表的名称,新表的列由新表的列由SELECT SELECT 子句中指定的列构成。子句中指定的列构成。新表中的数据行是由新表中的数据行是由WHERE WHERE 子句指定的。子句指定的。但如果但如果SELECT SELECT 子句中指定了计算列,在子句中指定了计算列,在新表中对应的列则不是计算列,而是一新表中对应的列则不是计算列,而是一个实际存储在表中的列,其中的数据由个实际存储在表中的列,其中的数据由执行执行SELECT.INTO SELECT.INTO 语句时计算得出。语句时计算得出。2022/12/320第20页,本讲稿共70页FROM FROM 子句子句FROM FROM 子句指定需要进行数据查询的表只子句指定需要进行数据查询的表只要要SELECT SELECT 子句中有要查询的列就必子句中有要查询的列就必须使用须使用FROM FROM 子句其语法如下子句其语法如下FROM ,.nFROM ,.ntable_sourcetable_source:指明:指明SELECT SELECT 语句要用到语句要用到的表、视图等数据源,该列表中的数据的表、视图等数据源,该列表中的数据表名和视图名之间使用逗号分隔。表名和视图名之间使用逗号分隔。2022/12/321第21页,本讲稿共70页T-SQLT-SQL可以支持在可以支持在fromfrom子句中指定除了数子句中指定除了数据表或视图以外的其他对象,例如查询据表或视图以外的其他对象,例如查询结果集构成的派生表。这些派生表实际结果集构成的派生表。这些派生表实际上是上是from from 子句中子句中selectselect语句的查询结果语句的查询结果集,这些结果集构成了外层集,这些结果集构成了外层selectselect语句语句查询时所用的数据表。查询时所用的数据表。2022/12/322第22页,本讲稿共70页例如:例如:Select Emp.Select Emp.员工编号,员工编号,emp.emp.员工姓名,员工姓名,sp.sp.部门名称部门名称From From 员工数据表员工数据表 as empas emp,(select(select 部门数据表部门数据表.部门编号,部门数据表部门编号,部门数据表.部门名称部门名称From From 部门数据表部门数据表Where Where 部门数据表部门数据表.部门编号部门编号2)as sp2)as spWhere emp.Where emp.部门编号部门编号sp.sp.部门编号部门编号首先使用首先使用selectselect语句检索高级部门,并用别名语句检索高级部门,并用别名spsp表示该派生表示该派生表,然后从员工数据表和表,然后从员工数据表和spsp派生表中检索数据。派生表中检索数据。2022/12/323第23页,本讲稿共70页Where Where 子句子句Where Where 子句指定数据检索的条件,以限制返回的数子句指定数据检索的条件,以限制返回的数据行。据行。Where Where 子句中的查询条件子句中的查询条件比较运算符:比较运算符:、=、=、=、!=!=、!范围说明:范围说明:Between A and BBetween A and B、Not Between A and BNot Between A and B可选值列表:可选值列表:ININ、NOT INNOT IN模式匹配:模式匹配:LIKELIKE,NOT LIKENOT LIKE是否空值:是否空值:IS NULLIS NULL、IS NOT NULLIS NOT NULL上述条件的逻辑组合:上述条件的逻辑组合:ANDAND、OROR、NOTNOT2022/12/324第24页,本讲稿共70页比较查询条件:比较查询条件:texttext、ntextntext和和imageimage数数据类型不能与比较运算符组合成查询条据类型不能与比较运算符组合成查询条件。件。列表查询条件:列表查询条件:in in 关键字在大多数情况关键字在大多数情况下应用于嵌套查询(又称为子查询)中,下应用于嵌套查询(又称为子查询)中,通常首先使用通常首先使用selectselect语句选定一个范围,语句选定一个范围,然后将选定的范围作为然后将选定的范围作为inin关键字的符号关键字的符号条件的列表,从而得出最终的结果集。条件的列表,从而得出最终的结果集。2022/12/325第25页,本讲稿共70页模式查询条件:模式查询条件:LikeLike、Not LikeNot Like通配符通配符n*匹配任意字符串匹配任意字符串n?匹配任意一个字符匹配任意一个字符大小写敏感大小写敏感2022/12/326第26页,本讲稿共70页LikeLike关键字中的通配符及其含义关键字中的通配符及其含义通配通配符符含义含义%由由0 0个或更多字符组成的任意字符串个或更多字符组成的任意字符串_ _任意单个字符任意单个字符用于指定范围,例如用于指定范围,例如a-fa-f,表示,表示a a到到f f范围内的任何单个字符范围内的任何单个字符表示指定范围,例如表示指定范围,例如a-fa-f,表示,表示a a到到f f范围以外的任何单个字符范围以外的任何单个字符2022/12/327第27页,本讲稿共70页LikeLike关键字举例关键字举例likelike格式格式检索范围检索范围Like Like Mc%Mc%以以McMc开头的所有字符串开头的所有字符串Like Like%inger%inger以字母以字母ingeringer结尾的所有字符串结尾的所有字符串Like Like _heryl_heryl以字母以字母herylheryl结尾的所有结尾的所有6 6个字母个字母的名称的名称Like Like M-M-ZingerZinger以以ingeringer结尾、以从结尾、以从M M到到Z Z的任何单的任何单个字母开头的所有字符串个字母开头的所有字符串Like Like Mc%Mc%以以 M M开头,且第二个字母不是开头,且第二个字母不是c c的的所有字符串所有字符串Like Like%en%en在任何位置包含字母在任何位置包含字母enen的所有字的所有字符串符串2022/12/328第28页,本讲稿共70页空值判断查询条件:空值判断查询条件:nullnull值表示字段的值表示字段的数据值未知或不可用,它并不表示零数据值未知或不可用,它并不表示零(数字值或二进制值)、零长度的字符(数字值或二进制值)、零长度的字符串或空白(字符值)串或空白(字符值)2022/12/329第29页,本讲稿共70页如果用户要查找的数据中本身就包含了通配符,如如果用户要查找的数据中本身就包含了通配符,如SQL_MailSQL_Mail,就需要使用转义字符来区分通配符与实就需要使用转义字符来区分通配符与实际存在的字符。其格式如下际存在的字符。其格式如下LIKE LIKE 字符匹配串字符匹配串 ESCAPE ESCAPE 转义字符转义字符例:例:查找对象名称为查找对象名称为SQL_M SQL_M 开头,开头,il il 结尾,中间结尾,中间有一个不确定字符的对象有一个不确定字符的对象select*from objectsselect*from objectswhere object_name like where object_name like SQL#_M_ilSQL#_M_il escape escape#/*/*这里使用了两个下划线这里使用了两个下划线_ _符号,前一个下划线符号,前一个下划线由于有逃逸字符在其前面作标识,因而被认为是由于有逃逸字符在其前面作标识,因而被认为是实际存在的下划线字符;后面一个下划线没有逃实际存在的下划线字符;后面一个下划线没有逃逸字符在其前面作标识,因此将它作为逸字符在其前面作标识,因此将它作为通配符通配符*/2022/12/330第30页,本讲稿共70页使用使用来将通配符指定为普通字符。来将通配符指定为普通字符。例如:例如:Select*from objectSelect*from objectWhere column1 like Where column1 like%54%54%将返回所有包含将返回所有包含54%54%的字符串的字符串2022/12/331第31页,本讲稿共70页GROUP BY GROUP BY 子句子句GROUP BY GROUP BY 子句指定查询结果的分组条件。其语法子句指定查询结果的分组条件。其语法如下:如下:GROUP BY ALL group_by_expression,.nGROUP BY ALL group_by_expression,.n WITH CUBE|ROLLUP WITH CUBE|ROLLUP 各参数说明如下:各参数说明如下:group_by_expressiongroup_by_expression:指明分组条件:指明分组条件group_by_expression group_by_expression 通常是一个列名,但不能是列的别通常是一个列名,但不能是列的别名。数据类型为名。数据类型为TEXTTEXT、NTEXTNTEXT、IMAGE IMAGE 或或BIT BIT 类型的类型的列不能作为分组条件列不能作为分组条件ALLALL:返回所有可能的查询结果组合,即使此组合中没有:返回所有可能的查询结果组合,即使此组合中没有任何满足任何满足WHERE WHERE 子句的数据。分组的统计列如果不满子句的数据。分组的统计列如果不满足查询条件,则将由足查询条件,则将由NULL NULL 值构成其数据。值构成其数据。ALL ALL 选项不选项不能与能与CUBECUBE或或ROLLUP ROLLUP 选项同时使用选项同时使用 2022/12/332第32页,本讲稿共70页CUBECUBE:除了返回由:除了返回由GROUP BY GROUP BY 子句指定的列外,还子句指定的列外,还返回按组统计的行。返回的结果先按分返回按组统计的行。返回的结果先按分组的第一个条件列排序显示,再按第二个条件列排序组的第一个条件列排序显示,再按第二个条件列排序显示,以此类推。统计行包括了显示,以此类推。统计行包括了GROUPGROUPBY BY 子句指定的列的各种组合的数据统计子句指定的列的各种组合的数据统计 ROLLUPROLLUP:与:与CUBE CUBE 不同的是,此选项对不同的是,此选项对GROUP BY GROUP BY 子句中的列顺序敏感,它只返回第一个分组条件子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行,改变列的顺序会使返回的结指定的列的统计行,改变列的顺序会使返回的结果的行数发生变化。果的行数发生变化。2022/12/333第33页,本讲稿共70页例如:例如:例:例:查询工作级别为查询工作级别为2 2 的员工姓名,查的员工姓名,查询结果按部门分组询结果按部门分组select e_name,dept_idselect e_name,dept_idfrom employeefrom employeewhere job_level=2where job_level=2group by dept_id,e_namegroup by dept_id,e_name2022/12/334第34页,本讲稿共70页CUBECUBE:除了返回由:除了返回由GROUP BY GROUP BY 子句指定的列外,还返回按子句指定的列外,还返回按组统计的行。返回的结果先组统计的行。返回的结果先按分组的第一个条件列排序按分组的第一个条件列排序显示,再按第二个条件列排显示,再按第二个条件列排序显示,以此类推。统计行序显示,以此类推。统计行包括了包括了GROUP BY GROUP BY 子句指定子句指定的列的各种组合的数据统计的列的各种组合的数据统计Select Select 所属部门,性别,所属部门,性别,AVG(AVG(工资工资)FROM)FROM 员工数据表员工数据表Group by Group by 所属部门,性别所属部门,性别With cubeWith cube所属部所属部门门性别性别平均工资平均工资项目部项目部男男2000项目部项目部女女3000项目部项目部null2500项目部全体员工的平均项目部全体员工的平均工资工资检验部检验部男男1750检验部检验部女女1000检验部检验部null1500检验部全体员工的平均检验部全体员工的平均工资工资录入部录入部男男1000录入部录入部null1000办公室办公室女女3000办公室办公室null3000nullnull1928所有员工的平均工资所有员工的平均工资null男男1625所有男性的平均工资所有男性的平均工资null女女2333所有女性的平均工资所有女性的平均工资2022/12/335第35页,本讲稿共70页ROLLUPROLLUP:与:与CUBE CUBE 不同的是,不同的是,此选项对此选项对GROUP BY GROUP BY 子句中子句中的列顺序敏感,它只返回第的列顺序敏感,它只返回第一个分组条件指定的列的统一个分组条件指定的列的统计行,改变列的顺序会使返计行,改变列的顺序会使返回的结果的行数发生变化。回的结果的行数发生变化。Select Select 所属部门,性别,所属部门,性别,AVG(AVG(工资工资)FROM)FROM 员工数据员工数据表表Group by Group by 所属部门,性别所属部门,性别With rollupWith rollup所属部门所属部门性别性别平均工资平均工资项目部项目部男男2000项目部项目部女女3000项目部项目部null2500项目部全体员工的平项目部全体员工的平均工资均工资检验部检验部男男1750检验部检验部女女1000检验部检验部null1500检验部全体员工的平检验部全体员工的平均工资均工资录入部录入部男男1000录入部录入部null1000办公室办公室女女3000办公室办公室null3000nullnull1928所有员工的平均工资所有员工的平均工资null男男1625null女女23332022/12/336第36页,本讲稿共70页若希望在查询结果总仅包含按照若希望在查询结果总仅包含按照性别分组后取得的平均值,则需性别分组后取得的平均值,则需要将要将group bygroup by子句中的子句中的“所属所属部门部门”和和“性别性别”字段的位字段的位置调换。置调换。Select Select 所属部门,性别,所属部门,性别,AVGAVG(工资工资)FROM)FROM 员工数据表员工数据表Group by Group by 性别,所属部门性别,所属部门With rollupWith rollup所属部所属部门门性别性别平均工资平均工资项目部项目部男男2000检验部检验部男男1750录入部录入部男男l1000null男男1625所有男性的平均工资所有男性的平均工资项目部项目部女女1000检验部检验部女女l1500录入部录入部女女1000null女女2333所有女性的平均工资所有女性的平均工资nullnull1928所有员工的平均工资所有员工的平均工资2022/12/337第37页,本讲稿共70页HAVING HAVING 子句子句HAVING 子句指定分组搜索条件。HAVING 子句通常与GROUP BY 子句一起使用。TEXT、NTEXT和IMAGE 数据类型不能用于HAVING 子句。其语法如下HAVING HAVING HAVING 子句与子句与WHERE WHERE 子句很相似,其区子句很相似,其区别在于其作用的对象不同。别在于其作用的对象不同。WHERE WHERE 子句子句作用于表和视图,作用于表和视图,HAVING HAVING 子句作用于组子句作用于组2022/12/338第38页,本讲稿共70页例如:例如:例:查询有多个员工的工资不低于例:查询有多个员工的工资不低于6000 6000 的部门编号的部门编号select dept_id,count(*)select dept_id,count(*)from employeefrom employeewhere e_wage=6000where e_wage=6000group by dept_idgroup by dept_idhaving count(*)1having count(*)12022/12/339第39页,本讲稿共70页ORDER BY ORDER BY 子句子句ORDER BY ORDER BY 子句指定查询结果的排序方式。其语法如下:子句指定查询结果的排序方式。其语法如下:ORDER BY order_by_expression ASC|DESC ORDER BY order_by_expression ASC|DESC ,.n,.n各参数说明如下:各参数说明如下:order_by_expressionorder_by_expression:指定排序的规则:指定排序的规则order_by_expression order_by_expression 可以是表或视图的列的名称或别可以是表或视图的列的名称或别名,如果名,如果SELECTSELECT语句中没有使用语句中没有使用DISTINCT DISTINCT 选项或选项或UNION UNION 操操作符,那么作符,那么ORDER BY ORDER BY 子句中可以包含子句中可以包含select list select list 中没有中没有出现的列名或别名。出现的列名或别名。ORDER BY ORDER BY 子句中也不能使用子句中也不能使用TEXTTEXT、NTEXTNTEXT和和IMAGE IMAGE 数据类型数据类型 ASCASC:指明查询结果按升序排列这是系统默认值:指明查询结果按升序排列这是系统默认值 DESCDESC:指明查询结果按降序排列:指明查询结果按降序排列2022/12/340第40页,本讲稿共70页COMPUTE COMPUTE 子句子句COMPUTE COMPUTE 子句在查询结果的末尾生成一个汇总数据行,子句在查询结果的末尾生成一个汇总数据行,其语法如下:其语法如下:COMPUTECOMPUTE AVG|COUNT|MAX|MIN|SUM AVG|COUNT|MAX|MIN|SUM(expression),.n(expression),.n BY expression,.n BY expression,.n 各参数说明如下:各参数说明如下:AVG|COUNT|MAX|MIN|SUMAVG|COUNT|MAX|MIN|SUM:以上参数与对应:以上参数与对应的函数有相同的含义,这些函数均会忽略的函数有相同的含义,这些函数均会忽略NULLNULL值且值且DISTINCTDISTINCT选项不能在此使用选项不能在此使用 2022/12/341第41页,本讲稿共70页expressionexpression:指定需要统计的列的名称,此列必须包:指定需要统计的列的名称,此列必须包含于含于SELECTSELECT列表中,且不能用别名。列表中,且不能用别名。COMPUTECOMPUTE子句子句中也不能使用中也不能使用TEXTTEXT、NTEXTNTEXT和和IMAGE IMAGE 数据类型数据类型 BY expressionBY expression:在查询结果中生成分类统计的行。:在查询结果中生成分类统计的行。如果使用此选项,则必须同时使用如果使用此选项,则必须同时使用ORDER BY ORDER BY 子句。子句。expression expression 是对应的是对应的ORDER BY ORDER BY 子句中的子句中的order_by_expression order_by_expression 的子集或全集的子集或全集2022/12/342第42页,本讲稿共70页例如:例如:Select Select 员工姓名,所属部门,工资员工姓名,所属部门,工资 From From 员工数据表员工数据表Order by Order by 所属部门所属部门Coumpute sum(Coumpute sum(工资工资)by)by 所属部门所属部门注意:在加入注意:在加入by by 关键字及其分组字段的同关键字及其分组字段的同时必须将这个分组字段同时作为排序条时必须将这个分组字段同时作为排序条件,否则查询会出错。件,否则查询会出错。2022/12/343第43页,本讲稿共70页UNION UNION 子句子句UNION UNION 操作符将两个或两个以上的查询结果合并操作符将两个或两个以上的查询结果合并为一个结果集。它与使用连接查询为一个结果集。它与使用连接查询合并两个表的列是不同的,使用合并两个表的列是不同的,使用UNION UNION 操作符合并查操作符合并查询结果需要遵循两个基本规则:列的数目和顺序在询结果需要遵循两个基本规则:列的数目和顺序在所有查询中必须是一致的;数据类型必须兼容所有查询中必须是一致的;数据类型必须兼容其语法如下:其语法如下:Select Select 语句语句UNION ALLUNION ALLSelect Select 语句语句2022/12/344第44页,本讲稿共70页注意:注意:使用使用unionunion子句获得的结果集的字段名称与子句获得的结果集的字段名称与unionunion运算符运算符 之前的之前的selectselect语句结果集中的字段名相同,语句结果集中的字段名相同,unionunion运算符之后的运算符之后的selectselect语句结果集的字段名将语句结果集的字段名将被忽略。被忽略。在默认情况下,在默认情况下,unionunion运算符将从最终结果集中删除运算符将从最终结果集中删除重复的记录。如果希望最终结果集保留所有的记重复的记录。如果希望最终结果集保留所有的记录,则必须使用录,则必须使用allall关键字。关键字。2022/12/345第45页,本讲稿共70页在使用在使用unionunion运算符时,单独的运算符时,单独的selectselect语句中不能语句中不能包含其自己的包含其自己的order byorder by或或coumputecoumpute子句子句只能在最后一个只能在最后一个selectselect语句的后面使用一个语句的后面使用一个order order by by 或或compute compute 子句,此时,该子句将适用于最终的子句,此时,该子句将适用于最终的组合结果集组合结果集若需要对查询结果进行分组以及在分组后对结果若需要对查询结果进行分组以及在分组后对结果使用使用havinghaving子句进行过滤,则必须在单独的子句进行过滤,则必须在单独的selectselect语句中指定语句中指定group bygroup by和和havinghaving子句。子句。2022/12/346第46页,本讲稿共70页联接查询联接查询通过使用联接查询,可以根据各个数据表之间的逻辑关系从两个通过使用联接查询,可以根据各个数据表之间的逻辑关系从两个或多个数据表中检索数据。或多个数据表中检索数据。定义数据表之间的关联方式:定义数据表之间的关联方式:1 1 在数据表中指定用于联接的字段。典型的联接条件是在一个数据在数据表中指定用于联接的字段。典型的联接条件是在一个数据表中指定外键,同时在另一个数据表中指定与其关联的主键。表中指定外键,同时在另一个数据表中指定与其关联的主键。2 2 在在select select 语句中指定比较各字段值时要使用的逻辑运算符。语句中指定比较各字段值时要使用的逻辑运算符。联接的类型:联接的类型:内连接内连接外联接:左向外联接,右向外联接,完整外联接外联接:左向外联接,右向外联接,完整外联接交叉联接交叉联接202