[DB] 순수 관계 연산자: OUTER JOIN

젠니·2023년 6월 4일
0

데이터베이스

목록 보기
17/21

10. OUTER JOIN

아주 중요한 챕터이다.
OUTER JOIN의 경우 조인 조건을 만족하지 않는 튜플도 결과에 포함한다.

LEFT 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개의 튜플이 출력될 것이다.

RIGHT JOIN

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개의 튜플이 출력될 것이다.

FULL JOIN

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개의 튜플이 출력된다.

profile
젠니의 개발 라이푸우

0개의 댓글