SQL语句UNION和UNIONALL使用.docx_第1页
SQL语句UNION和UNIONALL使用.docx_第2页
SQL语句UNION和UNIONALL使用.docx_第3页
全文预览已结束

下载本文档

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

文档简介

SQL语句 UNION 和 UNION ALL 使用(二)在MS-SQL如果将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行,常用的方法如下:一. 使用union 或union All语句1. union 与 union all语句的区别 UNION 组合多个表(或结果集)并将其作为单个结果集返回; UNION ALL 在结果中包含所有的行,包括重复行。 也就是说,使用UNION组合两个表时,将重复的记录删除;而使用UNION ALL组合两多个表时,不考虑结果集中是否存在重复记录,包括重复行。2. 使用 UNION 运算符时请注意:(1) 所有查询中的列数和列的顺序必须相同。在使用 UNION 运算符组合的语句中,所有显示列表的数目必须相同(列表内容可以包括:列名、算术表达式、聚合函数等);(2) 数据类型必须兼容。在使用 UNION 组合的结果集中的相应列必须具有相同数据类型,或者两种数据类型之间存在隐性数据转换,或提供了类型转换。例如,在datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。(3) 用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。 3. 与其它 Transact-SQL语句一起使用 UNION 语句时,应注意:(1) 如果在有UNION的语句中使用INTO语句,则只能在最终表(或结果集)中使用,如果要在单个表(或结果集)中使用INTO语句,MS-SQL将会提示错误;错误语句:Select AID,AName,ADemo Into From ATable Union All Select BID,BName,BDemo Into From Btable(2) 只有在 UNION 语句的结尾,才允许使用 ORDER BY 和 COMPUTE 子句以定义最终结果的顺序或计算汇总值。不能在组建 UNION 语句的单独查询中使用这些子句。错误语句:Select AID,AName,ADemo From ATable order by AIDUnion All Select BID,BName,BDemo From BTable Order By BID 正解可以这样写:Select * From (Select AID,AName,ADemo From ATable Union All Select BID,BName,BDemo From BTable) a Order By a.AID正解也可以这样写:Select AID,AName,ADemo From ATable Union AllSelect BID,BName,BDemo From BTableOrder By AID此处之所以按AID来排序,是因为MS-SQL中将最后的结果表中的第一列命名为AID。某些DBMS的系统并不对使用不同列名的查询的表列命名,这样就不能使用Order By 列名的方式来排序,不过可以引用结果表中列的顺序来排序,例如:Order By 1,则相当于Order By AID(1) GROUP BY 和 HAVING 子句只能在单独的查询中使用;它们不能用来影响最终的结果集。(2) UNION 运算符可用于 INSERT 语句中。FOR BROWSE 子句不能在包含 UNION 运算符的语句中使用。(FOR BROWSE使用及说明可以参考SELECT语句的说明)注意:某些DBMS系统在由UNION组合查询的Select子句中不允许使用函数和表达式。二. 使用except 或 INTERSECT 运算符与UNION相似,except 或 INTERSECT 运算符也可以将多个表(或结果集)组合生成一个新表(或结果集),只是结果不同而已。1. Except运算符和 UNION 指令类似, Except也是对两个 SQL 语句所产生的结果做处理的。不同的地方是Except在每一个表(或结果集)与第二个表(或结果集)比较前,已从每一个表的结果集中清除了所有重复的信息。也就是从Except运算所得到的结果集绝不会包含重复的记录(行)。例如:我们要在Table_A(学生信息表)与Table_B(学生必修课完成信息表)中找出未完成的学生信息Select * From Table_AExceptSelect * From Table_B注意:许多DBMS系统不支持EXCEPT运算符,则此时不得不使用Left Outer Join运算符来实现。而在Oracle中的Minus与EXCEPT相似。2. INTERSECT运算符和 UNION 指令类似, INTERSECT 也是对两个 SQL 语句所产生的结果做处理的。不同的地方是,UNION 是联集,而 INTERSECT 是交集。也就是说,INTERSECT生成的结果集是多个表或结果集所共有的记录(行)。Select AID,AName,ADemo From ATable INTERSECTSelect BID,BName,BDemo From Btable三. 使用UNION Corresponding组合来自两个或多个与UNION不兼容的表中的行例如:有两个表Create Table Table_A(ID int,office int,address varchar(20),department char(5),pay money)Create Table Table_B(office int,ID int,address varchar

温馨提示

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

评论

0/150

提交评论