zoukankan      html  css  js  c++  java
  • 用Not Exists 代替Not In

    Not Exists允许用户使用相关子查询已排除一个表中能够与另一个表成功连接的所有记录。

    Select a.mobileid
      from Log_user a
    where not exists
      (select b.mobileid from magazineitem b
         where b.mobileid=a.mobileid);

    对于外查询的每条记录(Log_user),not exists字查询都要测试。如果这条记录于Magazineitem连接后返回一行,则子查询成功。Not Exists 通知查询对返回的代码取反,这样,Log_user 表中与Log_User连接成功的行都不为外查询返回。剩下的行就是那些在magazineitem中没有记录的。
    Not Exists用到了连接,能够发挥已经建好的索引的作用,而Not In不能使用索引。

    Not In是最慢的方式,要同每条记录比较,在数据量比较大的查询中不建议使用这种方式。

    关于Exists和IN:
    Select name,skill
      from workerstill ws
      where exists
       (select * from workskill
        where ws.name=name
         group by name
          having count(skill)>1);

    检查每个外查询的值,ExistS都要测试,如果为真,那么外查询选择一个姓名和技能

    EXISTS是存在性的一种测试,特点:
    1。不能匹配一列或者多列
    2。只能用于相关的子查询

  • 相关阅读:
    zoj 2972
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    使用和制作patch文件
    一步一步写算法(之洗牌算法)
    第3讲 数码管显示
    Oracle 11g client的安装和配置。
    StringTokenizer类的使用
    BDB (Berkeley DB)数据库简单介绍(转载)
    关于MSHTML
    C语言sizeofkeyword
  • 原文地址:https://www.cnblogs.com/cxd4321/p/764150.html
Copyright © 2011-2022 走看看