A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

xiaoGongjv_

中级黑马

  • 黑马币:113

  • 帖子:45

  • 精华:0

© xiaoGongjv_ 中级黑马   /  2017-8-9 14:02  /  775 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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都要测试,如果为真,那么外查询选择一个姓名和技能

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马