sql:select * from employees s where not exists(select 1 from dept_emp d where d.emp_no=s.emp_no)内表s:外表d:网上对exists的解释:exists是对外表作loop循环,每次loop循环再对内表进行查询我的疑问:外表是通过其中一个字段去loop内表,只要有一个字段存在,就是存在?还是外表是通过整条数据去跟内表匹配,是否存在,如果是这样,是不是不应是select 1总之,没想明白,exists到底是用什么来判断是否存在的,一行记录,一行记录的一个字段,还是其他?
2 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
exists
指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。具体sql语句如下:
SELECT `user`.*FROM `user`WHERE EXISTS ( SELECT `order`.user_id FROM order` WHERE `user`.id = `order`.user_id )
使用exists关键字进行查询的时候,首先,我们先查询的不是子查询的内容,而是查我们的主查询的表,也就是说,我们先执行的sql语句是:
SELECT `user`.* FROM `user`
然后,根据表的每一条记录,执行以下语句,依次去判断where后面的条件是否成立:
EXISTS ( SELECT `order`.user_id FROM `order` WHERE `user`.id = `order`.user_id )
如果成立则返回true
不成立则返回false
。如果返回的是true
的话,则该行结果保留,如果返回的是false的话,则删除该行,最后将得到的结果返回。
- 2 回答
- 0 关注
- 230 浏览
添加回答
举报
0/150
提交
取消