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

作者: 大小说家RCQ | 来源:发表于2017-05-18 16:23 被阅读0次

    内连接(等值连接)

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

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

    图片.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的部门,暂时 没有人 在该部门工作。

    图片.png

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

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

    外连接

    • 观察 左外连接
    图片.png

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

    • 观察 右外连接

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

    自连接

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

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

    图片.png
    • 使用自连接

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

    图片.png

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

    相关文章

      网友评论

        本文标题:Oracle表的几种连接方式及其问题总结

        本文链接:https://www.haomeiwen.com/subject/jubsxxtx.html