惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
M
MIT News - Artificial intelligence
Engineering at Meta
Engineering at Meta
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
Jina AI
Jina AI
Last Week in AI
Last Week in AI
The Cloudflare Blog
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
博客园_首页
I
InfoQ
G
Google Developers Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
H
Help Net Security
U
Unit 42
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog

博客园 - shenpeng

C#中的具名参数和可选参数 C#中使用ExcelDataReader读取Excel文件 使用OleDbCommandBuilder时出现“Insert into 语句的语法错误”的解决方法(转) 在eclipse中使用中文JAVA api文档 .NET、ASP.NET控件及源码大汇总 60多个精品源码站 ASP.net常用代码(常用技巧备忘) C#程序转为VB.NET程序的一个小问题 CEIL和FLOOR函数查询(Oracle,MSSQL) (转) 字符串分割自定义函数(SQL) (转) ORACLE中巧用一条SQL 实现其它进制到十进制转换(转) 数据库优化设计方案(转) 浅谈反射与特性在接口系统中的应用(编码表转化) (转) 数字格式化(转) 将DataSet导出成XLS、XML、HTML、CSV、TSV等格式 纵表变横表经典中的经典 Web页面的数据导出excel时的格式问题(转) Access中使用SQL语句应掌握的几点技巧(转) 在SQL Server中修改sa的密码
Any和Some和ALL 的使用,以及交操作差操作的嵌套查询(Oracle...
shenpeng · 2008-03-18 · via 博客园 - shenpeng

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