Reference:
http://blog.sqlauthority.com/2010/07/08/sql-server-the-self-join-inner-join-and-outer-join/
USE
TempDb
GO
-- Create a Table
CREATE TABLE
Employee
(
EmployeeID
INT PRIMARY KEY
,
Name
NVARCHAR
(
50
),
ManagerID
INT
)
GO
-- Insert Sample Data
INSERT INTO
Employee
SELECT
1
,
'Mike'
,
3
UNION
ALL
SELECT
2
,
'David'
,
3
UNION
ALL
SELECT
3
,
'Roger'
, NULL
UNION
ALL
SELECT
4
,
'Marry'
,
2
UNION
ALL
SELECT
5
,
'Joseph'
,
2
UNION
ALL
SELECT
7
,
'Ben'
,
2
GO
-- Check the data
SELECT
*
FROM
Employee
GO

We will now use inner join to find the employees and their managers’ details.
-- Inner Join
SELECT
e1.Name EmployeeName
,
e2.name
AS
ManagerName
FROM
Employee e1
INNER JOIN
Employee e2
ON
e1.ManagerID
=
e2.EmployeeID
GO

From the result set, we can see that all the employees who have a manager are visible. However we are unable to find out the top manager of the company as he is not visible in our resultset. The reason for the same is that due to inner join, his name is filtered out. Inner join does not bring any result which does not have manager id. Let us convert Inner Join to Outer Join and then see the resultset.
-- Outer Join
SELECT
e1.Name EmployeeName
,
ISNULL
(
e2.name
,
'Top Manager'
)
AS
ManagerName
FROM
Employee e1
LEFT
JOIN
Employee e2
ON
e1.ManagerID
=
e2.EmployeeID
GO

Once we convert Inner Join to Outer Join, we can see the Top Manager as well. Here we have seen how Self Join can behave as an inner join as well as an outer join.
As I said earlier, many of you know these details, but there are many who are still confused about this concept. I hope that this concept is clear from this post.
No comments:
Post a Comment