zoukankan      html  css  js  c++  java
  • 组合查询知识点

    在ORACLE里,提供了一些关键字用于操纵多张表的数据集合

    –     UNION

    –     UNION ALL

    –     INTERSECT

    –     Minus

     

     

    首先,我们创建一张新的表,这张表的结构和student表一样,数据由我们自己录入。我们可以使用复制表的语法

     

     

    然后插入一些新的学生数据

     

     

    下面,如果我们想1次性地对外返回这2张表的所有数据时,我们可以使用union

     

     

    也可以使用union all

     

     

     

     

     

     

     

     

    结果是一样的,那么union和union all到底有什么区别呢?

    让我们再插入一些数据

     

     

    现在,我们发现student和new_student中出现了2条相同的记录,然后我们分别使用union和union all来查询数据看看结果

    使用union

     

     

    使用union all

     

     

    也就是说,union会自动驱除掉2张表里重复的数据,如果有重复的数据的话只显示1次,而union all不会驱除重复的数据,是纯粹地将2张表的所有数据查出来“拼接”在了一起

     

    注意,不论使用union 还是union all,都需要表之间查询的列的个数和类型相匹配

     

     

    当然,并不需要2张表的结构完全一样,我们只需要查询的列相匹配即可,例如查询student和subject里的所有学号

     

     

    之前,我们学习过了向1张表里插入来自另外1张表的信息

     

     

    那么,能不能向1张表里插入来自多张表的数据呢?

    利用union all,我们可以很轻松地实现这样的功能。

    现在向new_student_test表中插入来自student和new_student这2张表的数据

     

    只要我们需要可以任意连接多张表,3,4,5张都可以

     

     

    现在我们想要查询出student和new_student中重复的数据,可以使用子查询这样做

     

     

    但是,我们可以更简单地使用Intersect 取交集 即专门查询重复的数据

     

     

     

    同理,我们也可以简单地使用minus 取减集

     

     

     

     

     

     

     

    注意是上面的查询结果集合减去下面的结果集合

    因此minus并不能获得2张表里不重复的数据

     

     

    如果想要查询2张表里不重复的记录的话,可以换个角度思考

    2张表中不重复的记录等于2张表中的所有记录减去2张表中重复的记录

    那么使用组合查询再结合子查询我们可以达到目的

     

     

     

     

    minus同样可以用于oracle的分页语句中(但是不规范,超过200条记录后可能会出错

    例如查询第11条至第15条记录

    第11条至第15条记录等于前15条检录减去前10条记录

  • 相关阅读:
    音频处理之回声消除及调试经验
    音频软件开发中的debug方法和工具
    ZJOI2015地震后的幻想乡
    HEOI2015小L的白日梦
    THUWC2017随机二分图
    PKUWC Slay The Spire
    dp的一些计划
    鸡汤征集贴
    弱菜的各种模板
    洛谷P4902乘积
  • 原文地址:https://www.cnblogs.com/jazzka702/p/1535794.html
Copyright © 2011-2022 走看看