为了账号安全,请及时绑定邮箱和手机立即绑定

sql总exists是通过什么来评判存在与否

sql总exists是通过什么来评判存在与否

心有法竹 2018-07-06 16:09:49
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的话,则删除该行,最后将得到的结果返回。


查看完整回答
反对 回复 2018-07-12
  • 2 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信