Outer Join

Left outer join: 왼쪽에 있는 테이블 중 Join을 만족하지 않은 튜플들 + Join된 튜플들
Right outer join: 오른쪽에 있는 테이블 중 Join을 만족하지 않은 튜플들 + Join된 튜플들
Full outer join: Light outer join + right outer join
Oracle 명령어 (LEFT OUTER JOIN)


Sid가 22와 58인 튜플은 natural join된 튜플들, sid가 31인 튜플은 Sailors테이블 중 natural join을 만족하지 않은 튜플

Equi join을 이용하려면 위처럼 ON 키워드를 이용한다. (ON을 빼거나 WHERE절을 쓰면 오류 발생)

괄호 열고 ‘+’를 하면 LEFT or RIGHT OUTER JOIN을 하겠다는 의미가 된다.
MySQL 명령어 (LEFT OUTER JOIN)

-> (+) 따위의 명령어는 작동하지 않는다.
RIGHT OUTER JOIN 예시


Sid가 22와 58인 튜플은 natural join된 튜플들, sid가 65인 튜플은 Reserves테이블 중 natural join을 만족하지 않은 튜플
Reserves테이블에 bid필드가 있기 때문에 결과에 (sid:65,bid:103)인 튜플이 존재한다.


(MySQL에서 (+)는 오류)
FULL OUTER JOIN 예시
(ORACLE 명령어)

Sid가 22와 58인 튜플은 natural join된 튜플들, sid가 65인 튜플은 Reserves테이블 중 natural join을 만족하지 않은 튜플, sid가 31인 튜플은 Sailors테이블 중 natural join을 만족하지 않은 튜플

만약 s.sid, r.bid를 출력하라고 하면 아래와 같은 결과가 나온다.

Reserves에서 equi join을 만족하지 않은 튜플에 S.sid속성과 같은 값은 존재하지 않기 때문이다.
Sailors에서 equi join을 만족하지 않은 튜플에 r.bid속성과 같은 값은 존재하지 않기 때문이다.
(MySQL 명령어)

MySQL은 FULL OUTER JOIN명령어를 지원하지 않는다.
UNION연산자를 이용해서 LEFT OUTER JOIN의 결과와 RIGHT OUTER JOIN의 결과를 합쳐야 한다.

Sid가 31인 튜플이 먼저 나온 이유는 LEFT OUTER JOIN에 UNION을 했기 때문에 LEFT OUTER JOIN한 결과에 합쳐지게 된다.