휘적이는 기록공간

[SQL] Join의 종류 본문

Tech Notes & Growth/Learning Notes

[SQL] Join의 종류

휘희 2022. 5. 15. 23:41

 

Join이란

2개의 테이블에서 각각의 공통값을 이용함으로써 필드를 조합하는 수단이 된다.

데이터베이스는 객체가 1 : N의 관계를 가질 때, 정보의 중복을 제거하기 위해 정규화를 시킨다. 

조인은 정규화 후 데이터를 조합해서 가져오는 기술이라 할 수 있습니다.

 

 

 

 

예제 테이블

예문에서는 편의를 위해 전체 값을 가져오고 있습니다만

사실 * 연산자로 모든 컬럼을 불러오는 것은 DB에 무리가 가기 때문에 필요한 컬럼만 가져와야합니다.

 

 

 

조인은 크게 inner join과 outer join으로 나눌 수 있습니다.

 

Inner Join

내부 조인은 조인 구문을 충족하는 모든 결과를 찾기 위해 A테이블의 각 열을 B테이블의 각 열과 비교 합니다.

조인 구문이 충족되면 A, B 테이블에서 일치된 각 열의 컬럼 값은 결과 열로 결합됩니다.

 

SELECT * 
FROM emplyee el INNER JOIN department dm
ON el.DepartmentID = dm.DepartmentID
;

 

Employee.LastName Employee.DepartmentID Department.DepartmentName Department.DepartmentID
Robinson 34 사무부 34
Jones 33 기술부 33
Smith 34 사무부 34
Seinberg 33 기술부 33
Rafferty 31 영업부 31

 

Outer Join

 

Left (outer) Join

 

SELECT *
FROM employee el LEFT OUTER JOIN department dt
ON el.DepartmentID = dt.DepartmentID
;

 

Employee.LastName Employee.DepartmentID Department.DepartmentName epartment.DepartmentID
Jones 33 기술부 33
Rafferty 31 영업부 31
Steinberg 33 기술부 33
Robinson 34 사무부 34
Smith 34 사무부 34
John null null null

 

Left Join은 왼쪽 테이블을 기준으로 둔 후 outer join을 해줍니다.

 

 

 

Right (outer) Join

SELECT *
FROM employee el RIGHT OUTER JOIN department dt
ON el.DepartmentID = dt.DepartmentID
;

 

Employee.LastName Employee.DepartmentID Department.DepartmentName epartment.DepartmentID
Smith 34 사무부 34
Jones 33 기술부 33
Robinson 34 사무부 34
Steinberg 33 기술부 33
Rafferty 31 영업부 31
null null 마케팅 35

 

Right Join은 기능적으로 Left Join과 동일합니다. 중점이 되는 테이블이 오른쪽이냐 왼쪽이냐의 차이일 뿐입니다.

 

 

 

Full (outer) Join

SELECT *
FROM employee FULL OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID
;

 

Employee.LastName Employee.DepartmentID Department.DepartmentName epartment.DepartmentID
Smith 34 사무부 34
Jones 33 기술부 33
Robinson 34 사무부 34
John null null null
Steinberg 33 기술부 33
Rafferty 31 영업부 31
null null 마케팅 35

 

Full Join은 공통된 부분만 반환하는 Inner Join과 다르게 공통된 부분 + 공통되지 않은 부분 모두를 반환합니다.

 

일부 데이터베이스 시스템에서는 Full Join을 지원하지 않습니다. 이때 UNION을 사용해 비슷하게 구현할 수 있습니다.

 

SELECT *
FROM employee el LEFT OUTER JOIN department dt
ON el.DepartmentID = dt.DepartmentID
UNOIN
SELECT *
FROM employee el RIGHT OUTER JOIN department dt
ON el.DepartmentID = dt.DepartmentID
;

 

Cross Join

 

Cross Join절은 조인되는 두 테이블에서 곱집합을 반환합니다. 

예를 들어 m행을 가진 테이블과 n행을 가진 테이블이 교차 조인되면 m*n개의 행을 생성합니다.

 

SELECT *
FROM employee CROSS JOIN department
;

 

 

 

Self Join

 

Self Join은 자기 자신을 조인 시키는 것입니다. Self Join은 동일한 테이블의 두 복사본을 결합한 것으로 볼 수 있습니다.

실제로 테이블은 복사되지 않지만 SQL은 마치 복사된 것처럼 명령을 수행합니다. 

계층적 데이터를 추출하거나 동일한 테이블 내에서 행을 비교할 때 가장 유용합니다.

 

예시 테이블

 

SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City
;

<>는 !=와 동일합니다

 

결과 확인

 

SQL Tryit Editor v1.6

WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, Opera, and Edge(79). If you use another browser you will still be able to use our Try SQL Editor, but a different ver

www.w3schools.com

 

 

출처

 

join 종류

devart Join Types

SQL Join Types

Data School

SQL Join