现有:班级表(A_CLASS)

学生表( STUDENT)

注:学生表(STUDENT)的classId关联班级表(A_CLASS)的主键ID

代码:

select * from STUDENT s WHERE exists (select 1 from A_ClASS c where s.CLASS_ID=c.ID)

结果

【exists语句的执行顺序如下】:

1.首先会执行外循环(select * from student)

2.外循环返回的结果每一行都会拿着去内层循环执行(此时注意,内层也是循环查询的)

ps:select * from student查询的为 (c1,c1,c2,c3);此时执行顺序应该是(

第一次:select* from A_CLASS where c1=c1,第二次:select* from A_CLASS where c1=c2,

第三次:select* from A_CLASS where c1=c1,第四次:select* from A_CLASS where c1=c2,

第五次:select* from A_CLASS where c2=c1,第六次:select* from A_CLASS where c2=c2,

第七次:select* from A_CLASS where c3=c1,第八次:select* from A_CLASS where c3=c2)

注意:此时的内层子查询如果为true,则直接返回不会再继续执行本次循环;

综上所述:第二次和第四次是不会被执行的;  第一次和第三次还有第六次是符合条件的;

所以 STUDENT表中CLASS_ID字段为(c1,c2)的数据都会被查询出来;

如果将 上述语句的=换成!=会是什么效果?

select * from STUDENT s WHERE exists (select 1 from A_ClASS c where s.CLASS_ID!=c.ID)

结果如果所示: 

具体分析一下:此时的执行应该和第一次一模一样也是循环8次分别为:

第一次:select* from A_CLASS where c1!=c1,第二次:select* from A_CLASS where c1!=c2,

第三次:select* from A_CLASS where c1!=c1,第四次:select* from A_CLASS where c1!=c2,

第五次:select* from A_CLASS where c2!=c1,第六次:select* from A_CLASS where c2!=c2,

第七次:select* from A_CLASS where c3!=c1,第八次:select* from A_CLASS where c3!=c2

但是=换成了!=;这次是第六次和第八次没有被执行,其余的全被执行,s.CLASS_ID涉及到(c1,c2,c3)并且语句都返回了true;

所以STUDENT表中CLASS_ID字段为(c1,c2,c3)的数据都会被查询出来;

总结:

1.exists执行外循环后,会拿着外循环的值,去内层查询,如果查询到就直接返回true,并且终止本次循环,如果是false,则会一直执行,直至循环完成还为false,则本次内循环不符合条件;

2.内层的判断条件不要写!=;查询的结果会不尽人意;

sql中 exists的用法相关推荐

  1. SQL中EXISTS的用法以及和IN的区别

    感谢大神分享,原链接在此 http://www.cnblogs.com/xuanhai/p/5810918.html (原文中有实例,非常不错,我是搬运工) 关于 EXISTS的使用 EXISTS(包 ...

  2. java中exists是什么_JAVA:sql中exists的用法

    exists:强调的是是否返回结果集,不要求知道返回什么,比如:selectnamefromstudentwheresex='m'andmarkexists(select1fromgradewhere ...

  3. SQL中EXISTS的用法(转)

    比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...

  4. SQL语句中EXISTS的用法

    记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...

  5. MySQL中EXISTS的用法

    比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...

  6. SQL中EXISTS理解使用

    SQL中EXISTS的理解使用 关联子查询 EXISTS理解使用 关联子查询 在讲述EXISTS用法之前,先讲述一下关联子查询: 关联子查询:是指在内查询中需要借助于外查询,而外查询离不开内查询的执行 ...

  7. SQL中Truncate的用法

    转自:https://www.cnblogs.com/zhoufangcheng04050227/p/7991759.html 本文导读:删除表中的数据的方法有delete,truncate, 其中T ...

  8. 【SQL中limit的用法】

    SQL中limit的用法 说明:limit子句用于限制查询结果返回的数量,常用于分页查询. 用法:[select * from tableName limit i,n ] 参数:tableName: ...

  9. sql去重复操作详解SQL中distinct的用法

    在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 表B: 1.作用于单列 select dist ...

最新文章

  1. 天平游码读数例题_量筒、天平经典习题
  2. mongodb安装.
  3. android动画帧率_Android动画进阶—使用开源动画库nineoldandroids
  4. 自己动手写游戏:飞机大战
  5. 输入法 java_使用 Utf7ime 输入法实现中文输入 Windows+Java 平台(完整步骤版)
  6. CentOS 7 yum安装Tomcat7-jenkins
  7. 怎么用matlab做系统辨识,系统辨识大牛Ljung编写的MATLAB系统辨识使用手册
  8. 马哥linux35期,马哥Linux第五周
  9. [激光器原理与应用-10]:激光器分类
  10. php打开文件fopen函数
  11. LaTeX插入参考文献,简单高效
  12. 10 大开源免费的项目管理软件推荐
  13. Git 报错:You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).Please, commit your changes
  14. 2019 ,摧枯拉朽式的AI洗牌之路
  15. Java解一元一次方程,一元二次方程,一元三次方程
  16. Jvisualvm监控远程weblogic服务
  17. 计算电磁学——变分问题
  18. 智能视频抠图_‎App Store 上的“智能视频抠图: 一键去背景”
  19. mysql varcahr 转datetime_sql 里怎么把varchar转成datetime格式
  20. 安装ubuntu出现的EFI boot partition问题

热门文章

  1. [论文笔记] WACV 2019《Photo-Sketching:Inferring Contour Drawings from Images》
  2. 黑马程序员 黑马博客之模板
  3. 反复拨打电话,电话测试小程序,紧急电话与普通电话分枝判断
  4. Linux系统修复网络,解决Linux系统故障排查和修复技巧的3种方法解析与案例分享...
  5. PageRank 页面排名算法
  6. Geojson转Shapefile
  7. ZK7.0.3中从MongoDB下载文件
  8. 1 PyTorch版YOLOv3 代码中文注释 之 训练 train.py test.py detect.py
  9. 计算机游戏运行程序的完整过程,如何充分的利用我电脑的内存去运行一个程序(游戏)...
  10. r96950hs和r76850hs哪个好