Exists 的逻辑
EXISTS
子查询用来检查是否有存在符合条件的行,如果子查询返回至少一行,则外部查询返回TRUE
,否则返回 FALSE
。通常在需要检查子查询是否有符合条件的行时使用。
当查询结果会返回大量资料的时,使用EXISTS
较符合效能考量,优于IN
,好比说下方的程式码
两个查询结果都会是一样
SELECT * FROM table_aWHERE EXISTS(SELECT * FROM table_b WHERE table_b.id=table_a.id);
以及
SELECT * FROM table_aWHERE idin (SELECT id FROM table_b);
EXISTS
只需要确认是否存在符合条件的行,不需要检查完整的子查询结果。
然而IN
会在执行前先计算并储存子查询的结果集,然后将外部查询的值与这个结果集进行比较。
第一个SQL
使用EXISTS
,当table_a
和table_b
中有相同id
的值时,就会执行,将其列出来
感觉是假设table_a
中的第一笔资料的id
符合条件时,就显示出来,以这个逻辑类推。
然后第二个用IN
的SQL
则是会先将SELECT id FROM table_b
中的id
找出来然后储存
再来才继续条件比较的部分,当table_a
中的第一笔资料等于SELECT id FROM table_b
中的id
时
就将其列出来。