티스토리 뷰

728x90
반응형

 

Join

 

Join은 간단히 말하면 필요에 의한 두 개 이상의 테이블 간 결합이다.

 

여기서 필요란 당연하다면 당연하게도 사용자의 필요, 따라서 개발자의 필요를 가리킨다.

 

따라서 Join은 필요와 목표에 의한 새로운 테이블을 (임시로) 생성하며,

 

데이터를 손쉽게 조회할 수 있도록 도와준다.

 

계속해서 테이블의 결합방식에 따른 Join의 종류를 알아보자.

 

Inner Join

 

Inner Join은 교집합에 해당한다.

 

두 테이블의 공통된 요소만 가져와 테이블을 구성하기 때문이다.

 

우선 다이어그램을 보면 아래와 같이 생겼다.

 

계속해서 간단한 두 개의 테이블로 예를 들어보자.

각 테이블에서 서로 연관된 내용만 뽑아 테이블을 생성한 것을 확인할 수 있다.

 

계속에서 SQL 표현식을 살펴보면, 아래와 같은 두 가지 방식(명시적, 암시적)으로 지정하는 것을 알 수 있다.

 

SELECT * FROM 
NAME INNER JOIN MAJOR
ON NAME.ID = MAJOR.ID
SELECT * FROM 
NAME, MAJOR
WHERE NAME.ID = MAJOR.ID

추가로 위와 같이 equal 연산자(=)를 이용하는 조인을 동등 조인(EQUI JOIN)이라고 한다.

 

Outer Join

 

Outer Join은 조건에 맞지 않아도 특정 테이블의 모든 행을 전부 포함하는 테이블을 작성하는 방식이다.

 

Left Outer Join

 

Left Outer Join은 크게 두 종류로 나뉜다.

 

왼쪽 테이블의 내용을 전부 가져오되 공통 부분을 포함하는 테이블을 작성하는 방법과

 

공통부분을 제외하고 작성하는 방법. 이 방법은 차집합과 같다. 우선 테이블로 보면 아래와 같다.

 

계속해서 각각을 SQL 쿼리문으로 작성해 보자.

SELECT * FROM
NAME LEFT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
SELECT * FROM
NAME LEFT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
WHERE MAJOR.ID IS NULL

 

Right Outer Join

 

다음으로는 Right Outer Join이다.

 

Left Outer Join에서 방향만 뒤집혔을 뿐 별 다를 것은 없다.

 

SELECT * FROM
NAME RIGHT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
SELECT * FROM
NAME LEFT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
WHERE NAME.ID IS NULL

 

Full Outer Join

 

마지막으로 Full Outer Join이다. 합집합에 해당하는 이 조인은 조건과 상관없이

 

대상 테이블의 모든 데이터를 가져와 테이블을 만든다.

 

SELECT * FROM 
NAME FULL OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID;
SELECT * FROM 
NAME FULL OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
WHERE NAME.ID IS NULL OR MAJOR.ID IS NULL

MySQL의 경우는 Full Outer Join을 지원하지 않기 때문에 아래와 같이 두 조인을 섞어서 쓴다고 한다.

SELECT * FROM 
NAME LEFT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID

UNION

SELECT * FROM 
NAME RIGHT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID;

이외에도 특별한 상황에서 쓰이는 Self Join, Cross Join 등이 있다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함