Home  >  Article  >  Database  >  在Oracle的子查询中使用some,any和all

在Oracle的子查询中使用some,any和all

WBOY
WBOYOriginal
2016-06-07 17:03:021048browse

用some,any和all对子查询中返回的多行结果进行处理。下面我们来简单介一下这几个关键词的含义。Some在此表示满足其中一个的意义,

some,anyall对子查询中返回的多行结果进行处理。下面我们来简单介一下这几个关键词的含义。

  • Some在此表示满足其中一个的意义,是用or串起来的比较从句。
  • Any

    推荐阅读:Oracle函数取得姓名对应的拼音

    下面是一些例子
    找出员工中,只要比部门号为10的员工中的任何一个员工的工资高的员工的姓名个工资。也就是说只要比部门号为10的员工中的那个工资最少的员工的工资高就满足条件。

    select ename,sal
    From emp
    Where sal > any(select sal from emp where deptno = 10);

    这里推荐用any,如果你非要用some也是没有任何问题的,结果是一样的,只是一般来讲some用在“=”的比较从句中。
    select ename,sal
    From emp
    Where sal > some(select sal from emp where deptno = 10);

    上面的用法完全OK的。
    select ename,sal
    From emp
    Where sal = some(select sal from emp where deptno = 30) and deptno not in (select deptno from emp where deptno = 30);

    上面才是some的正常用法。其含义是找到和30部门员工的任何一个人工资相同的那些员工。虽然没有找到。
    最后一个关键字all的用法也很简单就是要与子查询的每一结果都要匹配。

    select ename,sal
    From emp
    Where sal > all(select sal from emp where deptno = 20);

    上面的SQL语句的意义与前面的就完全不一样了,其意义是找到比部门号为20的员工的所有员工的工资都要高的员工,,也就是比那个工资最高的员工的还要高的员工总的来说someany用法意义是一样的,仅在词法上有不同,都表示对子查询结果集中的比较关系,而all则是对子查询结果集总每一个结果的关系 

    举几个例子来说明ALL和ANY的用法
    1. SELECT * FROM TABLEA WHERE FLD > ALL(SELECT FLD FROM TABLEA)
    这相当于
    SELECT * FROM TABLEA WHERE FLD > (SELECT MAX(FLD) FROM TABLEA)

    2. SELECT * FROM TABLEA WHERE FLD 这相当于
    SELECT * FROM TABLEA WHERE FLD 

    3. SELECT * FROM TABLEA WHERE FLD = ANY(SELECT FLD FROM TABLEA)
    这相当于
    SELECT * FROM TABLEA WHERE FLD IN (SELECT FLD FROM TABLEA)

    linux

  • Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn