2016-12-05 3 views
0

Ich dachte unten 2 Abfragen funktionieren gleich. aber wiederkehrende Zeilen sind sehr unterschiedlich. Könnten Sie mir bitte erklären, warum diese anders sind?SQL Query Differenzen In vs 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

Ihre existiert Abfrage isn verwenden sollten‘ t korreliert. –

+0

Oh, ich habe das. Vielen Dank – Lee

Antwort

0

EXIST einen echten falschen Vergleich der Fall ist, die zweite Abfrage, die Unterabfrage Teil ist immer wahr, wenn Sie mindestens eine Abteilung namens 'Finance' haben so gibt es alle Zeilen in dept_emp es zurück. Unter der Annahme, mindestens eine Abteilung namens Finanzen existieren, die Abfrage gleich

SELECT de.dept_no from dept_emp de where TRUE 

Wenn Sie eine schnellere Art und Weise zu erreichen wollen, was in der ersten Abfrage ist Ihnen ein JOIN

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