아주 중요한 챕터이다.
OUTER JOIN의 경우 조인 조건을 만족하지 않는 튜플도 결과에 포함한다.
X LEFT JOIN Y
X 테이블의 튜플을 먼저 읽고, Y 테이블에서 조인 대상 튜플을 읽어 온다.
Y 테이블에서 읽어올 대상 튜플이 없는 경우 Y 테이블에 해당하는 튜플의 모든 컬럼들을 NULL 값으로 채운다.
왼쪽 테이블을 기준으로 NULL 값을 넣는다.
Example
SELECT TEAM_ID, TEAM_NAME, REGION_NAME, TEAM.STADIUM_ID,
STADIUM_NAME, SEAT_COUNT
FROM TEAM LEFT JOIN STADIUM USING (STADIUM_ID)
ORDER BY TEAM_ID;
TEAM 쪽의 모든 튜플이 다 나와야한다.
따라서, 17개의 튜플이 출력될 것이다.
X RIGHT JOIN Y
Y 테이블의 튜플을 먼저 읽고, X 테이블에서 조인 대상 튜플을 읽어 온다.
X 테이블에서 읽어올 대상 튜플이 없는 경우 X 테이블에 해당하는 튜플의 모든 컬럼들을 NULL 값으로 채운다.
오른쪽 테이블을 기준으로 NULL 값을 넣는다.
Example
SELECT TEAM_ID, TEAM_NAME, REGION_NAME, TEAM.STADIUM_ID,
STADIUM_NAME, SEAT_COUNT
FROM TEAM RIGHT JOIN STADIUM USING (STADIUM_ID)
ORDER BY TEAM_ID;
STADIUM 쪽의 모든 튜플이 다 나와야한다.
따라서, 20개의 튜플이 출력될 것이다.
MySQL에서는 지원하지 않으므로 LEFT & RIGHT 결과를 모두 구해서 UNION을 따로 해줘야한다.
중복되는 데이터는 삭제하므로 UNION ALL이 아닌 UNION 기능을 한다.
Example
SELECT TEAM_ID, TEAM_NAME, REGION_NAME, TEAM.STADIUM_ID,
STADIUM_NAME, SEAT_COUNT
FROM TEAM LEFT JOIN STADIUM USING (STADIUM_ID)
UNION
SELECT TEAM_ID, TEAM_NAME, REGION_NAME, TEAM.STADIUM_ID,
STADIUM_NAME, SEAT_COUNT
FROM TEAM RIGHT JOIN STADIUM USING (STADIUM_ID)
ORDER BY TEAM_ID;
이렇게 LEFT JOIN과 RIGHT JOIN의 결과를 UNION 해준다.
따라서, 22개의 튜플이 출력된다.