oracle的表几种连接比较,Oracle表的几种连接方式及其问题总结

内连接(等值连接)

为了能够更好的描述出当前的问题,下面向emp表之中增加一行记录,此记录属于没有部门的雇员。

INSERT INTO emp(empno, ename, job) VALUES(8888, '张三', 'CLERK') ;

64a0ce3ce69b

图片.png

使用内连接:

SELECT e.empno, e.ename, e.job, d.deptno, d.dname, d.loc

FROM emp e, dept d

WHERE e.deptno=d.deptno ;

现在的代码是属于,只有当“e.deptno=d.deptno”这个条件满足之后,才会显示出对应的数据。

如果此时数据为空,那么,此条件无法满足,则内容不能够显示。

问题来了:(在emp表中,“张三”的部门编号为空,所以,“张三”的信息不能够显示。)

另外,在dept表中,部门编号为40的部门,暂时 没有人 在该部门工作。

64a0ce3ce69b

图片.png

问题:在 emp表,dept表 的多表查询中,如果想要显示出雇员姓名为“张三”的雇员信息,或者想要显示出部门编号为40的部门信息,该怎么办??

那么此时就需要用到外连接了

外连接

观察 左外连接

64a0ce3ce69b

图片.png

此时,全部的雇员信息,都可以正常显示出来了,但是,由于“张三”没有对应的部门数据,所以,此行记录的部门数据为空。

观察 右外连接

64a0ce3ce69b

发现此时的程序,所有的部门信息会进行显示,但是由于部门编号为40的部门没有雇员,所以,此行记录的雇员数据为空。

自连接

查询每个雇员的姓名、职位、领导姓名领导姓名,与领导的雇员编号

每个雇员对应了一个领导编号,而每一个领导也属于雇员。

64a0ce3ce69b

图片.png

使用自连接

64a0ce3ce69b

但是,发现了一个问题,此时的数据显示不完整,(“张三”、“KING”的信息没有显示出来)。如果发现查询的数据不完整,那么,建议使用外连接

64a0ce3ce69b

图片.png

这种自己关联自己的查询,也称为自身关联,但不管是不是自身关联,程序认的只是FROM子句之后存在有多少张数据表,有多张表就必须编写消除笛卡尔积的条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值