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的所有除去两表的交集