SQL의 핵심, 여러 테이블을 다루는 조인(LEFT OUTER JOIN, RIGHT OUTER JOIN)

코드잇 / 조회수 : 2483

SQL 기초를 어느 정도 배우고나면 이제 극복해야할 산이 하나 있습니다. 그것은 바로 여러 테이블을 다루는 방법을 익히는 건데요.

실무에서 우리가 분석해야할 데이터는 각 테이블에 흩어져있습니다.

예를 들어, 회원 정보는 'member' 테이블에, 상품 정보는 'item' 테이블에, 리뷰 정보는 'review' 테이블에 있는 것처럼 말이죠. 실무에서 발생하는 문제들은 보통, 이런 여러 종류의 테이블을 연결해서 하나로 만들어야, 제대로된 답을 얻을 수 있는 경우가 많은데요.

이렇게 테이블을 연결하는 작업 중에는 '조인(Join)'이라는 것이 있습니다. 조인은 두 개의 테이블을 가로 방향으로 이어붙이는 작업입니다.

조인에는 여러 가지 종류가 있는데요.

이번 글에서는 그 중에서도 실무에서 활용도가 특히 높은 종류의 조인인 LEFT OUTER JOINRIGHT OUTER JOIN에 대해 배워볼게요.

1. LEFT OUTER JOIN

먼저, LEFT OUTER JOIN에 대해 배워볼게요. 잠깐 아래 그림을 볼까요?

지금 어떤 홈쇼핑 사이트의 각종 상품 정보(상품이름, 남성용/여성용 표시, 가격, 상품설명 등)가 담긴 item 테이블과, 각 상품의 재고 수 정보가 담긴 stock 테이블이 있다고 해봅시다.

지금 stock 테이블에는 모든 상품의 재고 수 정보가 있는 것은 아닙니다. 재고 수 정보가 있는 상품도 있고, 없는 상품도 있는데요. 잠깐 stock 테이블의 item_id 라는 이름의 컬럼을 보세요. 이 컬럼을 보면 stock 테이블의 각 row(행)가 어떤 상품의 재고 수를 나타내는지 알 수 있습니다.

예를 들어, item_id 컬럼의 값이 2인 row는, item 테이블의 id 컬럼의 값이 2인 '남성용 밴딩 린넨 와이드 팬츠'에 대한 재고 수 정보인 거죠.

이렇게 두 테이블이 있는 상태에서, 만약 각 상품의 정보와 재고 수 정보를 한 눈에 보려면 어떻게 해야할까요?

아래와 같은 SQL 문을 써주면 됩니다.

지금 FROM 절 부분을 자세히 보세요. item 테이블 이름과 stock 테이블 이름 사이에 LEFT OUTER JOIN이라고 써있죠? 이 말은 item 테이블을 기준으로 stock 테이블을 이어붙인다는 뜻입니다. 여기서 LEFT라는 건 지금 왼쪽에 이름이 써있는 item 테이블을 기준으로 하겠다는 걸 나타냅니다.

그리고 그 밑의

ON 절은 FROM 절의 내용대로 두 테이블을 이어붙일 때 item 테이블의 id 컬럼과 stock 테이블의 item_id 컬럼의 값이 같은 row들을 이어붙이라는 뜻인데요.

이 SQL 문에 의해서 조인이 어떤 식으로 이루어지는지 각 단계별 이미지로 설명할게요.

(1) 일단, item 테이블을 기준으로 해서

(2) item 테이블의 id 컬럼의 값을 기준으로, 그것과 같은 값을 item_id 컬럼에 갖고 있는 stock 테이블의 row들을 그대로 이어붙입니다.

(3) 그리고 일치하는 값이 없는 item 테이블의 row 옆의 빈 공간들은, 모두 NULL로 채워줍니다.

여기까지가 바로 위 SQL 문이 LEFT OUTER JOIN을 해서 만든 결과 테이블입니다.

그 다음 이 결과 테이블에서 SELECT 문에 써있는 컬럼들만 추려낸다면

(4) 결과 테이블 중에서도 원하는 컬럼들만 볼 수 있게 되는 거죠. 지금, 각 상품별 정보와 재고 수 정보가 한 눈에 보이죠? 그리고 재고 수 정보가 있는 상품도 있고, 없는 상품도 있다는 것을 알 수 있네요.

LEFT OUTER JOIN이 무엇인지, 어떻게 활용할 수 있는지 잘 이해하셨나요? LEFT OUTER JOIN을 할 때 이름을 왼쪽에 써준 테이블이 기준 테이블이 되고 ON 절에 써있는 기준에 따라 상대 테이블의 row들을 이어붙인다는 사실을 잘 기억해야 합니다.

2. RIGHT OUTER JOIN

자, 이번엔 RIGHT OUTER JOIN에 대해서 배워볼까요? RIGHT OUTER JOIN도 LEFT OUTER JOIN과 똑같은 원리로 작동합니다. 단지, 그 기준 테이블이 이름을 오른쪽에 써준 테이블이라는 점만 다르죠.

만약 위의 SQL 문에서 LEFT 부분만 RIGHT로 바꿔주면 이렇게 됩니다.

이 SQL 문을 실행하면

(1) 이번엔 이렇게 이름을 오른쪽에 써준 stock 테이블이 기준 테이블이 되고,

(2) stock 테이블의 item_id 값을 기준으로, 그것과 같은 값을 id 컬럼에 갖고 있는 item 테이블의 row들이 이어붙여집니다.

(3) 그리고 결과 테이블에서 SELECT 절에 명시한 컬럼들만 조회가 되죠. 이번엔 재고 수 정보가 존재하는 상품들만 조회가 되었죠? stock 테이블을 기준으로 조인을 했기 때문입니다.

자, 이제 LEFT OUTER JOIN과 RIGHT OUTER JOIN이 뭔지 아시겠죠? 둘다 원리는 같지만 기준 테이블이 무엇이냐만 차이가 있다는 점만 기억하시면 됩니다. 이 두 조인은 여러 가지 조인들 중에서도 가장 기본적인 조인이면서, 실무에서 활용도가 높은 조인이기 때문에 그 원리를 확실히 이해하셔야 합니다.

코드잇에서는

- 조인을 보다 잘 이해하기 위해 알아야하는 기본 개념들(Foreign Key 개념 등)

- 조인을 할 때 주로 사용되는 SQL 문에서의 표현 방식

- 다른 종류의 조인들에 대한 설명까지

여러분이 조인을 확실하게 정복하기 위해 필요한 내용들을 가르치고 있습니다. 게다가 여러분이 직접 SQL 문을 쳐보면서 몸으로 익힐 수 있는 실행환경을 제공하고 있는데요.

코드잇에 방문하셔서 SQL의 핵심인 조인(Join)에 대해 제대로 배우고 실무에서 실력 발휘를 해보는 건 어떨까요?

https://www.codeit.kr/courses/sql-database/topics/sql-database-1

기업문화 엿볼 때, 더팀스

로그인

/