zoukankan      html  css  js  c++  java
  • Any和Some和ALL 的使用,以及交操作差操作的嵌套查询(Oracle)

    SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
    WHERE sal>any(SELECT sal FROM scott.emp WHERE job='MANAGER');

    --上面的意思只要sal>子查询里面返回最小的一个sal值。
    --分解出来看看如下:
    SELECT sal FROM scott.emp WHERE job='MANAGER';
    SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
    WHERE sal>2975 OR sal>2850 OR sal>2450;

    --结果:

         EMPNO ENAME                JOB                       SAL
    ---------- -------------------- ------------------ ----------
          7566 JONES                MANAGER                  2975
          7698 BLAKE                MANAGER                  2850
          7788 SCOTT                ANALYST                  3000
          7839 KING                 PRESIDENT                5000
          7902 FORD                 ANALYST                  3000


           SAL
    ----------
          2975
          2850
          2450


         EMPNO ENAME                JOB                       SAL
    ---------- -------------------- ------------------ ----------
          7566 JONES                MANAGER                  2975
          7698 BLAKE                MANAGER                  2850
          7788 SCOTT                ANALYST                  3000
          7839 KING                 PRESIDENT                5000
          7902 FORD                 ANALYST                  3000

    另:SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
    WHERE sal>any(SELECT sal FROM scott.emp WHERE job='MANAGER');
    等同于语句:
    SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
    WHERE sal>SOME(SELECT sal FROM scott.emp WHERE job='MANAGER');
    下面来看ALL的使用:
    SELECT emp.empno,emp.ename,emp.job,emp.sal FROM scott.emp
    WHERE sal>ALL(SELECT sal FROM scott.emp WHERE job='MANAGER');
    --结果:
         EMPNO ENAME                JOB                       SAL
    ---------- -------------------- ------------------ ----------
          7788 SCOTT                ANALYST                  3000
          7839 KING                 PRESIDENT                5000
          7902 FORD                 ANALYST                  3000
    理解了any和some,去理解ALL,很容易了,当我们WHERE 条件中sal>ALL(...)
    表示sal必须大于子查询中返回最大的sal值。

    只要我们注意一下,就不难发现ALL于ANY(SOME),在上面的例子中反义。


    交操作的嵌套查询

    交操作就是集合中交集的概念。
    (SELECT deptno FROM scott.emp)
    INTERSECT
    (SELECT deptno FROM scott.dept);
    --结果:

        DEPTNO
    ----------
            10
            20
            30

    差操作的嵌套查询
    差操作就是集合中差集的概念。(我好久没有理解这差集,现在都忘记了,来记录一下)
    属于集合A且不属于集合B的元素总和就是差集。

    (SELECT deptno FROM scott.dept)
    MINUS
    (SELECT deptno FROM scott.emp);
    --结果:
        DEPTNO
    ----------
            40

    --从MS SQL上理解可以相当于语句:
    SELECT scott.dept.deptno FROM scott.dept
    LEFT  OUTER JOIN scott.emp ON scott.emp.deptno=scott.dept.deptno WHERE scott.emp.deptno IS NULL;
    --或者:
    SELECT scott.dept.deptno FROM scott.dept
    LEFT JOIN scott.emp ON scott.emp.deptno=scott.dept.deptno WHERE scott.emp.deptno IS NULL
    ;

    --结果:

        DEPTNO
    ----------
            40

     

  • 相关阅读:
    数据库连接池的原理。为什么要使用连接池。
    如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
    MyBatis 与 Hibernate 有哪些不同?
    Class.forName的作用?为什么要用?
    一个Redis实例最多能存放多少的keys?List、Set、Sorted Set他们最多能存放多少元素?
    MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
    如果有大量的key需要设置同一时间过期,一般需要注意什么?
    使用过Redis做异步队列么,你是怎么用的?
    我们如何在Struts2应用程序中集成log4j?
    我们怎样才能在动作类中获得Servlet API请求,响应,HttpSession等对象?
  • 原文地址:https://www.cnblogs.com/wghao/p/925645.html
Copyright © 2011-2022 走看看