ORACLE OUTER JOIN

2013.12.18 00:27

가을의 곰을... 조회 수:2235

OUTER JOIN

[출처] sweeper.egloos.com/3002220

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com


1. OUTER JOIN

INNER JOIN이 JOIN 조건에 부합하는 행만 JOIN이 발생하는 것이라면, 
OUTER JOIN조건에 부합하지 않는 행까지도 포함시켜 결합하는 것을 의미한다.

자주는 아니지만, 가끔 유용하게 사용될 수 있으므로 꼭 알아둘 필요는 있다.

기본 구문은 아래와 같다.

  1. SELECT <열 목록>
  2. FROM <첫번째 테이블 (LEFT 테이블)>
  3.     <LEFT | RIGHT | FULL> OUTER JOIN <두번째 테이블 (RIGHT 테이블)>
  4.                           ON <조인될 조건>
  5. [WHERE 검색 조건]

INNER JOIN과 유사해 보이지만, LEFT, RIGHT, FULL의 새로운 키워드들이 보인다.


2. LEFT OUTER JOIN

LEFT OUTER JOIN왼쪽 테이블의 것은 조건에 부합하지 않더라도 모두 결합되어야 한다는 의미이다.

즉, FROM 첫번째 테이블 LEFT OUTER JOIN 두번째 테이블이라면, 첫번째 테이블의 것은 모두 출력되어야 한다.
예제를 살펴 보자.

  1. -- 전체 회원의 구매기록을 살펴보자.
  2. -- 단, 구매 기록이 없는 회원도 출력되어야 한다.
  3.  
  4. -- LEFT OUTER JOIN이므로, UserTable은 모두 출력된다
  5.  
  6. SELECT U.ID, Name, GoodName, Addr
  7. FROM UserTable U                    -- LEFT Table    
  8.         LEFT OUTER JOIN Bu_y Table B  -- RIGHT Table
  9.         ON U.ID = B.ID
  10. ORDER BY U.ID

INNER JOIN시 INNER 키워드를 생략 가능했던 것처럼,
LEFT OUTER JOIN 역시 LEFT JOIN만으로 작성해도 무방하다.

위 예제의 결과는 아래와 같다. (모든 UserTable의 행이 출력되었다)

01.outer_join.png


3. RIGHT OUTER JOIN

RIGHT OUTER JOIN오른쪽 테이블의 것은 조건에 부합하지 않더라도 모두 결합되어야 한다는 의미이다.

즉, FROM 첫번째 테이블 RIGHT OUTER JOIN 두번째 테이블이라면, 두번째 테이블의 것은 모두 출력되어야 한다.
LEFT OUTER JOIN의 예제와 동일한 결과를 얻을 수 있도록 예제를 작성해 보자.

  1. -- 전체 회원의 구매기록을 살펴보자.
  2. -- 단, 구매 기록이 없는 회원도 출력되어야 한다.
  3.  
  4. -- RIGHT OUTER JOIN이므로, UserTable은 모두 출력된다
  5.  
  6. SELECT U.ID, Name, GoodName, Addr
  7. FROM Bu_yTable B                       -- LEFT Table    
  8.         RIGHT OUTER JOIN UserTable U  -- RIGHT Table
  9.         ON B.ID = U.ID
  10. ORDER BY U.ID

역시 RIGHT OUTER JOIN은 RIGHT JOIN만으로도 작성이 가능하다.


4. FULL OUTER JOIN

전체 조인 또는 전체 외부 조인이라고 한다.
FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합친 것이라고 생각하면 된다.

즉, 한쪽을 기준으로 조건과 일치하지 않는 것을 출력하는 것이 아니라,
양쪽 모두에 조건이 일치하지 않는 것들까지 모두 결합하는 개념이다.

따라서, 테이블들의 모든 행이 조건에 관계없이 결합된다.


5. 세 개 이상의 테이블 조인

INNER JOIN 문서의 예제를 재활용하자.

INNER JOIN 예제를 보면, 동아리에 가입하지 않은 '김제둥'은 결과에 포함되지 않았다.
이를 OUTER JOIN으로 동아리에 가입하지 않은 학생까지 출력되도록 예제를 작성해 보자.

  1. SELECT S.Name, Addr, C.Name, RoomNo
  2. FROM StudentTable S
  3.         -- 먼저 StudentTable이 모두 출력될 수 있도록 StdClubTable과 LEFT OUTER JOIN
  4.         LEFT OUTER JOIN StdClubTable SC
  5.         ON S.Name = SC.StdName
  6.             -- 그 결합에 다시 ClubTable을 LEFT OUTER JOIN
  7.             LEFT OUTER JOIN ClubTable C
  8.             ON SC.ClubName = C.Name

