zoukankan      html  css  js  c++  java
  • oracle开发之<<SQL Cookbook>>学习笔记整理:第三章 操作多个表

    1.union all只是结果集叠加,union叠加后去重。

    2.使用join实现表的关联,笛卡尔积:cross join, 等值连接:inner join, 左连接:left join, 右连接:right join, 全连接:full outer join。

    3.使用intersect和in配合也可以实现等值连接,intersect返回两个行来源中的共同行,且不返回重复行。

    SELECT empno,
           ename,
           job,
           sal,
           deptno
        FROM emp
     WHERE (ename,job,sal) IN
    (SELECT ename,
            job,
            sal 
          FROM emp
        INTERSECT
     SELECT ename,
            job,
            sal
          FROM v);

    4.用minus实现结果集相减,基本等价于not in,注意not in不去重且不能处理空值(会返回NULL,因为not in等价于not or,"TRUE OR NULL"结果为TRUE, "FALSE OR NULL"结果为NULL),minus去重且可以空值,解决空值问题可以用not exists.

    5.使用反连接(外连接+NULL筛选)来查找与其他表不匹配的记录,示例如下:

    SELECT d.* FROM 
      dept d LEFT OUTER JOIN emp e
        ON (d.deptno=e.deptno)
    WHERE e.deptno IS NULL

    6.使用外连接或标量子查询来向结果中添加列,示例如下:

    select e.ename,d.loc,eb.received                     
    from emp e join deptno d
    on (e.deptno=d.deptno)               
    left join emp_bonus eb
    on (e.empno=eb.empno)
    order by 2
    等价于
    select e.ename,d.loc,
    (select eb.received from  emp_bonus eb
    where e.empno=eb.empno) as received
    from emp e,deptno d
    where e.deptno=d.deptno
    order by 2

    7.找出两个表中不同的数据:

    思路:(1)首先找出表EMP中存在而视图V中没有的行;

             (2)然后合并在视图V中存在而表EMP中没有的行。

    技巧:MINUS+UNION ALL

    8.聚集和关联一起使用时,先聚集再关联,或者先去重再关联,避免产生笛卡尔积导致汇总结果不对。

    9.full outer join = left outer jion + union + right outer join.

             

  • 相关阅读:
    运动世界校园破解2.0
    Docker进阶操作
    一键开启https
    Docker的第一次实践总结
    手机通话黑屏
    mysql安装、操作、配置、远程
    excel添加列数据导入后,列数据不显示的问题
    常见邮箱的各类协议服务器地址
    POP3/SMTP/IMAP等邮箱协议的基本概念
    You credentials did not work (The logon attempt failed)
  • 原文地址:https://www.cnblogs.com/davidxu/p/6479284.html
Copyright © 2011-2022 走看看