SQL 내부조인 vs 외부조인

Kim Dong Kyun·2023년 1월 11일
3

Today I learned

목록 보기
30/43
post-thumbnail

썸네일 출처

개요

SQL join은 테이블을 결합하는 데 사용된다. 크게 내부 조인, 외부 조인으로 나뉜다.

Join에 대해서 알아보기 위해 사용할 테이블 두개는 다음과 같다.

  1. member 테이블
    -> select * from member;

  1. buy 테이블
    -> select * from buy;

내부 조인

  1. SQL 쿼리문

내부 조인의 형식은 다음과 같다.

SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블> -- INNER JOIN은 'INNER' 생략가능
ON <조인될 조건>
[WHERE 검색 조건]

위 조건에 맞게 buy 테이블과 member 테이블을 inner join 해보자.

반대의 결과도 확인해보자.

보이는 순서만 조금 다르고 결과는 동일하다.

  • 여기서 중요한건, Member테이블에는 우주소녀, 트와이스 등등 실제 구매를 하지 않은 멤버들도 있으나, buy 테이블과 실제적으로 "겹치는" 부분만 위와 같이 출력된다는 것이다.

  • 또한 member와 buy의 순서를 바꿔도 출력되는 결과값이 실제적으로 변화되진 않는다. 다만 순서만 바뀜.

  • 즉, 내부 조인은 member 테이블과 buy 테이블의 "교집합" 만을 출력한다.


외부 조인

외부 조인은 다음과 같이 사용한다.

SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조일될 조건>
[WHERE 검색 조건];

이번에도 마찬가지로 위 조건에 맞게 한번 join 해보자.

위와 같은 결과가 도출된다.
어? innerJoin을 할때는 다 나오지 않던 member의 값들이 이번엔 나온다.
잇지, 오마이걸, 레드벨벳, 우주소녀, 트와이스, 여자친구 등은 buy테이블엔 존재하지 않는 이름들이다.

-> left outer join 은 left 테이블을 기준으로 left테이블이 모두 포함되며 겹치는 부분까지 출력되는 방식이다.

반대로 right outer join을 해보자.

-> 반대로 buy를 기준으로 하는 테이블이 출력된다.


결론 + 밴다이어그램으로 이해

  • 내부 조인은 두 테이블간 겹치는 특정 키 값을(foreign key를) ON 이라는 sql 키워드를 통해 설정하고, 두 테이블 간의 "겹치는" 부분만 출력되도록 했다.

  • 외부 조인은
    마찬가지로 ON 키워드를 통해 join을 하며,
    LEFT OUTER JOIN 은 LEFT 테이블(FROM 뒤에 오는 기준 테이블)의 모든 것 + RIGHT 테이블(JOIN 뒤에 오는 합치는 테이블)의 겹치는 부분만 을 보여준다. 반대의 경우도 같은 원리이며, FULL OUTER JOIN 은 두 테이블의 모든 값을 다 보여준다.

근데 이거 말로만 설명하기엔 쉽지 않다. 밴다이어그램으로 살펴보자

이미지 출처

0개의 댓글