UNION ALL 用法
以 w3schools
给的这个範例来说
SELECT City, Country FROM CustomersWHERE Country='Germany'UNION ALLSELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City;Edit the SQL Statement
SELECT City, Country FROM CustomersWHERE Country='Germany'
这个部分会显示十一列德国城市的资料
SELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City;
而这个部分会显示三列德国城市的资料
然而当我们在两个SELECT
中间加上UNION ALL
的话
最终显示的资料就会是十四列,也就是两个SELECT
结果的相加
也意味者即使当中有重複的资料,也会被列出来,而这个範例也是如此
这个部分详细可以直接去玩玩看,就可以知道是哪一些资料有重複
w3school_SQL_TryEditorv1.6
UNION 用法
同样的两个SQL
但是换成UNION
呢?
SELECT City, Country FROM CustomersWHERE Country='Germany'UNIONSELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City;
相较于UNION ALL
最终显示的资料会是十三列,如果有点进去玩玩看的话可以发现其中Berlin
这个城市两个资料表都有,属于重複Customers
这个资料表中选出的有11列,Suppliers
的有3列
因此最后显示的列数会是11+3-1 = 13
列,因为要不重複的资料,如果有重複的话,那笔资料只显示一笔
前面的SQL
考虑的是城市,因此最终如果同样的城市显示两笔的话感觉怪怪的,加上前面又没有其他可以用于判断这个资料表是干嘛用的栏位名称,因此重複的资料就只显示一笔就好
不然再资料型别相似及SELECT
语句下的一模一样的情况下,几乎都是将结果合併
下面的结果接续上面的结果,如这个範例
SELECT 'Customer' AS Type, ContactName, City, CountryFROM CustomersUNIONSELECT 'Supplier', ContactName, City, CountryFROM Suppliers
91+29 = 120列
这个範例显示的结果是「列出所有在资料库中的客户及供应商的联络人名字、城市及国家」
笔记来源:SQL UNION Operator