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 * from emp;
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
14 rows selected SQL> select * from emp order by deptno;
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
14 rows selected SQL> select ename,deptno,sal from emp where sal > any (select sal from emp where deptno=10);
ENAME DEPTNO SAL
---------- ------ ---------
KING 10 5000.00
FORD 20 3000.00
SCOTT 20 3000.00
JONES 20 2975.00
BLAKE 30 2850.00
CLARK 10 2450.00
ALLEN 30 1600.00
TURNER 30 1500.00
8 rows 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.00 SQL>
SQL> select ename,deptno,sal from emp where sal < all (select sal from emp where deptno=10);
ENAME DEPTNO SAL
---------- ------ ---------
WARD 30 1250.00
MARTIN 30 1250.00
ADAMS 20 1100.00
JAMES 30 950.00
SMITH 20 800.00 SQL>
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.00
JAMES 30 950.00
ADAMS 20 1100.00
WARD 30 1250.00
MARTIN 30 1250.00
MILLER 10 1300.00
TURNER 30 1500.00
ALLEN 30 1600.00
CLARK 10 2450.00
BLAKE 30 2850.00
JONES 20 2975.00
SCOTT 20 3000.00
FORD 20 3000.00
13 rows selected SQL> select sal from emp where deptno=10
2 ;
SAL
---------
2450.00
5000.00
1300.00 SQL> select ename,deptno,sal from emp where sal < any (select sal from emp where deptno=20);
ENAME DEPTNO SAL
---------- ------ ---------
SMITH 20 800.00
JAMES 30 950.00
ADAMS 20 1100.00
WARD 30 1250.00
MARTIN 30 1250.00
MILLER 10 1300.00
TURNER 30 1500.00
ALLEN 30 1600.00
CLARK 10 2450.00
BLAKE 30 2850.00
JONES 20 2975.00
11 rows selected SQL> select sal from emp where deptno=20;
SAL
---------
800.00
2975.00
3000.00
1100.00
3000.00 SQL> select ename,deptno,sal from emp where sal < all(select sal from emp where deptno=20);
ENAME DEPTNO SAL
---------- ------ --------- SQL>
<ANY是比最大的还要小
>ANY是比最小的还要大
<ALL是比所有值都要小,即比最小的还要小
>ALL是比所有值都要大,即比最大的值还要大
Oracle SQL ANY和ALL语句的更多相关文章
- Oracle SQL开发 之 Select语句完整的执行顺序
查询语句语法: Select 属性 From 表 Where 条件 Group by 分组条件 Having 分组选择条件 Order by 排序条件 1.from子句组装来自不同数据源的数据: 2. ...
- Oracle sql语句执行顺序
sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...
- Oracle SQL语句追踪
Oracle SQL语句追踪 1 SQL语句追踪 追踪SQL语句的执行过程需要在Oracle服务器端进行,Oracle服务器端会检测并记录访问进程所执行的所有SQL语句.下面使用的命令都是在命令行 ...
- Oracle SQL语句执行过程
前言 QQ群讨论的时候有人遇到这样的问题:where子句中无法访问Oracle自定义的字段别名.这篇 博客就是就这一问题做一个探讨,并发散下思维,谈谈SQL语句的执行顺序问题. 问题呈现 直接给出SQ ...
- Oracle SQL Developer中SQL语句格式化快捷键
Oracle SQL Developer中SQL语句格式化快捷键 格式化SQL语句:Ctrl+F7
- oracle sql语句大全
ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约 ...
- [转]关于oracle sql语句查询时表名和字段名要加双引号的问题
oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...
- Oracle SQL语句执行步骤
转自:http://www.cnblogs.com/quanweiru/archive/2012/11/09/2762345.html Oracle中SQL语句执行过程中,Oracle内部解析原理如下 ...
- oracle: sql语句报ora-01461/ora-00911错误
oracle: sql语句报ora-01461/ora-00911错误 ora-00911:sql语句中可能含有特殊字符,或者sql语句中不能用";"分号结尾. sql语句报ora ...
随机推荐
- .net对文件的操作之文件读写
读写文件的步骤一般需要5步: 创建文件流 创建读写器 执行读或写的操作 关闭读写器 关闭文件流 需要引用:System.IO这个命名空间 代码演示: string path = @"F:\a ...
- (转)js学习笔记()函数
1.调用函数时,如果参数多于定义时的个数,则多余的参数将会被忽略,如果少于定义时的个数则缺失的参数数会被自动赋予undefined值. 2.如果是用function语句声明的函数定义则不可以出现在循环 ...
- C#编码标准--编码习惯
C#编码标准--编码习惯 0. 书写程序时的大小写规则: a) 类:PascalCase表示法.如 MyClass b) 枚举值:PascalCase表示法.如 Colors.Red c) 枚举类型 ...
- ThinkPHP内置函数详解D、F、S、C、L、A、I
单字母函数D.F.S.C.L.A.I 他们都在ThinkPHP核心的ThinkPHP/Mode/Api/functions.php这个文件中定义. 下面我分别说明一下他们的功能: D() 加载Mode ...
- HTML&CSS基础学习笔记1.2-HTML的全局属性?
HTML元素都有属性,下面的这些全局属性是所有的HTML元素都可以使用的. 常见的有: HTML元素也有一些本身自己独特的属性,我们以后的笔记中有机会,会再为大家介绍哦. 下面是代码测验,具体的内容可 ...
- 指针与数组、大小端之 printf("%x,%x,%x\n",*(a+1),ptr1[-1],*ptr2);
在X86系统下,以下程序输出的值为多少? #include <stdio.h> #include <stdlib.h> int main(void) { ]={,,,,}; ) ...
- AES CBC 128的实现
原由 AES已经变成目前对称加密中最流行算法之一,AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. 项目中需要使用AES对密码信息进行加密,由嵌入式设备使用C语言进行加 ...
- IOS流媒体播放
IOS流媒体播放 1. 这里的流媒体地址是指服务端那边已经调好格式的可以在ios上播放的视频流. 下面提供几个视频流的地址: NSString *linkStr = http://61.160.2 ...
- contentSize、contentInset和contentOffset区别
contentSize.contentInset和contentOffset区别 分类: iphone开发2011-12-05 21:49 23495人阅读 评论(4) 收藏 举报 uiviewios ...
- GCD使用经验与技巧浅谈--备
GCD(Grand Central Dispatch)可以说是Mac.iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧. dispatch_once_t必须是全局或static变量 ...