使用exits和in查询的结果都相同,但是其中运行的机制并不一样。
举例:返回参加考试的人
1.exits
SELECT *
FROM people
WHERE EXISTS(SELECT 1
FROM test
WHERE people.id=test.user_id);
这里exits子查询中 select 1 其实这个1可以是任何数字,因为在exits中返回的结果并不重要,重要的是此处用的是索引查询,判断是否有符合要求的结果,有的话返回true,没有就返回false。
所以对于people表中的每一个记录都放到exits的子查询中进行判断。
注意在子查询中不需要对每个test记录进行扫描,而是直接进行where判断
2.in
SELECT