• 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.

             

  • 相关阅读:
    61个下拉菜单实例
    简单图片放大效果
    QQ,MSN,Skype在线客服代码
    codesmith自定义模板之实体层
    如何利用缓存提高ASP.NET网站速度
    10+Jquery Tooltip Plugins and Tutorial Collection
    10个ajax 上传插件
    ASP.NET 中 “返回上一页”,“上一步”的实现方法
    执行多条SQL语句,事务处理
    [Asp.Net+C#]Datagrid使用技巧四(怎样控制在一个单元格中放置多个操作按钮及删除数据)
  • 原文地址:https://www.cnblogs.com/davidxu/p/6479284.html
Copyright © 2020-2023  润新知