在oracle的子查询中使用some,any和all
来源:互联网 发布:java应聘自我介绍 编辑:程序博客网 时间:2024/05/22 00:06
用some,any和all对子查询中返回的多行结果进行处理。下面我们来简单介一下这几个关键词的含义。
- Some在此表示满足其中一个的意义,是用or串起来的比较从句。
- Any也表示满足其中一个的意义,也是用or串起来的比较从句,区别是any一般用在非“=”的比较关系中,这也很好理解,英文中的否定句中使用any肯定句中使用sone,这一点是一样的。
- 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 = 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的员工的所有员工的工资都要高的员工,也就是比那个工资最高的员工的还要高的员工
总的来说some和any用法意义是一样的,仅在词法上有不同,都表示对子查询结果集中“或”的比较关系,而all则是对子查询结果集总每一个结果“与”的关系
****************************************************************************************************************************
这是在Oracle中比较容易被忽视的两个条件函数,但这两个函数其实对简化Sql语句是非常重要的作用的。
例如
scott@eddev> select ename, sal from emp where sal > any (1600, 2999);
ENAME SAL
---------- ----------
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
FORD 3000
6 rows selected.
实际上以上语句可以等于:
select ename, sal from emp where sal > 1600 or sal > 2999;
所以Any是等于N个or语句。
又如
select ename from emp where substr(ename,1,1) = any ('A', 'W', 'J');
等同于:
select ename from emp where substr(ename,1,1) = 'A' or substr(ename,1,1) ='W' or substr(ename,1,1) ='J';
另外
scott@eddev> select ename, sal from emp where sal > all (1600, 2999);
ENAME SAL
---------- ----------
SCOTT 3000
KING 5000
FORD 3000
实际上以上语句可以等于:
select ename, sal from emp where sal > 1600 and sal > 2999;
所以All是等于N个And语句。这是在Oracle中比较容易被忽视的两个条件函数,但这两个函数其实对简化Sql语句是非常重要的作用的。
例如
scott@eddev> select ename, sal from emp where sal > any (1600, 2999);
ENAME SAL
---------- ----------
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
FORD 3000
6 rows selected.
实际上以上语句可以等于:
select ename, sal from emp where sal > 1600 or sal > 2999;
所以Any是等于N个or语句。
又如
select ename from emp where substr(ename,1,1) = any ('A', 'W', 'J');
等同于:
select ename from emp where substr(ename,1,1) = 'A' or substr(ename,1,1) ='W' or substr(ename,1,1) ='J';
另外
scott@eddev> select ename, sal from emp where sal > all (1600, 2999);
ENAME SAL
---------- ----------
SCOTT 3000
KING 5000
FORD 3000
实际上以上语句可以等于:
select ename, sal from emp where sal > 1600 and sal > 2999;
所以All是等于N个And语句。
- 在oracle的子查询中使用some,any和all
- 在oracle的子查询中使用some,any和all
- 在oracle的子查询中使用some,any和all
- 在oracle的子查询中使用some,any和all
- 在oracle的子查询中使用some,any和all
- MySQL学习笔记(三):子查询语句中ANY、SOME、ALL关键字的使用
- Oracle的SOME,ANY和ALL操作
- 带有ANY(SOME)或ALL谓词的子查询
- Any和Some和ALL 的使用,以及交操作差操作的嵌套查询(Oracle)
- Oracle子查询的IN、Any、All
- Oracle 查询语句 all any some 含义和区别
- all 、any 、some的使用
- oracle中any,some,all用法
- oracle中some ,any ,all总结
- oracle中的some,any和all
- 子查询的ANY、SOME、ALL关键字及部分数据库查询操作技巧
- 42.笔记 MySQL学习——ALL ANY和SOME子查询
- oracle中all,any的区别使用
- 生活
- gtk2hs for windows相关网址
- 使用C#代码段,提高工作效率(C# code snippet)
- 《诗盗·梦》
- linux 进程通讯方式
- 在oracle的子查询中使用some,any和all
- WinForm,窗体靠近屏幕边缘自动隐藏
- 专题 4 通用函数库之调试功能封装
- http://dldx.csdn.net/fd.php?i=539612474316634&s=0eb332eda6b3fe52371c9184ea3241e0
- c# 遍历页面TextBox-笔记
- 关于linux图形界面编程基本知识 - 技术文档 - 程序开发 Linux时代 - 开源、... (转载)
- 事件与委托之我见
- ARM开发现状、前景、ARM工作内容、入门方法 收藏
- 《诗盗·泥巴仙》