oracle any语句,Oracle SQL ANY和ALL语句

Oracle的嵌套子查询可以使用Some,Any和All对子查询中返回的多行结果进行处理。

Some表示满足其中一个的含义,是用or串起来的比较从句。

例如:SELECT * FROM emp WHERE empno = ‘hmz‘ OR dept = ‘10‘

Any也表示满足其中一个的含义,也是用or串起来的比较从句。 Some和Any的区别就是:Some用在“=”的比较关系中。

英文中的否定句中使用any肯定句中使用some,这一点是一样的。

some和any都有“一些”的意思 some用在肯定句中,any用在否定句或疑问句中。 【注1】但表示期望得到肯定回答的疑问句中用some。 【注2】any还有“任何”的意思,some没有

比较:She‘s too old to do any work.她年事已高,干不了什么活了。

She‘s old enough to do some work.她已长大了,可以干些活了。

All则表示满足其中所有查询结果的含义,使用and串起来的比较从句。

【实例】

查询比部门号为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 = 30) AND deptno NOT IN (SELECT deptno FROM emp WHERE deptno = 30);

含义是找到和30号部门员工的任何一个人工资相同的那些员工。

最后一个关键字all的用法就是要与子查询的每一结果都要匹配。

SELECT ename,sal FROM emp WHERE sal > ALL(select sal from emp where deptno = 20);

上面的SQL语句的意义与前面的就完全不一样了,其意义是找到比部门号为20的员

工的所有员工的工资都要高的员工,也就是比那个工资最高的员工的还要高的员工。

总的来说some和any用法意义是一样的,仅在词法上有不同,都表示对子查询结果

集“或”的比较关系,而all则是对子查询结果集总每一个结果“与”的关系。

SQL> select * fromemp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----- ---------- --------- ----- ----------- --------- --------- ------

7369 SMITH CLERK 7902 1980/12/17 800.00 20

7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30

7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30

7566 JONES MANAGER 7839 1981/4/2 2975.00 20

7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30

7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30

7782 CLARK MANAGER 7839 1981/6/9 2450.00 10

7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20

7839 KING PRESIDENT 1981/11/17 5000.00 10

7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30

7876 ADAMS CLERK 7788 1987/5/23 1100.00 20

7900 JAMES CLERK 7698 1981/12/3 950.00 30

7902 FORD ANALYST 7566 1981/12/3 3000.00 20

7934 MILLER CLERK 7782 1982/1/23 1300.00 10

14rows selected

SQL> select * from emp order bydeptno;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----- ---------- --------- ----- ----------- --------- --------- ------

7782 CLARK MANAGER 7839 1981/6/9 2450.00 10

7839 KING PRESIDENT 1981/11/17 5000.00 10

7934 MILLER CLERK 7782 1982/1/23 1300.00 10

7566 JONES MANAGER 7839 1981/4/2 2975.00 20

7902 FORD ANALYST 7566 1981/12/3 3000.00 20

7876 ADAMS CLERK 7788 1987/5/23 1100.00 20

7369 SMITH CLERK 7902 1980/12/17 800.00 20

7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20

7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30

7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30

7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30

7900 JAMES CLERK 7698 1981/12/3 950.00 30

7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30

7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30

14rows selected

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

ENAME DEPTNO SAL---------- ------ ---------

KING 10 5000.00FORD20 3000.00SCOTT20 3000.00JONES20 2975.00BLAKE30 2850.00CLARK10 2450.00ALLEN30 1600.00TURNER30 1500.00

8rows selected

SQL> select ename,deptno,sal from emp where sal > all (select sal from emp where deptno=10);

ENAME DEPTNO SAL---------- ------ ---------

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

ENAME DEPTNO SAL---------- ------ ---------

KING 10 5000.00SQL>

SQL> select ename,deptno,sal from emp where sal < all (select sal from emp where deptno=10);

ENAME DEPTNO SAL---------- ------ ---------

WARD 30 1250.00MARTIN30 1250.00ADAMS20 1100.00JAMES30 950.00SMITH20 800.00SQL>SQL>SQL>SQL> select ename,deptno,sal from emp where sal < any (select sal from emp where deptno=10);

ENAME DEPTNO SAL---------- ------ ---------

SMITH 20 800.00JAMES30 950.00ADAMS20 1100.00WARD30 1250.00MARTIN30 1250.00MILLER10 1300.00TURNER30 1500.00ALLEN30 1600.00CLARK10 2450.00BLAKE30 2850.00JONES20 2975.00SCOTT20 3000.00FORD20 3000.00

13rows selected

SQL> select sal from emp where deptno=10

2;

SAL---------

2450.00

5000.00

1300.00SQL> select ename,deptno,sal from emp where sal < any (select sal from emp where deptno=20);

ENAME DEPTNO SAL---------- ------ ---------

SMITH 20 800.00JAMES30 950.00ADAMS20 1100.00WARD30 1250.00MARTIN30 1250.00MILLER10 1300.00TURNER30 1500.00ALLEN30 1600.00CLARK10 2450.00BLAKE30 2850.00JONES20 2975.00

11rows selected

SQL> select sal from emp where deptno=20;

SAL---------

800.00

2975.00

3000.00

1100.00

3000.00SQL> select ename,deptno,sal from emp where sal < all(select sal from emp where deptno=20);

ENAME DEPTNO SAL---------- ------ ---------

SQL>

>ANY是比最小的还要大

>ALL是比所有值都要大,即比最大的值还要大

原文:http://www.cnblogs.com/rusking/p/4680436.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值