我认为以下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)
答案 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;