[Database] 테이블 조인 (INNER JOIN, OUTER JOIN)

나른한 개발자·2022년 4월 21일
0

데이터베이스

목록 보기
1/2

테이블 조인이란 복수의 테이블을 결합하는 것으로, 데이터 조회 시 다른 테이블의 데이터를 함께 조회해야할 때 이용한다. 관계형 데이터베이스는 수학 집합론의 관계형 이론에서 유래하여 데이터를 집합으로 간주해 다루는데, 아래 조인에 대해 이해할 때 이 점을 참고하면 보다 쉽게 감을 잡을 수 있을 것이다.

조인은 크게 Inner join, Outer join으로 나뉜다.

INNER JOIN


JOIN에 대해 얘기할 때는 보통 INNER JOIN을 지칭하는데, 테이블 데이터 간 교집합을 말한다고 생각하면 된다.

Table A는 상품을 관리하는 테이블이며, Table B는 상품에 대한 재고를 관리하는 테이블이다. 물론 저정도의 데이터는 한 테이블에서 관리해도 되겠지만 우리는 이해를 위해 각 테이블에 훨씬 많은 컬럼들이 존재한다고 가정하자.

조인은 테이블을 결합하는 것이고, 내부조인은 교집합이라고 했다. 각 테이블을 살펴보면 상품코드라는 컬럼을 공통으로 가지고 있고 이를 결합 조건으로 하여 아래와 같이 쿼리문을 작성할 수 있다.

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 //조회할 컬럼
	FROM TableA as A       	// 결합할 테이블 명. as 이후는 별칭
    	INNER JOIN TableB as B   // 결합할 테이블 명. as 이후는 별칭
    	ON A.상품코드 = B.상품코드  // 결합 조건

결합을 할 때의 조건은 ON 이하에 명시해주면 된다. 이때 WHERE절을 이용하여 특정 데이터만 골라낸다면 다음과 같이 작성해주면 된다.

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 
	FROM TableA as A       
    	INNER JOIN TableB as B   
    	ON A.상품코드 = B.상품코드
    WHERE A.상품코드 = 1 


테이블 조인에 대한 조건은 ON, 데이터 필터링에 대한 조건은 WHERE을 사용한다.

  • ~를 기준으로 테이블 묶어줘~ -> ON
  • ~한 데이터만 볼래! -> WHERE

헷갈리지 말자!


OUTER JOIN


외부 조인은 공통 데이터 외에 어느 한 테이블에만 존재하는 데이터도 함께 결합하여 조회하고자 할 때 사용하는 방법이다. 외부 조인은 LETF OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있는데, 데이터가 한 쪽에만 존재할 때 어느 테이블을 기준으로 삼을지에 따라 나뉜다.

내부 조인은 공통된 컬럼을 기준으로 테이블을 묶기 때문에 순서가 상관이 없었지만, 외부 조인에서는 순서가 중요하다. 어떤 테이블을 먼저 접근하냐 (드라이빙 테이블)에 따라 쿼리 성능에 영향을 미치므로 더 적은 데이터를 추출하는 테이블을 드라이빙 테이블로 삼는 것이 좋다.

LEFT JOIN

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

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 
	FROM TableA as A       
    	LEFT JOIN TableB as B   
    	ON A.상품코드 = B.상품코드

LEFT JOIN 명령문 왼쪽에 위치한 테이블(Table A)을 기준으로 조인되었으며 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 중복 데이터가 결합되었다. 값이 없는 데이터는 null로 표시가 된다.

RIGHT JOIN

오른쪽 테이블을 기준으로 조인을 하는 것이다. 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 중복 데이터가 결합이 되었다.

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 
	FROM TableA as A       
    	RIGHT JOIN TableB as B   
    	ON A.상품코드 = B.상품코드

FULL JOIN

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

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 
	FROM TableA as A       
    	FULL JOIN TableB as B   
    	ON A.상품코드 = B.상품코드

보통 내부 조인을 많이 사용하며 외부 조인 중에는 LEFT JOIN을 많이 사용한다. 데이터 조회 시 한 테이블에 대한 조회보다 다른 테이블을 함께 조회하는 경우가 많으니 조인에 대해 확실히 이해를 해두면 쉽게 원하는 데이터를 추출할 수 있을 것이다.

profile
Start fast to fail fast

0개의 댓글