2016-12-05 202 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;