SQL/MySQL

MySQL 외부 조인(LEFT, RIGHT, FULL JOIN, UNION, UNION ALL) 문법 예시

진리뷰 2023. 9. 15. 09:00
반응형

 

 

MySQL-외부-조인-LEFT-RIGHT-FULL-JOIN-UNION-UNION-ALL-문법-예시-썸네일
MySQL 외부 조인 문법 예시

 

 

이 글은 MySQL에서 쓰이는 외부 조인 개념, 종류,

유의점(FULL JOIN, UINION, UNION ALL), 문법, 예시를 담고 있습니다.

 

 

MySQL 외부 조인

 

외부 조인은 동시에 갖지 않는 값도 반환합니다.

이는 교집합(동시에 갖는 값)만 반환하는 내부 조인과 차이점입니다.

*이에 대한 추가 이해가 필요하다면, 아래 글을 참고해 주세요.

MySQL INNER JOIN(내부 조인) 다양한 문법과 예시

 

 

외부 조인 종류(LEFT, RIGHT, FULL OUTER JOIN)

 

외부 조인은 세 종류(LEFT, RIGHT, FULL)로 나뉩니다.

이때 OUTER는 생략 가능합니다.

 

LEFT JOIN(왼쪽 외부 조인)

왼쪽 외부 조인은 왼쪽 테이블을 기준으로 합니다.

왼쪽 테이블 A에 B를 결합하므로, A의 모든 값이 반환됩니다.

반면 B는 A와 교집합(동시에 갖는 값)인 값만 반환됩니다.

MySQL-LEFT-JOIN
LEFT (OUTER) JOIN

 

 

RIGHT JOIN(오른쪽 외부 조인)

오른쪽 외부 조인은 왼쪽 외부 조인의 반대로, 오른쪽 테이블이 기준입니다.

오른쪽 테이블 B에 A를 결합하므로, B의 모든 값은 반환됩니다.

한편 A는 B와 교집합인 값만 반환됩니다.

MySQL-RIGHT-JOIN
RIGHT (OUTER) JOIN

 

 

FULL JOIN(전체 외부 조인)

전체 외부 조인은 LEFT JOIN+RIGHT JOIN입니다.

왼쪽, 오른쪽 테이블(A, B)의 모든 값을 반환하는 합집합입니다.

MySQL-FULL-JOIN-UNION
FULL (OUTER) JOIN

 

 

MySQL FULL OUTER JOIN 유의점, UNION, UNION ALL

 

MySQL은 외부 조인 중 FULL JOIN을 미지원합니다.

그래서 FULL JOIN과 같은 역할인 UNION을 사용합니다.

 

UNION은 DISTINCT로, 중복 제외 값을 반환합니다.

만약 중복 값도 원한다면 UNION ALL을 사용합니다.

*DISTINCT 관련 글 추천 MySQL 중복 제거 DISTINCT 쉬운 사용법 예시

 

 

MySQL 외부 조인 문법(LEFT, RIGHT JOIN, UNION, UNION ALL)

 

JOIN들의 기본은 결합할 테이블들 간 공통키가 있어야 한다는 것입니다.

또한 외부 조인의 기준 테이블이 결합될 테이블과 동시에 갖는 값이 없다면, NULL값이 반환됩니다.

 

LEFT, RIGHT JOIN

둘 다 기본 문법은 같으며, OUTER는 생략 가능합니다.

그러므로 아래처럼 LEFT, RIGHT 중 선택 입력하면 됩니다.

*다양한 조인 문법을 원하신다면, 아래 글을 참고해 주세요.

MySQL 다중 내부 조인(INNER JOIN 여러 개) 문법, 예시

SELECT 테이블1.컬럼명1, 테이블2.컬럼명2
FROM 테이블1 LEFT | RIGHT (OUTER) JOIN 테이블2
ON 테이블1.공통키=테이블2.공통키;

 

UINON, UNION ALL (=FULL JOIN)

UINON은 FULL JOIN이 합집합이라는 점을 이해하면 됩니다.

따라서 LEFT JOIN과 RIGHT JOIN 사이에 UNION, UINON ALL 중 선택 입력합니다.

SELECT 테이블1.컬럼명1, 테이블2.컬럼명2
FROM 테이블1 LEFT JOIN 테이블2
ON 테이블1.공통키=테이블2.공통키
UION | UINON ALL
SELECT 테이블1.컬럼명1, 테이블2.컬럼명2
FROM 테이블1 RIGHT JOIN 테이블2
ON 테이블1.공통키=테이블2.공통키;

 

