zoukankan      html  css  js  c++  java
  • in exists

    1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)。
    2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的。
    in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

    1. 用EXISTS替代IN、用NOT EXISTS替代NOT IN 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.
    在子查询中,NOT IN子句将执行一个内部的排序和合并.
    无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历).
    为了避免使用NOT IN ,我们可以把它改写成外连接(OUTER JOINS)或NOT EXISTS.
    例子:(高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB’)
    (低效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB’)
    用EXISTS替换DISTINCT 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT.
    一般可以考虑用EXIST替换, EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。
    例:(低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E WHERE D.DEPT_NO = E.DEPT_NO
    (高效): SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXIS...

    Exists是存在判断,只要有其中一个存在就返回。
    in是返回所有包含在in中的数据

    select *
    from bss_ppl t
    where exists (select 1
    from bss_ppl
    where t.PROJECT_NO = PROJECT_NO
    group by PROJECT_NO
    having count(*) > 1)
    and rm in ('signed', 'stretch', 'solid')
    and PROJECT_NO is not null

    select *
    from bss_ppl
    where not exists (select STRAPPLYORDER
    from BSS_CRMPROJECT
    where STRAPPLYORDER = trim(PROJECT_NO))
    and rm in ('signed', 'stretch', 'solid')
    and PROJECT_NO is not null

    select *
    from bss_ppl
    where not exists (select PO_PROJECT_NUMBER
    from bss_erp_so
    where PO_PROJECT_NUMBER = trim(PROJECT_NO))
    and rm = 'signed'
    and PROJECT_NO is not null

  • 相关阅读:
    method-r
    dtrace
    轻用其芒,动即有伤,是为凶器;深藏若拙,临机取决,是为利器!
    Git---报错:git Please move or remove them before you can merge 解决方案
    Git----拉取远程分支,git pull,git rebase,git pull --rebase的区别
    Git----查看提交日志
    Git---tag
    Git----常见工作管理总结
    【线上监控】日志上报bug处理方式总结
    接口文档所需内容
  • 原文地址:https://www.cnblogs.com/pureEve/p/6656376.html
Copyright © 2011-2022 走看看