欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL---In-Exists-Any

程序员文章站 2022-03-09 21:51:08
sql---in-exists-any。假设a in(not in,exists,not exists )b in:只要a中的值在b中存在则返回truenot in:只要a中的值在b中不存在则返回t...

sql---in-exists-any。假设a in(not in,exists,not exists )b in:只要a中的值在b中存在则返回truenot in:只要a中的值在b中不存在则返回trueexists:只要a中的值在b中存在则返回truenot exists:只要a中的值在b中不存在则返回trueany:三种情况 a > any b:a中的值只要大于b中的最小值则返回truea < any b:a中的值只要小于b中的最大值则返回true

a = any b:a中的值只要等于b中的任何值则返回true 从表面上看,in和exists的效果几乎一模一样,不过之前看过一些资料上说,in和exists使用的算法不同,in用的是hash,exists用的是btree;具体区别看链接 我在网上还看到过一种说法是:in会全表扫描,exists遇到第一个就直接返回。由于以当前的知识体系还不足以深挖,但我个人对这种说法持怀疑态度,这种说法的来与也可能与in和exists所使用的的算法有关,因为in先是对子表进行hash,而hash有个特点就是在查找的时候需要挨个比对,这可能就是全表扫描说法的来源,实际上并不是全表扫描,扫描的次数决定于hash表的规模和所谓的运气,因为hash的存储是随机的;而exists用的是树数据结构,那么在查找的时候就是分层查找。