MYSQL中的union方法用法
MYSQL中的UNION
UNION在進行錶鏈接後會篩選掉重複的記錄,所以在錶鏈接後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。
舉例說明:
select * from table1 union select * from table2
這個SQL在執行時先取出兩個表的結果,再用排序空間進行排序刪除重複的記錄,最後返回結果集,如果表資料量大的話可能會導致用磁碟進行排序。
MySQL中的UNION ALL
UNION ALL只是簡單的將兩個結果合併後就返回。這樣,如果返回的兩個結果集中有重複的資料,那麼返回的結果集就會包含重複的資料了。
舉例說明:
select * from table1 union all select * from table2
注: 使用 UNION 時 前一個 select column的個數要等於後一個select column的個數
如: table1: (id,createDate,lastUpdateDate,desc,num,hashCode),
table2: (id,createDate,lastUpdateDate,desc)
如果現在使用: select * from table1 UNION ALL select * from table2 則是不會成功的, 資料庫為報:
Error
The used SELECT statements have a different number of columns
這是提示查詢的兩張表的欄位不統一,如果table1比table2的欄位內容多,可以使用空字串來代替
select id,createDate,lastUpdateDate,desc,num,hashCode from table1 UNION ALL select id,createDate,lastUpdateDate,desc,'','' from table2如果裡面有不想要的,千萬要記住前面查詢內容要和後面查詢內容的欄位個數要一樣,前面你查詢4個,後面也要相應的放4個,這樣就不會提示引數數量不同的錯誤了。
其實稍稍修改一下就可以了
對於 'select id,createDate,desc,hasCode from table1' 可以任意選擇4個field
從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複的資料的話,那麼就使用UNION ALL。
如果遇到兩張表資料不同來集合查詢,可以使用union all這個函式進行操作
SELECT COUNT(c.a) FROM (
(SELECT UID a,ID,SERIAL,ParkName,CardNO,ScoreRealPay,PayFlag,PayType,Createtime FROM cp_consumption_record WHERE UID=761 AND PayFlag=1 ORDER BY Createtime DESC) UNION ALL (SELECT UID a,CpResID,CpParkID,ParkSERIAL,CarCode,Price,BusinessType,CardNO,CreateDate
FROM cp_reservation WHERE UID=761 AND BusinessType IN(1,2,3) ORDER BY CreateDate DESC)
) c
這是查詢結果集共有多少條資料,
如果還有查詢條件,直接在c後面新增就可以,比如按照時間進行查詢
SELECT c.UID,c.ScoreRealPay,c.PayFlag,c.PayType FROM (
(SELECT UID AS UID,ID AS ID,SERIAL AS SERIAL ,ParkName AS ParkName,CardNO CardNO,ScoreRealPay ScoreRealPay,PayFlag PayFlag,PayType PayType,Createtime Createtime FROM cp_consumption_record WHERE UID=761 AND PayFlag=1 ORDER BY Createtime DESC) UNION ALL (SELECT
UID a,CpResID,CpParkID,ParkSERIAL,CarCode,Price,BusinessType,CardNO,CreateDate FROM cp_reservation WHERE UID=761 AND BusinessType IN(1,2,3) ORDER BY CreateDate DESC)
) c ORDER BY Createtime DESC/ASC
這裡強調一下,你要按照什麼樣的條件進行查詢時,要分別在select子查詢中新增上條件,最後在按照統一的時間倒序或者正序
注:
預設的情況下,UNION 子句不返回重複的記錄.如果想顯示所有記錄,可以加ALL選項
UNION運算要求查詢具有相同數目的欄位.但是,欄位資料型別不必相同.