SQL의 꽃 JOIN이다.
4가지의 Join이 있으며, 이에대하여 정리해보자!

(INNER) JOIN

Returns records that have matching values in both table.
두개의 테이블에 모두 있는 값을 매칭한다!

SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
INNER JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;

## 예제

위의 테이블에서 Employee Table의 EmpID와 Project를 연결해서 , 해당 인물의 프로젝트를 출력하자

SELECT Employee.EmpID, Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
INNER JOIN Projects ON Employee.EmpID=Projects.EmpID;

FULL (OUTER) JOIN

Returns all records when there is a match in either left or right table
양쪽을 서로 붙이는 것으로, 서로 없는것들에 대해 NULL로 채우면서 JOIN하는것.

SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
FULL JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;

Employee 테이블과 Projects 테이블을 EmpID를 기준으로 FULL JOIN하였다.
그 결과 EMP에 없는 내용이지만, Project에 기록이 있을경우 EmpFname에 Null이 입력되고, 반대의 경우도 똑같이 다 연결되었다

LEFT JOIN

Left join returns all records from the left table (table1), and matched recored from the right table.
The recult is NULL from the right side, if there is no match.
왼쪽의 있는 테이블을 기준으로, 오른쪽 테이블을 붙이며, 오른쪽 테이블 중 매칭되지 않는 데이터는 NULL로 매핑된다.
인덱스 개수 : 왼쪽 테이블 행 수 만큼

SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
LEFT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;

왼쪽테이블 (Employee)을 기준으로 오른쪽 테이블 (Projects)를 붙였다. 그 결과, 왼쪽의 모든것은 다 따라왔으나, 그 데이터 중 오른쪽에 없을경우 Project테이블 내용이 NULL로 매핑되었다

RIGHT JOIN

Returns all records form the right table, and the matched records from the left table
오른쪽 테이블 (join하는 테이블)을 기준으로 붙임 -> 인덱스 개수 : 오른쪽 테이블 행 수 만큼

Select * from Orders o
RIGHT JOIN Customers c
ON o.CustomerID = c.CustomerID;

SELF JOIN

A Self join is a regular join, but the table is joined with itself.
스스로를 조인하는것으로, 활용하는 방법에 대해 조금 난이도있다고 생각된다.
가장 대표적인 케이스로, 어떠한 인적정보 테이블에서, 자신과 같은 도시에 사는 다른사람 쌍을 구해보는 쿼리를 짠다고 생각하면

SELECT e1.FirstName, e2.FirstName, e1.city
FROM employees e1, employees e2
where e1.EmployeeID <> e2.EmployeeID and e1.City = e2.City

where e1.EmployeeId <> e2.EmployeeId 의 부분은 자기 스스로와 매핑되지 않도록 하기위함이고,

and e1.city=e2.City 이 부분은 city가 같은 다른사람을 조인하기 위한 부분이다.

'SQL > SQL 공부' 카테고리의 다른 글

Programmers SQL 없어진 기록찾기  (0) 2021.06.05
기초 문법  (0) 2021.05.28

+ Recent posts