网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.导出表数据脚本的存储过程.
.SQL Server2000数据库文件损坏时.
.SQL Server 2000 在 win2003上安.
.讲解孤立用户和对象名无效问题的.
.如何快速杀死占用过多资源(CPU,内.
.如何让你的SQL运行得更快.
.个人经验总结:SQL Server数据库.
.查询数据库表和字段sql语句.
.sql分段处理删除大量数据.
.袖珍数据库连接查询手册.
.SQL Server SA权限总结经典技术.
.深入浅出SQL之左连接、右连接和全.
.sql2000挂起无法安装的问题.
.初学者需要掌握的数据库设计词汇.
.创建一个表时表中列的顺序对性能.
.SQL Server中查询时显示行号的方.
.用SQL批量插入数据.
.数据库查询结果的动态排序(2).
.在SQL Server中通过.NET远程的执.
.SQL Server根据查询结果,生成XML.

MS-SQL中多个表或结果集的组合的方法

发表日期:2007-3-3


    在MS-SQL如果将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行,常用的方法如下:
一.       使用union 或union All语句
1.   union 与 union all语句的区别
Ø         UNION 组合多个表(或结果集)并将其作为单个结果集返回;
Ø         UNION ALL 在结果中包含所有的行,包括重复行。
Ø         也就是说,使用UNION组合两个表时,将重复的记录删除;而使用UNION ALL组合两多个表时,不考虑结果集中是否存在重复记录。
2.   使用 UNION 运算符时请注意:
Ø         所有查询中的列数和列的顺序必须相同。
     在使用 UNION 运算符组合的语句中,所有显示列表的数目必须相同(列表内容可以包括:列名、算术表达式、聚合函数等);
Ø         数据类型必须兼容。
     在使用 UNION 组合的结果集中的相应列必须具有相同数据类型,或者两种数据类型之间存在隐性数据转换,或提供了类型转换。例如,在datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。
Ø         用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。   
3.   与其它 Transact-SQL语句一起使用 UNION 语句时,应注意:
Ø         如果在有UNION的语句中使用INTO语句,则只能在最终表(或结果集)中使用,如果要在单个表(或结果集)中使用INTO语句,MS-SQL将会提示错误;
错误语句:Select AID,AName,ADemo Into From ATable Union All Select BID,BName,BDemo Into From Btable
Ø         只有在 UNION 语句的结尾,才允许使用 ORDER BY 和 COMPUTE 子句以定义最终结果的顺序或计算汇总值。不能在组建 UNION 语句的单独查询中使用这些子句。
错误语句:
Select AID,AName,ADemo From ATable order by AID
Union 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 All
    Select BID,BName,BDemo From BTable
      Order By AID
   此处之所以按AID来排序,是因为MS-SQL中将最后的结果表中的第一列命名为AID。某些DBMS的系统并不对使用不同列名的查询的表列命名,这样就不能使用Order By 列名的方式来排序,不过可以引用结果表中列的顺序来排序,例如:Order By 1,则相当于Order By AID
Ø         GROUP BY 和 HAVING 子句只能在单独的查询中使用;它们不能用来影响最终的结果集。
Ø         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_A
       Except
       Select * 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
       INTERSECT
Select 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(20),department char(5))
   可以使用UNION Corresponding来获取两个表中有共同列名的列中数据:
   Select * From table_A UNION Corresponding Select * From Table_b
  
  
注意:并不是所有的DBMS都支持UNION Corresponding运算,包括MS-SQL Server。
http://blog.csdn.net/sxycgxj/archive/2007/03/02/1518751.aspx
上一篇:sql语句查询结果合并union all用法 人气:7969
下一篇:SQL优化34条 人气:4647
浏览全部sql server的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