SQL join은 테이블을 결합하는 데 사용된다. 크게 내부 조인, 외부 조인으로 나뉜다.
Join에 대해서 알아보기 위해 사용할 테이블 두개는 다음과 같다.
내부 조인의 형식은 다음과 같다.
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 은 두 테이블의 모든 값을 다 보여준다.
근데 이거 말로만 설명하기엔 쉽지 않다. 밴다이어그램으로 살펴보자