参考链接:https://www.cnblogs.com/mytechblog/articles/2105785.html
原理以及与in关键字的区别:
in: 子查询 >>> in 筛选 >>> 得到结果
exists: 主句查询 >>> 根据exists 关键字中的条件从主句查询结果中筛选符合条件的结果.
举个例子:
表A
ID NAME
1 A1
2 A2
3 A3
表B
ID AID NAME
1 1 B1
2 2 B2
3 2 B3
exists的sql :
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE AID=A.ID
)
IN 的sql :
SELECT ID,NAME FROM A WHERE ID IN (SELECT ID FROM B WHERE AID=A.ID
)
exists 是主查询先查出,再拿子句中AID 去配主句查出来的表中的 A.ID
,符合条件的那条数据就留在结果集中.