2016-12-05 132 views
0

我认为以下2个查询工作相同。但返回的行很不一样。你能解释一下为什么这些不同吗?SQL查询差异与EXISTS

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

你的存在的查询ISN” t相关。 –

+0

哦,我得到了这个。谢谢 – Lee

回答

0

存在时,一个真实的假的比较,第二个查询,子查询部分总是如此,如果你有至少一个部门命名为“财经”所以它返回dept_emp中的所有行。假设至少一个部门叫金融存在,查询等于

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;