oracle内连接和外连接

一、表的连接

1.内连接 (inner join)

做内连接得到的是a和b的关联关系的列同时存在的进行连接,内连后a和b关联列相同的a中数据和b中数据合在一起形成新的表数据。
在这里插入图片描述

内连接只有满足条件的数据才会显示

-- a 表和 b 表做内连接
-- a 表中的 bNO 和 b 表中的 NO 都不为 null 且a.bNo=b.NO 组成一条新数据。
SELECT * FROM a INNER JOIN b ON(a.bNO=b.NO);

等值连接也属于内连接

SELECT * FROM a, b WHERE a.nNO=b.NO;

2.外连接

2.1 左外连接(left outer join:简写为 left join)

左外连接是 a 表中的所有行都会显示,b表 中的对应数据添加在 a 表中的对应数据后面形成新的表数据。
在这里插入图片描述

-- a 表和 b 表做左连接
-- a 表中的所有列都会有,b 表中只有和 a 表中关联的数据才会跟在 a 表对应数据后面
SELECT * FROM a LEFT JOIN b ON(a.bNO=b.NO);

在 oracle 中左连接的另一种写法:

SELECT * FROM a, b WHERE a.bNO = b.NO(+);

2.2 右外连接(right outer join :简写为 right join)

右外连接与左外连接刚好相反, b表中的所有行都会显示,a 表 中的对应数据添加在 b 表中的对应数据后面形成新的表数据。
在这里插入图片描述

-- a 表和 b 表做右连接
-- b 表中的所有列都会有,a 表中只有和 b 表中关联的数据才会跟在 b 表对应数据后面
SELECT * FROM a RIGHT JOIN b ON(a.bNO=b.NO);

在 oracle 中右连接的另一种写法

SELECT * FROM a, b WHERE a.bNo(+) = b.NO;

2.3 全外连接(full outer join:简写为 full join)

a 表和 b 表中的数据都会显示
在这里插入图片描述

-- a 表和 b 表做全连接
-- a 表和 b 表中的数据都会显示
SELECT * FROM a FULL JOIN b ON(a.bNO=b.NO);

3、数据集合操作

3.1 union 和 union all (并集操作)

union 和 union all 都是将多个 select 查询得到的集合进行并集操作。

使用前提:

要使用 union 或者 union all 进行合并的多个 select 查询到的集合字段个数必须要一致,对应的字段类型也要一致。

二者的区别:

union 对合并后的结果进行了去重,union all 只是进行了合并,并没有对合并后的集合进行去重;
union 会将合并后的集合根据字段的顺序进行默认排序,union all 并不会进行排序;

注:

union 的效率比 union all 的效率低,所以,如果要对合并后的集合去重就使用 union,不进行去重操作就使用 union all;

--union:得到的结果只有前一半的 select 语句的值(进行了去重操作,并且还进行了默认的排序)
SELECT * FROM a UNION SELECT * FROM b;
--union all:得到的结果是两个select 语句合并在一起的集合(没有进行去重操作且没有进行排序)
SELECT * FROM a UNION ALL SELECT * FROM b;

3.2 intersect (交集操作)

intersect 操作是将多个 select 查询得到的集合进行交集操作

-- intersect:得到的是两个 select 语句的公共部分(即交集部分)
SELECT * FROM a INTERSECT SELECT * FROM b;

3.3 minus (差集操作)

minus 操作是将多个 select 插叙得到的差集进行交集操作

-- minus:得到的是前一个 select查询出来有并且后一个 select 没有的
SELECT * FROM a MINUS SELECT * FROM b;
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值