Union ,Union ALL的用法

在项目中遇见到查询参考此报价地区的地区信息,并且把此地区的信息与查询出来的参考报价地区信息组成一张临时表,这用到UNION 或则UNION all,

SQL 代码如下:

SQL 1
1 CREATE TYPE TY_AreaANDGoods AS TABLE(
2 AreaID INT,
3 TypeID INT
4 )
5 DECLARE @dt TY_AreaANDGoods;
6 INSERT INTO @dt VALUES(1,1);
7 SELECT aa.AreaId,aa.GoodsTypeId FROM MD_Area aa,@dt tt WHERE aa.QuotationType =tt.AreaID AND aa.GoodsTypeId = tt.TypeID
8 UNION
9 SELECT AreaID,TypeID FROM @dt

我创建表值变量类型,并声明此类型的变量,用此变量来传递数据,然后利用UNION来实现功能要求。

用UNION需要注意:

1、所有UNION的查询必须在SELECT 列表项中有相同的列数。

2、UNION查询的结果级的列标题仅从第一个查询处获得。

3、查询中对应咧的数据类型必须隐式一致。

4、UNION查询的默认返回选项为Distinct。

SQL 2
 1 CREATE TABLE tb_test
2 (
3 col INT IDENTITY(1,1),
4 Name char(10)
5 )
6 CREATE TABLE tb_test2
7 (
8 COL INT IDENTITY(1,1),
9 Name NVARCHAR(20)
10 )
11 CREATE TABLE tb_Test3(
12 COL INT IDENTITY(1,1),
13 Name nvarchar(10)
14 )
15 INSERT INTO tb_test VALUES('AAA');
16 INSERT INTO tb_test VALUES('BBB');
17 INSERT INTO tb_test2 VALUES('CCCCCCCCCCCCC');
18 INSERT INTO tb_test2 VALUES('CCCCCCCCCCCCCCCCCCC');
19 INSERT INTO tb_test2 VALUES('AAA');
20 INSERT INTO tb_Test3 VALUES('DDD');
21 INSERT INTO tb_Test3 VALUES('FFF');
22 SELECT Name FROM tb_test
23 UNION
24 SELECT Name FROM tb_test2
25 UNION
26 SELECT Name FROM tb_Test3


可以看到查询处的结果已经经过DISTINCT处理,如果想全部显示需要做如下改变:

sql 3
1 SELECT Name  AS TEST FROM tb_test
2 UNION ALL
3 SELECT Name FROM tb_test2
4 UNION ALL
5 SELECT Name FROM tb_Test3



原文地址:https://www.cnblogs.com/hfliyi/p/2378721.html