[데이터베이스] JOIN

sunny·2024년 1월 16일
0

Join이란 두개 이상의 테이블을 묶어 하나의 결과 집합으로 만들어 내는 과정을 말한다.

Join에는 크게 INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN이 있다.

INNER JOIN

조인을 얘기할 때는 보통 INNER JOIN을 얘기하며, INNER JOIN은 그림과 같이 교집합을 나타낸다!

👉 양쪽 모두에 값이 있는 행(NOT NULL) 반환

이때 결합을 할 때의 조건은 ON 이하에 명시해주면 된다.

SELECT * FROM Categories C
JOIN Products P 
  ON C.CategoryID = P.CategoryID;

OUTER JOIN

OUTER JOIN은 공통 데이터 외에 어느 한 테이블에만 존재하는 데이터도 함께 결합하여 조회하고자 할 때 사용하는 방법으로 LETF OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있다.

그리고 이는 데이터가 한 쪽에만 존재할 때 어느 테이블을 기준으로 삼을지에 따라 나뉜다!

👉 반대쪽에 데이터가 있든 없든(없으면 NULL), 선택된 방향에 있으면 출력!!

LEFT OUTER JOIN

왼쪽 테이블을 기준으로 조인을 하는 것!!

왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 중복 데이터가 결합되며 값이 없는 데이터는 null로 표시가 된다.

SELECT
  E1.EmployeeID, CONCAT_WS(' ', E1.FirstName, E1.LastName) AS Employee,
  E2.EmployeeID, CONCAT_WS(' ', E2.FirstName, E2.LastName) AS NextEmployee
FROM Employees E1
LEFT JOIN Employees E2
ON E1.EmployeeID + 1 = E2.EmployeeID
ORDER BY E1.EmployeeID;

RIGHT OUTER JOIN

LEFT OUTER JOIN의 반대.

FULL OUTER JOIN

LEFT JOIN 결과와 OUTER JOIN 결과를 합친 결과를 얻을 수 있다.

MySQL에서는 FULL OUTER JOIN을 지원하진 않지만, LEFT JOIN과 RIGHT JOIN을 union하여 사용할 수 있다.

CROSS JOIN

한쪽 테이블의 한 행당 다른쪽 테이블의 모든 행을 하나씩 조인하여 테이블의 모든 가능한 조합을 생성한다.

WHERE 절이나 JOIN 조건 없이 두 테이블을 JOIN하면 CROSS JOIN으로 간주된다.

SELECT <column 목록>
FROM <첫번째 테이블>
CROSS JOIN <두번째 테이블>

SELF JOIN

자기자신의 테이블을 조인한다.

같은 테이블 내에서 관련 레코드를 찾아내는 데 유용하게 사용될 수 있습니다.

ex) 직원과 그들의 매니저 정보를 같은 테이블에서 가져오는 경우

SELECT <column 목록>
FROM <테이블>
	INNER JOIN <테이블>
	ON <조인 조건>
[WHERE 검색 조건]

0개의 댓글