sql的並集
Ⅰ sql 兩張表做並集,並且其中兩個表中下數值相減
gdsid 是貨號,
kcsl 庫存數量
pdsl 盤點數量
下面是語法
select gdsid,kcsl,pdsl from
(
select distinct aa.gdsid ,
kcsl = isnull( (select sum(kcsl) from b where b.gdsid =aa.gdsid),0),
pdsl = isnull( (select sum(pdsl) from a where b.gdsid =aa.gdsid),0)
from
(select gdsid from a union select gdsid from b ) aa
) bb where kcsl <>pdsl
Ⅱ 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查詢多個表的並集
解析:
- 用關聯查詢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查詢中集合的並運算符是:
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資料庫並集查詢的問題
selectlprice,nullaschairsale,nullasfeefromhotel_livewhereouttime='2016-06-02'
unionall
selectnull,chairsale,nullfromvw_bookwherebookdate='2016-06-02'
unionall
selectnull,null,feefromrestaurantwheretime='2016-06-02'
這樣?
Ⅵ 如何用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 的並集UNION和內聯結INNER JOIN 有什麼區別感覺結果是一樣的。
union與inner join不存在區別的,主要體現如下:
1)union:是無條件合並兩個結果集的,前提是列的數據類型相兼容,體現在行數增加了;
2)inner join:是需要給出關聯欄位條件且相等才連接兩個結果集,體現在列數增加了。
Ⅷ 如何用一條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中用union實現,要求關系R和關系S的屬性數目相同,union模式是排重的,用union all保留重復值
select * from r
union
select * from s