zoukankan      html  css  js  c++  java
  • sql中ANY、SOME、ALL关键字

    带any嵌套查询
    select emp.empno,emp.ename,emp.sal from scott.emp where sal>any(select sal from scott.emp where job='manager');
    等价于
    select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
    select emp.empno,emp.ename,emp.sal from scott.emp where sal>2975 or sal>2850 or sal>2450
    带some嵌套查询
    select emp.empno,emp.ename,emp.sal from scott.emp where sal=some(select sal from scott.emp where job='manager');
    等价于
    select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
    select emp.empno,emp.ename,emp.sal from scott.emp where sal=2975 or sal=2850 or sal=2450
    注:any与some是等价的
    带all嵌套查询
    select emp.empno,emp.ename,emp.sal from scott.emp where sal>all(select sal from scott.emp where job='manager');
    等价于
    select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
    select emp.empno,emp.ename,emp.sal from scott.emp where sal>2975 and sal>2850 and sal>2450

    1. ALL与ANY的关系就是,AND 与 OR 的关系。
    2. ANY与SOME等价,据说搞这两个不同的词出来是为了迁就英语语法。例如,在用= ANY 的地方在(英语)语法上就应该是= SOME。
    3. IN 与 = ANY 等价,均表示,变量在(子查询)列表之中,即 a IN (table B) 表示 a = ANY B.b
    4. NOT IN 与 <> ALL 等价,而不等于<> ANY,前两者均表示,变量不在(子查询)列表之中,即 a NOT IN (table B) 表示 a <> ALL B.b。而如果a <> ANY B.b,则只要任意一个b<>a就true了。
    5. IN 与 EXISTS 的性能区别主要来自,IN 会编列子查询的每行记录,然后再返回,而EXISTS 则只要遇到第一个满足条件的记录就马上返回。
    6. NOT IN 与 NOT EXISTS 并不能完全等价,只有当子查询中,select 关键字后的字段有not null约束或者有这种暗示时才用NOT IN。
    可随意转载,欢迎署名!
  • 相关阅读:
    00 学习资源整理
    07 MySQL的应用层调整,查询缓存设置,内存管理设置,并发参数的设置常识
    06 SQL语句编写优化
    05 Java的ReentrantLock与线程的顺序控制
    05 索引的使用常识(如何编写SQL语句避免索引失效)
    04 MYSQ的SQL优化需要了解的工具explain,profile,trace
    04 JAVA中park/unpark的原理以及JAVA在API层面线程状态总结
    03 MYSQL的体系结构以及存储引擎的基本知识
    02 链表编程题
    01 栈与队列
  • 原文地址:https://www.cnblogs.com/netsa/p/2957064.html
Copyright © 2011-2022 走看看