首页 > 数据库 > 数据库其它

数据库Oracle数据库中多表查询外连接的见解

admin 数据库其它 2021-05-25 09:26:25 数据库 
后台-系统设置-扩展变量-手机广告位-内容正文底部

*. 我们可以通过这个例题彻底理解多表查询外连接的意思即(分清主表和副表,主表需要全部出来,而副表需要添加(+))。

 例题:查询emp 表中的数据并显示每个员工的上级 

1. 首先我们查询一下emp表中的数据

select * from emp;

查询出来的emp 表中的数据如下
在这里插入图片描述
2.我们要通过外连接来把员工的上级显示出来;

select users.ename || '的上级是' ||boss.ename
from emp users,emp boss
where users.mgr = boss.empno;

结果:我们可以看到这样写的结果是没有把King的上级显示出来,这是因为emp表中mgr这一列有个值为空,而empo这一列没有空的,那么我们这时肯定会认为users.mgr为副表,而boss.empo为主表在users.mgr后面加上(+)就可以了,我们看一下结果。
在这里插入图片描述
3.

select users.ename || '的上级是' ||boss.ename
from emp users,emp boss
where users.mgr(+) = boss.empno;

结果:我们发现这样写的结果还是不对的,证明users.mgr不是副表,而boss.empo应该为副表。
这是为什么呢?
在这里插入图片描述
4.我们先看一下正确的答案:

select users.ename || '的上级是' ||boss.ename
from emp users,emp boss
where users.mgr = boss.empno(+);

结果:
在这里插入图片描述
5.这到底是为什么呢,下面说一下我的见解。
(1)在emp表中我们要查询的是员工的上级,就是

users.ename || '的上级是' ||boss.ename

我们是通过员工的上级(mgr)与上级对应的编号(empno)来建立联系的。所以会有

users.mgr = boss.empno;

(2) 但是为什么是users.mgr = boss.empno(+);
而不是users.mgr(+) = boss.empno;
(3)我们可能直观的看到users的mgr有个值为空,而boss的empno没有空的,就认为左边的比右边的少了一个,所以左边的为副表,右边为主表所以就写出了
users.mgr(+) = boss.empno;
(4)其实不然,我们要查询显示出来的的不是users的mgr的内容而是users本身,而要查出来它本身,就要看它的empno,它的empno是完整的,同理我们查询的是boss的empno,而boss的empno是在mgr下的,它是少了一个的,所以右边的boss.empno这张表比左边的users.mgr表少了一个值,所以它为副表,左边的为主表。所以才是users.mgr = boss.empno(+);

文章来源:https://blog.csdn.net/weixin_45898427/article/details/117188748

后台-系统设置-扩展变量-手机广告位-内容正文底部
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
本文地址:https://www.jcdi.cn/shujukuqita/30798.html

留言与评论(共有 0 条评论)
   
验证码:
后台-系统设置-扩展变量-手机广告位-评论底部广告位

教程弟

https://www.jcdi.cn/

统计代码 | 京ICP1234567-2号

Powered By 教程弟 教程弟

使用手机软件扫描微信二维码