SQL查询差异在vs EXISTS中

时间:2016-12-05 07:23:33

标签: mysql

我认为以下2个查询的工作方式相同。但返回的行非常不同。你能解释一下为什么那些不同吗?

1

SELECT de.dept_no from dept_emp de where de.dept_no
IN (select d.dept_no from departments d where d.dept_name='Finance');
17346 rows in set (0.02sec)

2

SELECT de.dept_no from dept_emp de where EXISTS
( select d.dept_no from departments d where d.dept_name='Finance');
331603 rows in set (0.83sec)

1 个答案:

答案 0 :(得分:0)

EXIST进行真正的错误比较,第二个查询,如果您至少有一个名为' Finance'的部门,则子查询部分始终为true。所以它返回dept_emp中的所有行。假设存在至少一个名为finance的部门,则查询等于

SELECT de.dept_no from dept_emp de where TRUE

如果您想要更快地实现第一个查询中的内容,您应该使用JOIN

SELECT de.dept_no FROM dept_emp de INNER JOIN departments s
on de.dept_no = d.dept_no
WHERE de.dept_no;