sql取並集
『壹』 sql查詢中集合的並運算符是:
http://tech.sina.com.cn/roll/2006-10-01/1441116751.shtml
UNION、EXCEPT 以及 INTERSECT 集合運算符使您能夠將兩個或更多外層查詢組合成單個查詢。執行用這些集合運算符連接的每個查詢並組合各個查詢的結果。根據運算符不同,產生不同的結果。
2、UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
在下列 UNION 運算符的示例中,查詢返回薪水高於 $21,000、有管理責任且工齡少於 8 年的人員的姓名:
(1)
SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
UNION
(2)
SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
ORDER BY ID
各個查詢的結果如下:
(1)
(2)
資料庫管理程序組合這兩個查詢的結果,消除重復行,並按升序返回最終結果。
如果在帶有任何集合運算符的查詢中使用 ORDER BY 子句,則必須在最後一個查詢之後寫該子句。系統對組合的回答集進行排序。如果兩個表中的列名不同,則組合的結果表沒有相應列的名稱。替代地,將這些列按其出現的順序編號。因此,如果想要對結果表進行排序,則必須在 ORDER BY 子句中指定列號。
3、EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
在下列 EXCEPT 運算符的示例中,查詢返回收入超過 $21,000 但沒有經理職位且工齡為 8 年或更長的所有人員的姓名。
SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
EXCEPT
SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
各個查詢的結果在關於 UNION 的一節中列出。上面的語句產生下列結果:
4、INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
在下列 INTERSECT 運算符的示例中,查詢返回收入超過 $21,000 有管理責任且工齡少於8年的雇員的姓名和 ID。
SELECT ID, NAME FROM STAFF WHERE SALARY > 21000
INTERSECT
SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
各個查詢的結果在關於 UNION 的一節中列出。這兩個使用 INTERSECT 的查詢的結果為:
5、當使用 UNION、EXCEPT 以及 INTERSECT 運算符時,記住下列事項:
運算符的查詢選擇列表中的所有對應項必須是相容的。有關更多信息,參見 SQL Reference 中的數據類型相容性表。
ORDER BY 子句(如果使用該子句的話)必須放在最後一個帶有集合運算符的查詢後面。對於每個運算符來說,如果列的名稱與查詢的選擇列表中對應項的名稱相同,則該列名只能在 ORDER BY 子句中使用。
在具有相同數據類型和相同長度的列之間進行的運算會產生一個具有該類型和長度的列。針對 UNION、EXCEPT 以及 INTERSECT 集合運算符的結果,參見 SQL Reference 中結果數據類型的規則。
『貳』 如何使用sql查詢多個表的並集
解析:
- 用關聯查詢join。從需求看,要求變1和表2隻要有一個非空就要得到那行數據,所以用full outer join。
- 要求空數據用0表示,nvl可以解決。
解決方案[修改版]:
select b.ID1,b.ID2,NVL(a.庫存,0) as 庫存, NVL(b.銷量,0) as 銷量
from 表1 a
full outer join 表2 b
on a.省 = b.ID1 and a.產品 =b.ID2;
『叄』 如何用一條sql語句實現兩個表的並集查詢
交集就是兩表的join 連接查詢
如:SELECT ... FROM a JOIN b ON a.id=b.id
並集可用Union
差集可用空值判斷。
如:SELECT ... FROM a LEFT JOIN b ON a.id=b.id WHERE isNull(b.id)=true
『肆』 SQL集合運算:差集、交集、並集
原
SQL集合運算:差集、交集、並集
2011年03月30日 15:41:00
閱讀數:15446
1、差集( except )
select a from t_a
except
select a from t_b
-- 也可寫作:
select a from t_a where a not in (select a from t_b)
-- 多個欄位時:
select a,b from t_a
except
select a,b from t_b
-- 多欄位的查集也可寫成:
select a,b from t_a where (a,b) not in (select a,b from t_b)
2、交集( intersect )
select a from t_a
intersect
select a from t_b
-- 也可寫作:
select a from t_a where a in (select a from t_b)
3、並集( union )
select a from t_a
union distinct
select a from t_b