sql中 exists的用法
现有:班级表(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的用法相关推荐
- SQL中EXISTS的用法以及和IN的区别
感谢大神分享,原链接在此 http://www.cnblogs.com/xuanhai/p/5810918.html (原文中有实例,非常不错,我是搬运工) 关于 EXISTS的使用 EXISTS(包 ...
- java中exists是什么_JAVA:sql中exists的用法
exists:强调的是是否返回结果集,不要求知道返回什么,比如:selectnamefromstudentwheresex='m'andmarkexists(select1fromgradewhere ...
- SQL中EXISTS的用法(转)
比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...
- SQL语句中EXISTS的用法
记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...
- MySQL中EXISTS的用法
比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...
- SQL中EXISTS理解使用
SQL中EXISTS的理解使用 关联子查询 EXISTS理解使用 关联子查询 在讲述EXISTS用法之前,先讲述一下关联子查询: 关联子查询:是指在内查询中需要借助于外查询,而外查询离不开内查询的执行 ...
- SQL中Truncate的用法
转自:https://www.cnblogs.com/zhoufangcheng04050227/p/7991759.html 本文导读:删除表中的数据的方法有delete,truncate, 其中T ...
- 【SQL中limit的用法】
SQL中limit的用法 说明:limit子句用于限制查询结果返回的数量,常用于分页查询. 用法:[select * from tableName limit i,n ] 参数:tableName: ...
- sql去重复操作详解SQL中distinct的用法
在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 表B: 1.作用于单列 select dist ...
最新文章
- 天平游码读数例题_量筒、天平经典习题
- mongodb安装.
- android动画帧率_Android动画进阶—使用开源动画库nineoldandroids
- 自己动手写游戏:飞机大战
- 输入法 java_使用 Utf7ime 输入法实现中文输入 Windows+Java 平台(完整步骤版)
- CentOS 7 yum安装Tomcat7-jenkins
- 怎么用matlab做系统辨识,系统辨识大牛Ljung编写的MATLAB系统辨识使用手册
- 马哥linux35期,马哥Linux第五周
- [激光器原理与应用-10]:激光器分类
- php打开文件fopen函数
- LaTeX插入参考文献,简单高效
- 10 大开源免费的项目管理软件推荐
- Git 报错:You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).Please, commit your changes
- 2019 ,摧枯拉朽式的AI洗牌之路
- Java解一元一次方程,一元二次方程,一元三次方程
- Jvisualvm监控远程weblogic服务
- 计算电磁学——变分问题
- 智能视频抠图_App Store 上的“智能视频抠图: 一键去背景”
- mysql varcahr 转datetime_sql 里怎么把varchar转成datetime格式
- 安装ubuntu出现的EFI boot partition问题
热门文章
- [论文笔记] WACV 2019《Photo-Sketching:Inferring Contour Drawings from Images》
- 黑马程序员 黑马博客之模板
- 反复拨打电话,电话测试小程序,紧急电话与普通电话分枝判断
- Linux系统修复网络,解决Linux系统故障排查和修复技巧的3种方法解析与案例分享...
- PageRank 页面排名算法
- Geojson转Shapefile
- ZK7.0.3中从MongoDB下载文件
- 1 PyTorch版YOLOv3 代码中文注释 之 训练 train.py test.py detect.py
- 计算机游戏运行程序的完整过程,如何充分的利用我电脑的内存去运行一个程序(游戏)...
- r96950hs和r76850hs哪个好