sql查詢union
Ⅰ SQl語句的union問題
你想像的是什麼樣的?
看一下幫助吧:
UNION 運算符
將兩個或更多查詢的結果組合為單個結果集,該結果集包含聯合查詢中的所有查詢的全部行。這與使用聯接組合兩個表中的列不同。
使用 UNION 組合兩個查詢的結果集的基滾兩個基本規則是:
所有查詢中的列數和列的順序必須相同。
數據類型必須兼容。
語法
{ < query specification > | ( < query expression > ) }
UNION [ ALL ]
< query specification | ( < query expression > )
[ UNION [ ALL ] < query specification | ( < query expression > )
[ ...n ] ]
參數
< query_specification > | ( < query_expression > )
是查詢規范或查詢表達式,用以返回與另一個查詢規范或查詢表達式所返回的數據組合的數據。作為 UNION 運算一部分的列定義可以不相同,但它們必須通過隱性轉換實現兼容。
下表說明數據類型與相應 (ith) 列的選項的比較規則。
ith 列的數據類型 結果表中 ith 列的數據類型
非數據兼容冊鋒唯類型(數據轉換不由 Microsoft® SQL Server™ 隱性處理)。 SQL Server 返回的錯誤。
長度為 L1 和州培 L2 的固定長度 char。 長度與 L1 和 L2 中較長的那個相等的固定長度 char。
長度為 L1 和 L2 的固定長度 binary。 長度與 L1 和 L2 中較長的那個相等的固定長度 binary。
任一列或兩列都是可變長度 char。 長度與為 ith 列指定的最大長度相等的可變長度 char。
任一列或兩列都是可變長度 binary。 長度與為 ith 列指定的最大長度相等的可變長度 binary。
兩列都是數字數據類型(如 smallint、int、float、money)。 與兩列的最大精度相等的數據類型。例如,如果表 A 的 ith 列是 int 類型,表 B 的 ith 列是 float 類型,則 ith 列在結果表中的數據類型是 float,因為 float 比 int 更精確。
兩列的描述都指定 NOT NULL。 指定 NOT NULL。
UNION
指定組合多個結果集並將其作為單個結果集返回。
ALL
在結果中包含所有的行,包括重復行。如果沒有指定,則刪除重復行。
Ⅱ SQL語句中UNION排序問題
代碼改寫如下:
select a.輸出欄位1, a.輸出欄位2, a.輸出欄位3, ...a.輸出欄位n from
(select * ,1 as px from 表A where 軟體名稱 like '%迅雷%'
union
select * ,2 from 表A where 軟體簡介 like '%迅雷%') a order by a.px
如果不在意多出一個用於排序的欄位「px」的話,代碼可簡化如下
select * ,1 as px from 表A where 軟體名稱 like '%迅雷%' order by 1
union
select * ,2 from 表A where 軟體簡介 like '%迅雷%'
***注意,因人為增加了一個排序用數字欄位(第一個查詢用1,第二個用2),UNION關鍵字的刪除兩個查詢之間重復數據的功能會不起作用,如果需要保持刪除重復記錄的能力,則需要使用DISTINC關鍵字,例如:
select distinct a.輸出欄位1, a.輸出欄位2, a.輸出欄位3, ...a.輸出欄位n from
(select * ,1 as px from 表A where 軟體名稱 like '%迅雷%'
union
select * ,2 from 表A where 軟體簡介 like '%迅雷%') a order by a.px
上機試一試吧