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条记录

  • 相关阅读:
    [JSOI2007][BZOJ1031] 字符加密Cipher|后缀数组
    leetcode Flatten Binary Tree to Linked List
    leetcode Pascal's Triangle
    leetcode Triangle
    leetcode Valid Palindrome
    leetcode Word Ladder
    leetcode Longest Consecutive Sequence
    leetcode Sum Root to Leaf Numbers
    leetcode Clone Graph
    leetcode Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/jazzka702/p/1535794.html
Copyright © 2011-2022 走看看