DB

left, right, inner, outer, natural join

RECORD :D 2018. 11. 20. 18:04

left, right, inner, outer join에 대해서 알아보자.


위의 join 들을 검색했을 때 가장 많이 나오는 사진은 다음과 같다.


결과 부터 말하자면 INNER JOIN은 JOIN과 같은 말이고

LETF JOIN과 LETF OUTER JOIN도 같은 말이다.

쉽게 말해 INNER JOIN은 교집합 OUTER JOIN (LETF JOIN, RIGHT JOIN)은 여집합의 개념, FULL JOIN은 합집합이 되겠다.

NATURAL JOIN은 JOIN 조건이 '=' 일 때 동일한 속성이 두번 나타나게 되는데, 이 중 중복된 속성을 제거하여 같은 속성을 한번 만 표기하는 방법이다.


다음과 같은 예시를 통해 살펴보자.


학생 테이블


학과 테이블


성적 테이블


학생 테이블과 학과 테이블을 조인시켜서 LEFT JOIN, RIGHT JOIN, INNER JOIN에 대해서 알아보도록 하겠다.


1. LEFT JOIN

밑에 예시는 ms-sql 쿼리문에서 따온것이다.

oracle의 경우에는 (+)를 통해 outer조인이 형성된다.

oralce의 경우를 적어보겠다.

(oralce) select *from 학생,학과 where 학생.학과코드 = 학과.학과코드(+);

(mssql) select * from 학생 LEFT (OUTER) JOIN 학과 ON 학생.학과코드 = 학과.학과코드;


위와 같은 결과를 보면 INNER JOIN의 결과물에서 왼쪽 테이블의 조인조건에 일치하지 않는 행들도 모두 출력한다. (조인조건의 일치하지 않는 경우 오른쪽 테이블의 컬럼값은 존재하지 않으므로 null로 출력된다.


2.RIGHT JOIN

select * from 학생 RIGHT JOIN 학과 ON 학생.학과코드 = 학과.학과코드;


RIGHT JOIN은 딱히 다시 말 할 필요가 없는게 LETF JOIN과 같고 오른쪽 왼쪽만 바꾼거라 생각하면 된다.


3.INNER JOIN

select * from 학생 INNER JOIN 학과 ON 학생.학과코드 = 학과.학과코드;


INNER JOIN은 두 테이블을 JOIN 시킨 결과물이라고 생각하면 된다.

INNER JOIN과 JOIN은 같은 결과물을 볼 수 있다.


4.NATURAL JOIN

select * from 학생 NATURAL JOIN 학과;


NATURAL JOIN은 두 테이블을 JOIN 시킨 결과물에서 JOIN에 이용된 속성의 값을 빼 준 나머지값이 출력된다.