洛枫学院

洛枫学院 » Mssql » 运用sqlserver Union和SQL Union All使用方法做全站搜索(合并搜索结构)

页码: 1

运用sqlserver Union和SQL Union All使用方法做全站搜索(合并搜索结构)

- 一片云 2013-03-16 20:11


UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]

我们用和上一页同样的例子来显示出 UNION ALL 和 UNION 的不同

UNION ALL查询允许您结合的结果,设置2个或更多的“select”查询。它返回的所有行(即使该行存在超过一个的“select”报表)。

联盟内的每个SQL语句的所有查询必须在结果中相同的字段数套类似的数据类型。
语法一个UNION ALL查询:

代码 复制 - 运行

select field1, field2, . field_n
from tables
UNION ALL
select field1, field2, . field_n
from tables;



UNION ALL 和 UNION 区别:
如果tables 出现在供应商和订单表,它会多次出现在你的结果集。UNION ALL 查询不会删除重复。
所以需要删除重复的数据需要使用UNION(注意该方法比较占用资源);


1.当两个查询集使用union集合运算时,union会删除查询集中重复的记录。
2.当两个查询集使用union all集合运算时,union all会不删除查询集中重复的记录。
3.如果合并两个查询集都无重复这个时候unionunion all是等价的。
4.在3.的这个时候,建议使用union all避免因检索重复带来不必要的开销。


下面是一些代码实例:

代码 复制 - 运行

--合并重复行 
select * from A 
union 
select * from B 

--不合并重复行 
select * from A 
union all 
select * from B 

按某个字段排序 
--合并重复行 
select * 
from ( 
select * from A 
union 
select * from B) AS T 
order by 字段名 

--不合并重复行 
select * 
from ( 
select * from A 
union all 
select * from B) AS T 
order by 字段名 

搜索出来后怎么区分数据属于什么表呢?
其实可以使用在搜索出来的表添加一个固定的字段;
下面是一个完整的实例:
却别合并的数据分别来自什么表?
A、B两个表里面的Id和title字段,rul这个字段是一个查询的时候添加的字段;
可以在查询出来的数据列表中判断属于什么表的数据信息!方便跳转到相关的类型的数据展示页里面;

代码 复制 - 运行

SELECT * FROM(

 SELECT [ID]
    ,[title]
    ,'t1' AS [url]
   FROM [A].[dbo].[table1]

 UNION ALL

 SELECT [ID]
    ,[title]
    ,'t2' AS [url]
   FROM [B].[dbo].[table2]

) AS T
ORDER BY AddTime desc



页码: 1