博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.11 从多个表中返回丢失的数据
阅读量:5815 次
发布时间:2019-06-18

本文共 1039 字,大约阅读时间需要 3 分钟。

问题:

同时返回多个表中丢失的数据。要从表dept中返回emp不存在的行(所有没有员工的部门)需要做外联结。考虑下面的查询。它返回表dept中的deptno和name字段,以及每个部门中所有员工的姓名。(如果该某个部门有员工的话):
select d.deptno, d.dname, e.ename
    from dept d left outer join emp e
        on (d.deptno = 3.deptno)
最后一行operations部门,尽管该部门没有员工,还是返回了这一行,因为表emp被外联结到了表dept。现在,假设有一个员工没有部门,那么如何得到在上述的结果集,并未该没有部门的员工返回一行呢?换句话说,要在同一个的查询中国同时外联接到表emp和dept。在创建新员工之前,开始可能会这么做:
insert into emp (empno,ename,job,mgr,hiredae,sal,comm,deptno) 
    select 1111,'YODA','JEDI',null,hiredate,sal,comm,null
        from emp
    where ename = 'KINg'
select d.deptno,d.name,e.ename
    from dept d right outer join emp e 
        on (d.deptno = e.deptno)
使用外联结是想返回新创建的员工,但却将原结果集中的operations部门丢掉了。最终的结果集萤微员工YODA和部门operations各返回一行。
解决方案:使用基于公共之的完全外联结来返回这两个表中丢失的数据。
select d.deptno,d.name,e.ename
    from dept d full outer join emp e
      on (d.deptno = e.deptno)
或者,合并两个不同外联结的结果:
select d.deptno,d.dname,e.ename,
    from dept d right outer jin emp e
        on(d.deptno = e.deptno)
union 
select d.deptno ,d.dname,e.ename
        from dept d, emp e
        on (d.deptno = e.deptno)

 

转载于:https://www.cnblogs.com/liang545621/p/7518483.html

你可能感兴趣的文章
基于OpenSSL的HTTPS通信C++实现
查看>>
[JavaScript]根据json生成html表格
查看>>
在SpringBoot中添加Redis
查看>>
登录有关的session和cookie(后台)
查看>>
Vue源码解读之Component组件注册
查看>>
Java多线程进阶(三三)—— J.U.C之collections框架:LinkedBlockingQueue
查看>>
构建静态页面 之 [ 表单 ]
查看>>
PHP下的异步尝试一:初识生成器
查看>>
Java 设计模式之装饰者模式
查看>>
JS 时间字符串和时间戳的相互转换
查看>>
常见meta和link标签
查看>>
JavaScript 之 核心语法 [ 函数和作用域 ]
查看>>
NLP的ImageNet时代已经到来
查看>>
C++下的OpenCV中Mat类型存储的图像格式
查看>>
小程序开发
查看>>
本地IDC机房数据库容灾解决方案
查看>>
php使用jquery Form 实现页面无刷新上传图片,并预览图片
查看>>
React一——起源、安装、jsx
查看>>
前端时间处理小结
查看>>
利用反射清空hibernate离线查询对象中的所有条件
查看>>