Oracle 5~ 集合运算、连接查询

11 篇文章 0 订阅
11 篇文章 0 订阅

1.集合运算就是把多个查询结果组合成一个结果。

当前数据库中有stuinfo和stuinfo_2018两张表,stuinfo有4条数据:张三、王五、龙七、李四,stuinfo_2018中只有1条王五的数据。

(1)INTERSECT 交集:返回两个查询共有的结果。

(2)UNION ALL 并集重复:返回各个查询的所有结果,包括重复的数据行。

(3)UNION 并集不重复:返回各个查询的所有不重复的结果。

(4)MINUS 补集:返回第一个查询结果减去第二个查询结果的剩余数据行。

2.连接查询

(1)内连接(inner join):两张表通过某个字段进行内连接,查询结果是通过该字段按关系运算符匹配出的数据行。

         等值连接:连接条件用‘=’比较被连接的值,查询结果是被连接表中的所有行。(不等连接)

         例如,关联查询学生信息表stuinfo和班级信息表class。

          

         不等连接:连接条件用‘=’以外的运算符比较连接。

         小插曲:sqlplus的界面实在是太不友好了,所以我去下载了一个sql developer,查询结果看起来清晰一点。

         sql developer的下载链接: https://www.oracle.com/tools/downloads/sqldev-v192-downloads.html

         为了练习连接查询,我更新了数据库里的表stuinfo 和 stuinfo_2018,所以之前的查询结果都只对应之前的数据,从这开始都使用更新后的数据表。

stuinfo表

stuinfo_2018表

(2)外连接(outer join):返回到查询结果中的不仅包含符合连接条件的行,还包括左表(左外连接)或右表(右外连接)或两个边接表(全外连接)中的所有数据行。

已知表stuinfo中有张三丰,没有龙五和李一天;表stuinfo_2018中有龙五和李一天,但没有张三丰。

例如,左连接(left join)

返回左表中的所有数据和右表中的匹配行,对于左表中有但右表中没有的数据,在右表表的字段下补null值

select a.*, b.stuid, b.stuname
from STUDENT.stuinfo a 
left join STUDENT.stuinfo_2018 b
on a.stuid = b.stuid;

因为左表中有张三丰,右表中没有,所以查询结果为:

左连接的另一种写法:相当于在等值连接的基础上给右表后面加(+)

select a.*, b.stuid, b.stuname
from STUDENT.stuinfo a, STUDENT.stuinfo_2018 b
where a.stuid = b.stuid(+);

例如,右连接(right join)

返回右表中的所有数据和左表中的匹配行,对于右表中有但左表中没有的 在左表的字段下补null值。

select a.*, b.stuid, b.stuname
from STUDENT.stuinfo a
right join STUDENT.stuinfo_2018 b
on a.stuid = b.stuid;

另一种写法同理左连接。

为了更好记忆,我暂且死记硬背为:先写的表就是左表,后写的表就是右表,在第二种写法中,谁需要补null值谁后面就跟着(+)。

例如,全外连接(full join)

返回左右表的所有数据,缺失的地方补null值。

select a.*, b.stuid, b.stuname
from STUDENT.stuinfo a
full join STUDENT.stuinfo_2018 b
on a.stuid = b.stuid;

全外连接貌似没有第二种写法,两边都跟(+)报错。如果遇见第二种写法,再更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值