Oracle表的几种连接方式及其问题总结

内连接(等值连接)

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

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

Oracle表的几种连接方式及其问题总结_第1张图片
图片.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的部门,暂时 没有人 在该部门工作。

Oracle表的几种连接方式及其问题总结_第2张图片
图片.png

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

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

外连接

  • 观察 左外连接
Oracle表的几种连接方式及其问题总结_第3张图片
图片.png

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

  • 观察 右外连接
Oracle表的几种连接方式及其问题总结_第4张图片

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

自连接

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

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

Oracle表的几种连接方式及其问题总结_第5张图片
图片.png
  • 使用自连接
Oracle表的几种连接方式及其问题总结_第6张图片

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

Oracle表的几种连接方式及其问题总结_第7张图片
图片.png

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

你可能感兴趣的:(Oracle表的几种连接方式及其问题总结)