EnjoY | Database Research And Development: SQL Server : SQL Joins

Saturday, September 19, 2020

SQL Server : SQL Joins

This article is half-done without your Comment! *** Please share your thoughts via Comment ***

SQL Joins

SQL JOIN combines records/rows from two or more tables based on a related column between them.



Table: Department

SELECT * FROM Department WITH (NOLOCK)

 

DepartmentID

DepartmentName

IsActive

1

Computer Science

1

2

Maths

1

3

Chemistry

1

4

Physics

1

 

Table: Employee

SELECT * FROM Employee  WITH (NOLOCK)

 

EmployeeID

DepartmentID

EmployeeName

Gender

BirthDate

Salary

Detail

1

1

Krishnan

M

4/4/1974

30000

Krishnan Details

2

2

Raman

M

12/31/1974

29000

Raman Details

3

3

Durga

F

10/2/1980

25000

Durga Details

4

3

Saratha

F

9/2/1978

26000

Saratha Details

5

2

Shivan

M

11/6/1970

45000

Shivan Details

6

3

Parvathi

F

9/18/1975

35000

Parvathi Details

7

0

Easwari

F

10/12/1990

10000

Parvathi Details

8

0

Donald

M

11/11/1990

12000

Donald Details

 

By looking the above sample table data, we can say

 

The EmployeeID 7 and 8 do not have the DepartmentID (not associated with department).

The DepartmentID 4 does not have Employees.

 

 

The different types of JOINs are;

 

·         INNER JOIN 

  – Select records that have matching values in both (LEFT and RIGHT) tables.

 - EXAMPLE QUERY FOR INNER JOIN

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName, 

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

