본문 바로가기
Programing/DataBase

[DB] OUTER JOIN에 대해

by 슈퍼와이비 2013. 11. 22.
반응형

내부조인(INNER JOIN)과 외부조인(OUTER JOIN)의 차이를 예제를 통해 살펴보고 동작원리에 대해 알아보도록 하겠습니다.



1. 예제에 사용될 테이블 살펴보기

TEST1 테이블에는 USER_NO와 USER_NM 컬럼이 존재하고 

TEST2 테이블에는 USER_NO, ADDR, TEL 컬럼이 존재합니다.


두 테이블을 각각 조회하면 아래와 같은 결과가 나옵니다.



2. 테이블간 INNER JOIN 결과 살펴보기

우선 TEST1 테이블과 TEST2 테이블을 내부조인하여 모든 컬럼이 합쳐진 레코드를 생성합니다. 

>> 카티션 프로덕트 라고 합니다.


SELECT * FROM TEST1, TEST2;

※참고 : TEST2의 USER_NO는 USER_NO_1로 화면상에 표기됩니다. (컬럼명이 중복되기때문에...)


이번엔 조건식이 있는 내부조인 쿼리를 실행해 보도록하겠습니다.

SELECT * FROM TEST1, TEST2 WHERE TEST1.USER_NO = TEST2.USER_NO

결과값은 위의 카티션 프로덕트에서 조인조건을 만족하는 레코드인 1, 6, 11번 레코트가 됩니다.


- 결론!!! 내부조인은 카티션 프로덕트로 나온 튜플중 조인조건에 맞는 데이터만 가져와 레코드를 생성합니다.



3. 테이블간 내부조인과 외부조인의 결과 차이 살펴보기

우선 두 종류의 쿼리를 실행해 보겠습니다.

조인조건은 둘다 1=0 으로 성립할 수 없는 조건입니다.

두 쿼리의 차이는 내부조인과 외부조인의 차이입니다.


SELECT * FROM TEST1, TEST2 WHERE 1=0

SELECT * FROM TEST1 LEFT OUTER JOIN TEST2 ON 1=0


결과에서 볼수 있듯이 내부조인은 조건이 성립할 수 없기때문에 데이터가 조회되지 않고

외부조인은 조건과 무관하게 조인의 기준이 되는 TEST1 테이블의 데이터가 조회되었습니다.


- 결론!!! 외부조인은 조인조건과 무관하게 기준 테이블의 레코드를 모두 노출합니다.


다른 쿼리를 하나 더 보겠습니다.

SELECT * FROM TEST1 LEFT OUTER JOIN TEST2 ON TEST1.USER_NO = TEST2.USER_NO


내부조인의 결과에 조인조건을 성립하지 않는 레코드도 추가되어 결과값을 생성했습니다.


- 결론!!! 외부조인은 카티션프로덕트의 결과에서 조인조건을 성립하는 레코드를 찾으면 내부조인과 같이 결과값을 생성하고 조인조건이 성립하는 레코드를 찾지못하면 조인의 대상이 되는 레코드에 NULL값을 추가하여 레코드를 생성합니다.


5. 결론

위의 내용이 이해 되었으면 아래의 결론은 무슨 말인지 이해가 될것입니다. 그리고 안읽어봐도 무방합니다.


두 테이블에서 조인 조건이 일치하는 데이터만 가져오는 내부 조인과는 달리 조인되는 두 테이블간에 주종 관계를 설정해서 주 테이블의 모든 레코드와 부 테이블에서 조인 조건에 만족되는 레코드에서 데이터를 가져올 경우에 사용합니다.


특정 검색 조건을 만족하는 조인된 테이블의 모든 행을 포함하는 조인입니다. 여기에는 다른 조인 테이블에 대응되는 행이 없는 행도 포함됩니다. 한 테이블의 행이 다른 테이블의 행에 대응되지 않을 때 반환된 결과 집합의 경우, 대응되지 않는 행을 갖고 있는 테이블로 확인된 모든 결과 집합 열에 대해 NULL값이 제공됩니다.


반응형