举一个例子,轻松理解 EXISTS (有返回值为真)和 NOT EXISTS(无返回值为真)
两个表 t.s_id = tt.s_id
1.exists
select t.s_id,t.s_name from subdbm.student t where t.s_sex='男' and exists(select * from subdbm.score tt where t.s_id=tt.s_id) 查找有成绩的男生的名字和id
select t.s_id,t.s_name from subdbm.student t where t.s_sex='男' 查找男性别的同学名字和id
exists(select * from subdbm.score tt where t.s_id=tt.s_id) 这个意思就是 t.sid 的这8个号 如果能和tt.sid 能对应上的,就会当作 select t.s_id,t.s_name from subdbm.student t where t.s_sex='男' and 这个语句的一个条件
比如 t.sid=01 tt.sid里面没有01 那么他的返回值就是假 不会吧这个条件加到主查询里面
t,sid=02 tt.sid也有02 那么他就会加到主查询的过滤条件里面就成了
select t.s_id,t.s_name from subdbm.student t where t.s_sex='男' and t,sid=02
以此类推,02 03 04 05 06都有就会挨个查一遍,其中男生有 02 03 04 就会输出他们的id和名字
2.not exists 和exists相反
select t.s_id,t.s_name from subdbm.student t where t.s_sex='男' and exists(select * from subdbm.score tt where t.s_id=tt.s_id)
他会把这个没有的输出出来。也就是t.s_id=01 和 07 08 加到过滤条件 男生只有01所以会输出01