INNER JOIN Department d WITH (NOLOCKON d.DepartmentID = e.DepartmentID

 

 RESULT: Returns only matched records between Employee(LEFT) and Department(RIGHT) tables.

 

EmployeeID

EmployeeName

DepartmentID

DepartmentName

Gender

Salary

1

Krishnan

1

Computer Science

Male

30000

2

Raman

2

Maths

Male

29000

3

Durga

3

Chemistry

Female

25000

4

Saratha

3

Chemistry

Female

26000

5

Shivan

2

Maths

Male

45000

6

Parvathi

3

Chemistry

Female

35000

 



·         LEFT (OUTER) JOIN – Select all records from the LEFT table and matched records from RIGHT table. 

 

        -- EXAMPLE QUERY FOR LEFT JOIN

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName, 

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

LEFT JOIN Department d WITH (NOLOCKON d.DepartmentID = e.DepartmentID

 

RESULT: Returns all the Employee(LEFT) table records, including not matched with department(RIGHT) table.

 

EmployeeID

EmployeeName

DepartmentID

DepartmentName

Gender

Salary

1

Krishnan

1

Computer Science

Male

30000

2

Raman

2

Maths

Male

29000

3

Durga

3

Chemistry

Female

25000

4

Saratha

3

Chemistry

Female

26000

5

Shivan

2

Maths

Male

45000

6

Parvathi

3

Chemistry

Female

35000

7

Easwari

NULL

NULL

Female

10000

8

Donald

NULL

NULL

Male

12000

 

·         RIGHT (OUTER) JOIN – Select all records from the RIGHT table and matched records from LEFT table.

 -- EXAMPLE QUERY FOR RIGHT JOIN

 SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName,   

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

RIGHT JOIN Department d WITH (NOLOCKON d.DepartmentID = e.DepartmentID

 

RESULT: Returns all the Department(RIGHT) table records, including not matched with Employee(LEFT) table.

 

EmployeeID

EmployeeName

DepartmentID

DepartmentName

Gender

Salary

1

Krishnan

1

Computer Science

Male

30000

2

Raman

2

Maths

Male

29000

5

Shivan

2

Maths

Male

45000

3

Durga

3

Chemistry

Female

25000

4

Saratha

3

Chemistry

Female

26000

6

Parvathi

3

Chemistry

Female

35000

NULL

NULL

4

Physics

NULL

NULL

 



·         FULL (OUTER) JOIN – Select all records when there is a match in either LEFT or RIGHT table records.

  

-- EXAMPLE QUERY FOR FULL OUTER

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName, 

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

FULL OUTER JOIN Department d WITH (NOLOCK)  ON d.DepartmentID = e.DepartmentID

 

RESULT: Returns all the Employee(LEFT) and Department(RIGHT) tables record there is match in either Employee OR Department table records.

 

EmployeeID

EmployeeName

DepartmentID

DepartmentName

Gender

Salary

1

Krishnan

1

Computer Science

Male

30000

2

Raman

2

Maths

Male

29000

3

Durga

3

Chemistry

Female

25000

4

Saratha

3

Chemistry

Female

26000

5

Shivan

2

Maths

Male

45000

6

Parvathi

3

Chemistry

Female

35000

7

Easwari

NULL

NULL

Female

10000

8

Donald

NULL

NULL

Male

12000

NULL

NULL

4

Physics

NULL

NULL

 

·         CROSS JOIN OR (Cartesian Product) – Return a table which consists of records which combines each record from the LEFT table with each record of the RIGHT table.

        

-- EXAMPLE QUERY FOR CROSS JOIN

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName, 

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

CROSS JOIN Department d WITH (NOLOCK)

 RESULT: Returns each record from the Employee(LEFT) table with each record of the Department(RIGHT) table.

 

 

EmployeeID

EmployeeName

DepartmentID

DepartmentName

Gender

Salary

1

Krishnan

1

Computer Science

Male

30000

2

Raman

1

Computer Science

Male

29000

3

Durga

1

Computer Science

Female

25000

4

Saratha

1

Computer Science

Female

26000

5

Shivan

1

Computer Science

Male

45000

6

Parvathi

1

Computer Science

Female

35000

7

Easwari

1

Computer Science

Female

10000

8

Donald

1

Computer Science

Male

12000

1

Krishnan

2

Maths

Male

30000

2

Raman

2

Maths

Male

29000

3

Durga

2

Maths

Female

25000

4

Saratha

2

Maths

Female

26000

5

Shivan

2

Maths

Male

45000

6

Parvathi

2

Maths

Female

35000

7

Easwari

2

Maths

Female

10000

8

Donald

2

Maths

Male

12000

1

Krishnan

3

Chemistry

Male

30000

2

Raman

3

Chemistry

Male

29000

3

Durga

3

Chemistry

Female

25000

4

Saratha

3

Chemistry

Female

26000

5

Shivan

3

Chemistry

Male

45000

6

Parvathi

3

Chemistry

Female

35000

7

Easwari

3

Chemistry

Female

10000

8

Donald

3

Chemistry

Male

12000

1

Krishnan

4

Physics

Male

30000

2

Raman

4

Physics

Male

29000

3

Durga

4

Physics

Female

25000

4

Saratha

4

Physics

Female

26000

5

Shivan

4

Physics

Male

45000

6

Parvathi

4

Physics

Female

35000

7

Easwari

4

Physics

Female

10000

8

Donald

4

Physics

Male

12000

 

 

-- SQL QUERY EXAMPLE

 

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]') AND type in (N'U'))

DROP TABLE [dbo].[Employee]

GO

 

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Department]') AND type in (N'U'))

DROP TABLE [dbo].[Department]

GO

 

CREATE TABLE [dbo].[Department](

       [DepartmentID] [int] NOT NULL IDENTITY(0,1),

       [DepartmentName] [varchar](50) NOT NULL,

       [IsActive] [bit] NOT NULL CONSTRAINT DF_Department_IsActive DEFAULT (1)

 CONSTRAINT [PK_Department_DepartmentID] PRIMARY KEY CLUSTERED

(

       [DepartmentID] ASC

)

 ON [PRIMARY]

ON [PRIMARY]

 

GO

 

CREATE TABLE [dbo].[Employee](

       [EmployeeID] int NOT NULL IDENTITY(1,1),

       [DepartmentID] int NOT NULL, --CONSTRAINT FK_Employee_DepartmentID REFERENCES [Department](DepartmentID),

       [EmployeeName] varchar(50) NOT NULL,

       [Gender] char(1) NOT NULL CONSTRAINT CH_Employee_Gender CHECK ([Gender] in('M','F','O')),

       [BirthDate] date NOT NULL,

       [Salary] decimal(10,2) NULL,

       [Detail] varchar(max) NULL,

       [IsActive] bit NOT NULL CONSTRAINT DF_Employee_IsActive DEFAULT (1),

 CONSTRAINT [UQ_Employee_EmployeeName] UNIQUE(EmployeeName),

 CONSTRAINT [PK_Employee_EmployeeID] PRIMARY KEY CLUSTERED

(

       [EmployeeID] ASC

)

ON [PRIMARY]

ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 

GO

 

 

SET IDENTITY_INSERT [dbo].[Department] ON

INSERT [dbo].[Department] ([DepartmentID], [DepartmentName], [IsActive]) VALUES (1, N'Computer Science', 1)

INSERT [dbo].[Department] ([DepartmentID], [DepartmentName], [IsActive]) VALUES (2, N'Maths', 1)

INSERT [dbo].[Department] ([DepartmentID], [DepartmentName], [IsActive]) VALUES (3, N'Chemistry', 1)

INSERT [dbo].[Department] ([DepartmentID], [DepartmentName], [IsActive]) VALUES (4, N'Physics', 1)

SET IDENTITY_INSERT [dbo].[Department] OFF

 

 

SET IDENTITY_INSERT [dbo].[Employee] ON

INSERT [dbo].[Employee] ([EmployeeID], [DepartmentID], [EmployeeName], [Gender], [BirthDate], [Salary], [Detail], [IsActive])

VALUES (1, 1, N'Krishnan'N'M''04/04/1974 12:00PM'CAST(30000.00 AS Decimal(10, 2)), N'Krishnan Details', 1)

INSERT [dbo].[Employee] ([EmployeeID], [DepartmentID], [EmployeeName], [Gender], [BirthDate], [Salary], [Detail], [IsActive])

VALUES (2, 2, N'Raman'N'M''12/31/1974'CAST(29000.00 AS Decimal(10, 2)), N'Raman Details', 1)

INSERT [dbo].[Employee] ([EmployeeID], [DepartmentID], [EmployeeName], [Gender], [BirthDate], [Salary], [Detail], [IsActive])

VALUES (3, 3, N'Durga'N'F''10/02/1980'CAST(25000.00 AS Decimal(10, 2)), N'Durga Details', 1)

INSERT [dbo].[Employee] ([EmployeeID], [DepartmentID], [EmployeeName], [Gender], [BirthDate], [Salary], [Detail], [IsActive])

VALUES (4, 3, N'Saratha'N'F''09/02/1978'CAST(26000.00 AS Decimal(10, 2)), N'Saratha Details', 1)

INSERT [dbo].[Employee] ([EmployeeID], [DepartmentID], [EmployeeName], [Gender], [BirthDate], [Salary], [Detail], [IsActive])

VALUES (5, 2, N'Shivan'N'M''11/06/1970'CAST(45000.00 AS Decimal(10, 2)), N'Shivan Details', 1)

INSERT [dbo].[Employee] ([EmployeeID], [DepartmentID], [EmployeeName], [Gender], [BirthDate], [Salary], [Detail], [IsActive])

VALUES (6, 3, N'Parvathi'N'F''9/18/1975'CAST(35000.00 AS Decimal(10, 2)), N'Parvathi Details', 1)

INSERT [dbo].[Employee] ([EmployeeID], [DepartmentID], [EmployeeName], [Gender], [BirthDate], [Salary], [Detail], [IsActive])

VALUES (7, 0, N'Easwari'N'F''10/12/1990', 10000.00, N'Parvathi Details', 1)

INSERT [dbo].[Employee] ([EmployeeID], [DepartmentID], [EmployeeName], [Gender], [BirthDate], [Salary], [Detail], [IsActive])

VALUES (8, 0, N'Donald'N'M''11/11/1990', 12000.00, N'Donald Details', 1)

SET IDENTITY_INSERT [dbo].[Employee] OFF

 

GO

 

SELECT * FROM Department WITH (NOLOCK)

GO

 

SELECT * FROM Employee  WITH (NOLOCK)

GO

 

-- EXAMPLE QUERY FOR INNER JOIN

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName, 

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

INNER JOIN Department d WITH (NOLOCKON d.DepartmentID = e.DepartmentID

 

 

-- EXAMPLE QUERY FOR LEFT JOIN

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName, 

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

LEFT JOIN Department d WITH (NOLOCKON d.DepartmentID = e.DepartmentID

 

-- EXAMPLE QUERY FOR RIGHT JOIN

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName,   

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

RIGHT JOIN Department d WITH (NOLOCKON d.DepartmentID = e.DepartmentID

 

 

-- EXAMPLE QUERY FOR FULL OUTER

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName, 

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

FULL OUTER JOIN Department d WITH (NOLOCK)  ON d.DepartmentID = e.DepartmentID

 

-- EXAMPLE QUERY FOR CROSS JOIN

 

SELECT e.EmployeeID,

       e.EmployeeName,

       d.DepartmentID,

       d.DepartmentName, 

       CASE WHEN e.Gender = 'F' THEN 'Female'

            WHEN e.Gender = 'M' THEN 'Male' ELSE NULL

       END AS Gender,

       e.Salary     

FROM Employee e WITH (NOLOCK)

 

CROSS JOIN Department d WITH (NOLOCK)


No comments:

Post a Comment

It’s all about friendly conversation here at small review :) I’d love to be hear your thoughts!

Be sure to check back again because I do make every effort to reply to your comments here.

Featured Post

SQL Server : SELECT all columns to be good or bad in database system

This article is half-done without your Comment! *** Please share your thoughts via Comment *** In this post, I am going to write about one o...

Popular Posts