brunch

You can make anything
by writing

C.S.Lewis

by 쪼렙 서비스기획자 Sep 06. 2022

기획자를 위한 SQL 2편

1편은 아래를 참조하세요!



앞선 SQL 문법을 이용해 원하는 데이터를 뽑는 법을 배웠다. 그런데 가끔은 내가 원하는 데이터가 여러 테이블에 분산되어있어서, 한번에 보기가 어려운 경우가 있다.


이럴 때에는 JOIN 문법을 사용해 여러 테이블의 데이터를 하나의 테이블로 만들어서 데이터를 살펴볼 수 있다.  아래에 배달 서비스 ‘회원 테이블’과 ‘주문 테이블'이 있다. 두개 테이블을 이용해 회원별로 주문한 메뉴 테이블을 여러 JOIN 문법을 이용해 만들어보자.


이번에도 배달 서비스의 테이블을 예시로 들어볼 것이다. (앞서 말했듯, 진짜 대발 서비스에서 이런 테이블이 있는지는 모른다. ㅋㅋ) 아래 두 개의 테이블을 이용해, 원하는 데이터를 쪽쪽 뽑아보자!




JOIN에는 크게 INNER JOIN과 OUTER JOIN이 있다. 가장 많이 사용되는 INNER JOIN부터 살펴보자.


INNER JOIN


Inner Join은 두 테이블을 연결할 때 가장 많이 사용하는 방법이다. Inner Join을 Join으로만 써도 Inner Join으로 인식한다. Inner Join은 이름에서도 알 수 있듯, 두 테이블에 모두 존재하는 데이터만 결과에 포함하는 방법으로, 벤 다이어그램으로 나타내면 아래와 같다.


출처: https://hongong.hanbit.co.kr/


Inner Join의 형식은 아래와 같다.

... 이렇게 보면 전혀 모르겠다. 위의 배달 서비스 데이터로 예시 쿼리를 작성해보겠다.

해석: '회원 테이블'을 '회원'으로, '주문 테이블'을 '주문'으로 정의할게. '회원'과 '주문'을 Inner join으로 합쳐줘. 그 뒤에 '회원'의 '이름'과 '주문'의 '메뉴'를 가져오고 이름은 각각 '주문자_이름', '주문_메뉴'로 정의할게. 이때 '회원'의 ID와 '주문'의 회원 ID는 같은 값이니까 이 값으로 Join해!!


그렇다. JOIN을 할 때에는 각각의 테이블을 매핑하는 '기준'에 대한 값이 필요하다. 이 테이블에서는 '회원 ID'와 '주문자 회원 ID'가 같은 값이므로, 이 값을 기준으로 INNER JOIN을 구현했다.


추출 결과:

회원 테이블과, 주문 테이블에 모두 존재하는 데이터만 추출되었다! 회원 테이블의 ID 6번은 주문 테이블에 없으므로 제외되었고, 마찬가지로 주문 테이블의 주문자 ID 8번 역시 회원 테이블에 없어서 제외된 것을 확인할 수 있다.



OUTER JOIN

 

이번에는 OUTER JOIN에 대해 알아보자, INNER JOIN의 경우 조인하는 두 테이블에 데이터가 있어야 하지만, OUTER JOIN을 이용하면 어느 한 쪽에 데이터가 있어도 추출이 가능하다.


OUTER JOIN에는 크게 3가지가 있다.


LEFT OUTER JOIN: 왼쪽 테이블의 모든 값이 추출된다.

RIGHT OUTER JOIN: 오른쪽 테이블의 모든 값이 추출된다.

FULL OUTER JOIN: 왼쪽 또는 오른쪽 테이블의 모든 값이 추출된다.


위의 예시에서 각각의 OUTER JOIN을 적용하면 아래와 같은 결과가 나온다.


참고


이 외에도 JOIN을 이용하면 테이블을 여러 방식으로 매핑해서 데이터를 확인할 수 있다. 이 외에도 매핑 키 없이 모든 경우의 수를 매핑하는 CROSS JOIN, 자기 자신을 JOIN하는 SELF JOIN이 있는데, 기획자라면 INNER JOIN과 OUTER JOIN만 잘 알아도 훌륭하다고 생각한다.


JOIN으로 여러 조건으로 데이터 매핑 가능!



매거진의 이전글 기획자를 위한 SQL 1편
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari