SQL 에서 Join 이란?
관계형데이터베이스는 중복 데이터를 피하기 위해서 데이터를 여러개의 테이블로 나눠서 저장하게 된다. 이렇게 분리되어 저장된 데이터를 사용자가 원하게끔 다시 도출하기 위해서 여러 테이블을 조합해야할 때가 있다. 이때 SQL의 join
을 통해서 이를 만들 수 있게된다.
Join의 종류
- INNER JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- CROSS JOIN
SELF JOIN
INNER JOIN
교집합으로, 기준 테이블과 join 테이블의 중복된 값을 보여준다.
1 2 3 4
SELECT A.NAME, B.AGE FROM EX_TABLE A INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
LEFT OUTER JOIN
기준테이블값과 조인테이블과 중복된 값을 보여준다.
왼쪽테이블 기준으로 JOIN을 한다고 생각하면 편하다.
1 2 3 4
SELECT A.NAME, B.AGE FROM EX_TABLE A LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
RIGHT OUTER JOIN
LEFT OUTER JOIN과는 반대로 오른쪽 테이블 기준으로 JOIN하는 것이다.
1 2 3 4
SELECT A.NAME, B.AGE FROM EX_TABLE A RIGHT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
FULL OUTER JOIN
합집합을 말한다. A와 B 테이블의 모든 데이터가 검색된다.
1 2 3 4
SELECT A.NAME, B.AGE FROM EX_TABLE A FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
CROSS JOIN
모든 경우의 수를 전부 표현해주는 방식이다.
A가 3개, B가 4개면 총 3*4 = 12개의 데이터가 검색된다.
1 2 3 4
SELECT A.NAME, B.AGE FROM EX_TABLE A CROSS JOIN JOIN_TABLE B
SELF JOIN
자기자신과 자기자신을 조인하는 것이다.
하나의 테이블을 여러번 복사해서 조인한다고 생각하면 편하다.
자신이 갖고 있는 칼럼을 다양하게 변형시켜 활용할 때 자주 사용한다.
1 2 3
SELECT A.NAME, B.AGE FROM EX_TABLE A, EX_TABLE B
출처 https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Database/%5BDatabase%20SQL%5D%20JOIN.md
Join 정리
INNER JOIN 또는 EQUI JOIN
-> 두 테이블의 조건 만 일치하는 결과 집합을 반환한다.
OUTER JOIN
-> 조건 일치 여부에 관계 없이 두 테이블에서 모든 값의 결과 집합을 반환한다.
LEFT JOIN
-> 왼쪽 테이블의 모든 값과 오른쪽 테이블의 조건과 일치하는 행의 결과 집합을 반환한다.
RIGHT JOIN
-> 오른쪽 테이블의 모든 값과 왼쪽 테이블의 조건과 일치하는 행의 결과 집합을 반환한다.
INNER JOIN과 OUTER JOIN의 차이점
조인이 되는 키값을 기준으로
Inner join 의 경우는 교집합, outer join 의 경우는 기준테이블 Key의 집합이라고 생각하면 된다.
inner join은 공통된 primary key에 대해서 둘다 값이 있는거만 보여주고 (NULL값을 포함하지 않는다)
outer조인은 대상이 되는 outer에 있는 primarykey 기준으로 테이블 합치면서 반대쪽에 없는 값은 레코드를 null로 둔다.