sql並集查詢
『壹』 如何使用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交集、並集查詢
寫函數,自己計算
『叄』 如何用sql查詢兩個不同表的並集
select *
from base_bb,base_aa
----
以上語句是對兩表沒有連接條件的情況
只要加上兩表連接的條件,只要連接條件是1對1的關系,就實現你的要求
如果你找不到兩表的1對1的關系,只能人為地添加一id自增列作為連接條件再連接
例如
--把base_aa添加自增列id再把結果保存進#t1
select id=IDENTITY(int,1,1),*
into #t1
from base_aa
--把base_bb添加自增列id再把結果保存進#t1
select id=IDENTITY(int,1,1),*
into #t2
from base_bb
--以兩表的id列為key連接兩表
--這里會比最終效果多出兩個多餘id列,你只要這里列舉你需要顯示的列就行
select *
from #t1 a inner join #t2 b
on #t1.id = #t2.id
--刪除臨時表
drop table #t1
drop table #t2
『肆』 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
『伍』 如何用一條sql語句實現兩個表的並集查詢
是求並集,sql中用union實現,要求關系R和關系S的屬性數目相同,union模式是排重的,用union all保留重復值
select * from r
union
select * from s
『陸』 sql的幾種常見查詢方式
一、內連接(Inner Join)
select*fromainnerjoinbona.name=b.name;
此語句的結果為同時匹配表a和表b的記錄集。即內連接取的是兩個表的交集。
二、全外連接(full outer join)
select*fromafullouterjoinbona.name=b.name;
此語句的結果為表a與表b的並集,即任意一個表的內容都將被查詢出來,如果另一個表無對應的項,則顯示為null
select*fromafullouterjoinbona.name=b.namewherea.nameisnullorb.nameisnull;
此語句的結果為表a與表b的並集除去兩表的交集。即除去了兩表都有的部分,剩餘的是兩表各自不同的部分
三、左外連接(left outer join)
select*fromaleftouterjoinbona.name=b.name;
此語句的結果為表a的所有項加表b與a相匹配的項,b中沒有與a匹配的項時顯示為null
select*fromaleftouterjoinbona.name=b.namewhereb.nameisnull;
此語句的結果為表a的所有項除去兩表的交集
四、右外連接(right outer join)
select*fromarightouterjoinbona.name=b.name;
此語句的結果為表a與表b匹配的項加表b的所有項,a中沒有與b匹配的項時顯示為null
select*fromarightouterjoinbona.name=b.namewherea.nameisnull;
此語句的結果為表b的所有除去兩表的交集