MS-SQL中多个表或结果集的组合的方法
来源:互联网 发布:网络安全技术期末考试 编辑:程序博客网 时间:2024/06/07 00:50
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
在
MS-
SQL如果将两个或更多查询的结果
组合为单个结果集,该结果集包含联合查询中的所有查询的全部行,常用的
方法如下:
一. 使用union或unionAll语句
1. union与unionall语句的区别
Ø UNION
组合多个表(或结果集)并将其作为单个结果集返回;
Ø UNIONALL在结果中包含所有的行,包括重复行。
Ø 也就是说,使用UNION
组合两个表时,将重复的记录删除;而使用UNIONALL
组合两多个表时,不考虑结果集中是否存在重复记录。
2. 使用UNION运算符时请注意:
Ø 所有查询中的列数和列的顺序必须相同。
在使用UNION运算符
组合的语句中,所有显示列表的数目必须相同(列表内容可以包括:列名、算术表达式、聚合函数等);
Ø 数据类型必须兼容。
在使用UNION
组合的结果集中的相应列必须具有相同数据类型,或者两种数据类型之间存在隐性数据转换,或提供了类型转换。例如,在datetime数据类型的列和binary数据类型的列之间不可能存在UNION运算符,除非提供了显式转换,而在money数据类型的列和int数据类型的列之间可以存在UNION运算符,因为它们可以进行隐性转换。
Ø 用UNION运算符
组合的各语句中对应的结果集列出现的顺序必须相同,因为UNION运算符是按照各个查询给定的顺序逐个比较各列。
3. 与其它Transact-
SQL语句一起使用UNION语句时,应注意:
Ø 如果在有UNION的语句中使用INTO语句,则只能在最终表(或结果集)中使用,如果要在单个表(或结果集)中使用INTO语句,
MS-
SQL将会提示错误;
错误语句:SelectAID,AName,ADemoIntoFromATableUnionAllSelectBID,BName,BDemoIntoFromBtable
Ø 只有在UNION语句的结尾,才允许使用ORDERBY和COMPUTE子句以定义最终结果的顺序或计算汇总值。不能在组建UNION语句的单独查询中使用这些子句。
错误语句:
SelectAID,AName,ADemoFromATableorderbyAID
UnionAll
SelectBID,BName,BDemoFromBTableOrderByBID
可以这样写:
Select*From
(SelectAID,AName,ADemoFromATableUnionAllSelectBID,BName,BDemoFromBTable)a
OrderBya.AID
也可以这样写:
SelectAID,AName,ADemoFromATable
UnionAll
SelectBID,BName,BDemoFromBTable
OrderByAID
此处之所以按AID来排序,是因为
MS-
SQL中将最后的结果表中的第一列命名为AID。某些DB
MS的系统并不对使用不同列名的查询的表列命名,这样就不能使用OrderBy列名的方式来排序,不过可以引用结果表中列的顺序来排序,例如:OrderBy1,则相当于OrderByAID
Ø GROUPBY和HAVING子句只能在单独的查询中使用;它们不能用来影响最终的结果集。
Ø UNION运算符可用于INSERT语句中。
FORBROWSE子句不能在包含UNION上一页