iT邦幫忙

0

SQL UNION Operator-note

  • 分享至 

  • xImage
  •  

UNION ALL 用法

w3schools 給的這個範例來說

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

Edit the SQL Statement
SELECT City, Country FROM Customers
WHERE Country='Germany'

這個部分會顯示十一列德國城市的資料

SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

而這個部分會顯示三列德國城市的資料

然而當我們在兩個SELECT中間加上UNION ALL的話

最終顯示的資料就會是十四列,也就是兩個SELECT結果的相加
也意味者即使當中有重複的資料,也會被列出來,而這個範例也是如此
這個部分詳細可以直接去玩玩看,就可以知道是哪一些資料有重複
w3school_SQL_TryEditorv1.6

UNION 用法

同樣的兩個SQL但是換成UNION呢?

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

相較於UNION ALL
最終顯示的資料會是十三列,如果有點進去玩玩看的話可以發現其中Berlin這個城市兩個資料表都有,屬於重複
Customers這個資料表中選出的有11列,Suppliers的有3列
因此最後顯示的列數會是11+3-1 = 13列,因為要不重複的資料,如果有重複的話,那筆資料只顯示一筆

前面的SQL考慮的是城市,因此最終如果同樣的城市顯示兩筆的話感覺怪怪的,加上前面又沒有其他可以用於判斷這個資料表是幹嘛用的欄位名稱,因此重複的資料就只顯示一筆就好

不然再資料型別相似及SELECT語句下的一模一樣的情況下,幾乎都是將結果合併
下面的結果接續上面的結果,如這個範例

SELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers

91+29 = 120列
這個範例顯示的結果是「列出所有在資料庫中的客戶及供應商的聯絡人名字、城市及國家」

筆記來源:SQL UNION Operator


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言