我在SQL Server中閱讀了有關CROSS APPLY
和OUTER APPLY
的文章。以下表格用於說明兩者。OUTER適用於子查詢
Employee表:
EmployeeID FirstName LastName DepartmentID
1 Orlando Gee 1
2 Keith Harris 2
3 Donna Carreras 3
4 Janet Gates 3
系表:
DepartmentID Name
1 Engineering
2 Administration
3 Sales
4 Marketing
5 Finance
我瞭解,OUTER APPLY
類似於LEFT OUTER JOIN.
但是,當我申請如下表之間OUTER APPLY
,
select * from Department e
outer apply
Employee d
where d.DepartmentID = e.DepartmentID
我得到低於結果(S AME如INNER JOIN
結果)
DepartmentID Name EmployeeID FirstName LastName DepartmentID
1 Engineering 1 Orlando Gee 1
2 Administration 2 Keith Harris 2
3 Sales 3 Donna Carreras 3
3 Sales 4 Janet Gates 3
當我表之間施加OUTER APPLY
如下面(與right table
爲子查詢)。
select * from Department e
outer apply
(
select * from
Employee d
where d.DepartmentID = e.DepartmentID
)a
我得到以下結果(同LEFT OUTER JOIN
結果)
DepartmentID Name EmployeeID FirstName LastName DepartmentID
1 Engineering 1 Orlando Gee 1
2 Administration 2 Keith Harris 2
3 Sales 3 Donna Carreras 3
3 Sales 4 Janet Gates 3
4 Marketing NULL NULL NULL NULL
5 Finance NULL NULL NULL NULL
有人可以解釋爲什麼這兩個查詢了不同outputs
?
感謝您的解釋,但我也有第二個查詢中的where子句..是否在子查詢中的where子句的行爲不同? – bmsqldev
由於where子句位於子查詢中,因此它首先被應用,並且不會影響從'Department'檢索的行,因此而不是指示「獲取部門和員工的所有組合,然後只留下部門匹配的那些」的指令,你實際上是在說「給我所有部門的記錄,併爲每個部門獲取所有匹配的員工記錄」。 – GarethD