当前位置:网站首页>sql中 exists的用法
sql中 exists的用法
2022-08-03 05:28:00 【m0_67401746】
现有:班级表(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.内层的判断条件不要写!=;查询的结果会不尽人意;
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

【dllogger bug】AttributeError: module ‘dllogger‘ has no attribute ‘StdOutBackend‘

Use of Alibaba Cloud SMS Service (create, test notes)

xshell报错-要继续使用此程序,您必须应用最新的更新或使用新版本

Unity Animation从UAS获取动画资产到编制状态机控制简单的人物动画

ARP协议及简单路由器原理(1)

数据库OracleRAC节点宕机处理流程

【IoU loss】IoU损失函数理解

使用Contab调用Shell脚本执行expdp自动备份Oracle

Oracle数据文件收缩_最佳实践_超简单方法

Redis哨兵模式+过期策略、淘汰策略、读写策略
随机推荐
restful 常用状态码
QT 连续生成指定范围内不重复的随机值
一文读懂PCB品质体系认证
权限管理 UGO 、 ACL 、特殊权限
PCB 多层板为什么都是偶数层?
MySQL的主从复制
802.1AS 延迟测量理解
MySQL master-slave replication
MySQL的安装(详细教程)
xshell报错-要继续使用此程序,您必须应用最新的更新或使用新版本
Podman can learn in one piece
快速理解JVM+GC
什么是国密SSL协议?国密证书与传统SSL证书有什么区别?
IPV4地址详解
C#切换输入法
Redis的应用详解
MySql data format is converted to Redis key-value pair format
Oracle常用命令-基本命令
JUC并发编程深入浅出!
BOA服务器移植之嵌入式开发板(FS4412)