2015-12-30 129 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