2015-12-30 131 views
3

enter image description here tblEmployee表左,tblDepartment右表SQL左連接查詢差異

enter image description here

首先查詢:

Select Name, Gender, Salary, DepartmentName 
from tblEmployee 
Left Join tblDepartment 
On tblEmployee.departmentID = tblDepartment.Id 
Where tblEmployee.departmentID IS Null; 

第二個查詢:

Select Name, Gender, Salary, DepartmentName 
from tblEmployee 
Left Join tblDepartment 
On tblEmployee.departmentID = tblDepartment.Id 
Where tblDepartment.Id IS Null 

這兩個查詢我上面寫的是我們編輯在第二張照片(僅有兩行的照片)中顯示數據。有人可以向我解釋爲什麼上述兩個查詢產生相同的結果嗎?我明白爲什麼第一個查詢能夠工作,因爲您只是過濾掉了departmentID不等於NULL的所有記錄,並選擇了departmentID等於NULL的記錄。儘管對於第二個查詢,我不明白where子句背後的想法。它如何過濾出Employee表中那些NULL值爲空的那兩條記錄?

+3

兩個您發佈的查詢似乎是完全相同。所以結果一樣。可能是你必須再次編輯問題發佈正確的第二個查詢 – parishodak

+1

@parishodak對不起。剛剛更新了這個問題! – LP496

+1

嗯不知道爲什麼它刪除表名稱之前的所有tbl。我也加入了他們。 – LP496

回答

2

在第二個查詢中,最後兩條記錄的tblDepartment.Id將爲NULL,因爲它在tblDepartment表中找不到相應的記錄。左連接將返回第一個表中的所有行。如果它無法在聯接中找到值,則右表中的列值將被替換爲NULL。因此你只能得到最後2條記錄。

+0

快速問題。我不認爲我完全理解On子句的作用。當你說tblEmployee.departmentID = tblDepartment.Id時,該SQL代碼是否查看departmentID列和ID中每行的值,並檢查它們是否匹配?如果他們不那麼會發生什麼? – LP496

+1

'在tblEmployee.departmentID = tblDepartment.Id' tblEmployee中的每個記錄的departmentID將與tblDepartment中的每個記錄的Id值進行比較。如果他們匹配,他們會加入。如果未找到匹配項,則右表中的值將被NULL替換。 –

+0

哦!這是有道理的。感謝您解決這個問題! – LP496

2

第一個查詢將爲您提供結果,其中employee表具有結果,但與零值相關。

第二個查詢將爲您提供員工表中所有記錄的結果,這些記錄在部門表中不存在。

因此,這兩個查詢將爲您提供相同的結果。

即使你可以從單一的表相同的結果,而不加入你試圖讓只有那些記錄,部門不匹配 -

Select Name, Gender, Salary 
from tblEmployee 
where departmentID IS Null; 

這個查詢將是快速,部門名稱不作爲你從來沒有通過這個查詢得到它。

+0

好的,那也回答了我的第二個問題。我所遵循的教程是使用連接完成的,但是我按照您使用連接的方式進行了這種操作,並且工作得很好。 – LP496

3

首先查詢:

Select Name, Gender, Salary, DepartmentName 
from tblEmployee 
Left Join tblDepartment 
On tblEmployee.departmentID = tblDepartment.Id 
Where tblEmployee.departmentID IS Null; 

將帶回從A和B的結果,其中A沒有DepartmentID的

所以:詹姆斯和羅素適合描述。

第二個查詢:

Select Name, Gender, Salary, DepartmentName 
from tblEmployee 
Left Join tblDepartment 
On tblEmployee.departmentID = tblDepartment.Id 
Where tblDepartment.Id IS Null 

將帶回從A結果不上B.

存在,所以詹姆斯和拉塞爾適合描述。

SQL JOINS CheatSheet

+0

該圖有助於消除疑慮!謝謝! – LP496