ALIAS

가시성과 가독성을 위해 테이블명을 별칭(AS)으로 표현할 수 있습니다.

이때 AS는 띄어쓰기로 대체 가능합니다.

*별칭 관련 추천 글 MySQL 별칭 ALIAS 사용 방법, 규칙, 차이점

SELECT 별칭1.컬럼명1, 별칭2.컬럼명2
FROM 테이블1 AS 별칭1 LEFT (OUTER) JOIN 테이블2 별칭2
ON 별칭1.공통키=별칭2.공통키;

 

 

MySQL 외부 조인 예시

 

TABLE

왼쪽 테이블(고객정보), 오른쪽 테이블(주문정보)이 있습니다.

두 테이블의 공통키는 ID지만, 왼쪽 테이블의 ID7823은 오른쪽 테이블에 없습니다.

또한 오른쪽 테이블의 ID20301은 왼쪽 테이블에 없습니다.

 

고객정보
ID 지역
451 서울시 강남구
7832 서울시 영등포구
9111 서울시 중구

 

주문정보
ID 주문제품번호 주문일
451 F2 2023-01-01
9111 FN17 2023-02-02
20301 FJ8 2023-03-03

 

LEFT JOIN

*SELECT문에서는 테이블 간 중복 컬럼명 없을 경우, 테이블명 생략 가능합니다.

SELECT a.ID, 지역, 주문제품번호, 주문일
FROM 고객정보 a
LEFT JOIN 주문정보 b
ON a.ID = b.ID;

 

LEFT JOIN 산출물

기준 테이블인 왼쪽(고객정보)에 오른쪽 테이블(주문정보)의 결합입니다.

 

1. 기준인 왼쪽 테이블의 모든 값이 반환됩니다.

2. 기준인 왼쪽 테이블의 ID7832의 데이터가 오른쪽에 없으므로, NULL 값이 반환됩니다.

3. 오른쪽 테이블의 ID20301은 기준인 왼쪽 테이블에 없으므로, 표시되지 않습니다. 

 

ID 지역 주문제품번호 주문일
451 서울시 강남구 F2 2023-01-01
7832 서울시 영등포구    
9111 서울시 중구 FN17 2023-02-02

 


 

RIGHT JOIN

SELECT a.ID, 지역, 주문제품번호, 주문일
FROM 고객정보 a
RIGHT JOIN 주문번호 b
ON a.ID = b.ID;

 

RIGHT JOIN 산출물

LEFT JOIN의 반대로 생각하면 됩니다.

 

1. 기준인 오른쪽 테이블의 모든 값이 반환됩니다.

2. 기준인 오른쪽 테이블의 ID20301의 데이터가 왼쪽에 없으므로, NULL 값이 반환됩니다.

3. 왼쪽 테이블의 ID7832는 기준인 오른쪽 테이블에 없으므로, 표시되지 않습니다.

 

ID 지역 주문제품번호 주문일
451 서울시 강남구 F2 2023-01-01
9111 서울시 중구 FN17 2023-02-02
20301   FJ8 2023-03-03

 


 

UINION

SELECT a.ID, 지역, 주문제품번호, 주문일
FROM 고객정보 a
LEFT JOIN 주문번호 b
ON a.ID = b.ID
UNION
SELECT a.ID, 지역, 주문제품번호, 주문일
FROM 고객정보 a
RIGHT JOIN 주문번호 b
ON a.ID = b.ID;

 

UNION 산출물

UNION은 중복 없이 RIGHT JOIN+LEFT JOIN 값과 NULL값을 반환합니다.

 

ID 지역 주문제품번호 주문일
451 서울시 강남구 F2 2023-01-01
7832 서울시 영등포구    
9111 서울시 중구 FN17 2023-02-02
20301   FJ8 2023-03-03

 

UNION ALL 산출물

UNION ALL은 중복을 포함하고 RIGHT JOIN+LEFT JOIN 값과 NULL값을 반환합니다.

*UNION ALL 명령문은 UNION을 UNION ALL로 바꾸면 되므로 생략합니다.

 

ID 지역 주문제품번호 주문일
451 서울시 강남구 F2 2023-01-01
7832 서울시 영등포구    
9111 서울시 중구 FN17 2023-02-02
451 서울시 강남구 F2 2023-01-01
9111 서울시 중구 FN17 2023-02-02
20301   FJ8 2023-03-03

 

 

반응형
top