2013-02-25 47 views
3

有人可以解釋爲什麼在以下SQL中有兩個不同的結果集。連接中的WHERE和AND子句之間的區別

SQL 1-

SELECT e.employee_id,e.first_name, 
e.department_id, 
d.department_id, 
d.department_name 
FROM employees e RIGHT OUTER JOIN departments d 
ON (e.department_id = d.department_id) where d.department_name='Treasury'; 

結果:記錄其中d.department_name ='財政部只。

SQL 2-

SELECT e.employee_id,e.first_name, 
e.department_id,`enter code here` 
d.department_id, 
d.department_name 
FROM employees e RIGHT OUTER JOIN departments d 
ON (e.department_id = d.department_id) and d.department_name='Treasury'; 

結果:所有d.deparment_name值的記錄。

+0

您是否嘗試過比較每個查詢的結果,而沒有'd.department_name ='Treasury''條件? – 2013-02-25 15:10:05

回答

1

第一個返回department_name爲'Treasury'的所有連接記錄,因此部門表中的每個記錄都將被連接,但第二個記錄將只連接具有department_name'Treasury'的部門表中的記錄。

0

首先將條件應用到所有記錄後,在應用連接和所有記錄後,所以它被應用到最終的返回結果。

雖然第二個從右表返回所有記錄,即使連接條件不匹配,因爲它是正確的連接。

3

在查找連接表中的匹配行時使用on條件。對於外連接(右連接或左連接),與on條件不匹配的行仍可能會在結果集中結束。

where條件適用於所有選定的行。任何未通過where測試的行都將從結果集中排除。

相關問題