결과는 다음과 같이 동아리에 가입하지 않은 '김제둥'도 출력되었다.

02.outer_join.png

이번엔 학생 기준이 아닌, 동아리를 기준으로 가입된 학생을 출력하되,
가입 학생이 하나도 없는 동아리라도 출력될 수 있도록 예제를 작성해 보자.

  1. SELECT C.Name, RoomNo, S.Name, Addr
  2. FROM StudentTable S
  3.         -- 먼저 StudentTable이 모두 출력될 수 있도록 StdClubTable과 LEFT OUTER JOIN
  4.         LEFT OUTER JOIN StdClubTable SC
  5.         ON S.Name = SC.StdName
  6.             -- 이후 클럽이 모두 출력될 수 있도록 ClubTable이 결합 결과를 RIGHT OUTER JOIN
  7.             RIGHT OUTER JOIN ClubTable C
  8.             ON SC.ClubName = C.Name

결과는 아래와 같다.

03.outer_join.png

사실 위 예제에서 동아리에 가입하지 않은 학생의 경우 최종 목적 출력에 아무런 의미가 없으므로, 
아래와 같이 작성하는 것이 더욱 깔끔하고 성능도 조금 더 낫다.

  1. SELECT C.Name, RoomNo, S.Name, Addr
  2. FROM StudentTable S
  3.         -- StudentTable과 StdClubTable을 INNER JOIN하여 동아리에 가입한 학생을 추출하고,
  4.         INNER JOIN StdClubTable SC
  5.         ON S.Name = SC.StdName
  6.             -- 모든 클럽이 출력될 수 있도록 위 INNER JOIN의 결합 결과를 
                -- ClubTable이 다시 RIGHT OUTER JOIN
  7.             RIGHT OUTER JOIN ClubTable C
  8.             ON SC.ClubName = C.Name
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86738
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79062
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95824
22 [DAP] 내용정리 및 문제 풀이 졸리운_곰 2014.07.18 5922
21 데이터아키텍처 전문가 실기문제 출제방향 및 고려사항 보기 DAP130411.pdf file 졸리운_곰 2014.07.18 2142
20 데이터아키텍쳐준전문가 (DasP) 준비 과목 분류 file 졸리운_곰 2014.07.06 3157
19 데이터아키텍처 준전문가 (DasP) 개요 file 졸리운_곰 2014.07.06 2608
18 [만화로 쉽게 배우는 데이터베이스] 총정리편 졸리운_곰 2014.07.03 3714
17 대학생 단무지의 DASP 도전기 4회 file 졸리운_곰 2014.07.03 3569
16 대학생 단무지의 DASP 도전기 3회 file 졸리운_곰 2014.07.03 2776
15 대학생 단무지의 DASP 도전기 2회 file 졸리운_곰 2014.07.03 2428
14 대학생 단무지의 DASP 도전기 1회 file 졸리운_곰 2014.07.03 3283
13 [DAsP합격후기] DAsP 전문가 자격취득 합격 수기 ( 최경주 ) 졸리운_곰 2014.07.03 4671
12 전사아키텍처 프로세스 개요 file 졸리운_곰 2014.06.05 2070
11 1.참조 모델 정의 file 졸리운_곰 2014.06.05 2143
10 전사아키텍처 프레임워크 개념 file 졸리운_곰 2014.06.05 2616
9 전사아키텍처 개념 file 졸리운_곰 2014.06.05 2157
8 [데이타모델링실무] 연습문제풀이 2014-04-15 [화] secret 졸리운_곰 2014.04.15 0
7 2014-04-14~18 데이타베이스진흥원 : 데이타베이스모델링 교육 secret 졸리운_곰 2014.04.14 0
6 SQL개발자, SQL 전문가 시험예제 file 가을의 곰을... 2013.11.12 4069
5 [Dap] 데이터아키텍쳐전문가 내용 정리 및 문제풀이 file 가을의 곰을... 2013.11.12 4628
4 [DAsP] 데이터아키텍쳐준전문가 요약자료 file 가을의 곰을... 2013.11.09 22970
3 이제는데이터아키텍처전문가시대 - 한국데이터베이스진흥원.pdf file 가을의 곰을... 2013.10.08 2788
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED