Join이란?
관계형 데이터베이스에서는 중복 데이터를 피하기 위해서 데이터를 쪼개 여러 테이블로 나눠서 저장합니다
이렇게 분리되어 저장된 데이터에서 원하는 결과를 다시 도출하기 위해서는 여러 테이블을 조합할 필요가 있습니다. 관계형 데이터베이스에서는 조인(JOIN) 연산자를 사용해 관련 있는 컬럼 기준으로 행을 합쳐주는 연산입니다.
Join의 종류
- 내부 조인 (INNER JOIN)
- 교차 조인 (CROSS JOIN - CARTESIN JOIN)
- 등가/동등/동일 조인 (EQUI JOIN)
- 자연 조인 (NATURAL JOIN)
- 외부 조인 (OUTER JOIN)
- 완전 외부 조인 (FULL OUTER JOIN)
- 왼쪽 (LEFT OUTER)
- 오른쪽 (RIGHT OUTER)
내부 조인 (INNER JOIN)
내부 조인은 가장 많이 사용되는 조인 구문중 하나
내부 조인은 조인 조건문에 따라 2개의 테이블(A, B)의 컬럼을 합쳐 새로운 테이블을 생성
(NULL 값을 포함하지 않는다)
-- 내부 조인 (INNER JOIN)
# 명시적 표현법 (explicit notation)
SELECT *
FROM 테이블_1
INNER JOIN 테이블_2
ON 테이블_1.특성_A = 테이블_2.특성_B
# 암묵적 표현법 (implicit notation)
SELECT *
FROM 테이블_1, 테이블_2
WHERE 테이블_1.특성_A = 테이블_2.특성_B
외부 조인 (OUTER JOIN)
내부 조인의 경우에는 공통 컬럼명 기반으로 결과 집합을 생성압니다. 반면에 외부 조인은 조건문에 만족하지 않는 행도 표시해주는 조인입니다. 그래서, 조인을 했을 때 한쪽의 테이블에 데이터가 없어도 조인 결과에 포함시키는 조인입니다
(NULL 값을 포함한다)
왼쪽 외부 조인 (LEFT OUTER JOIN)
왼쪽 외부 조인은 테이블 A의 모든 데이터와 테이블 B와 매칭이 되는 레코드를 포함
-- 왼쪽 외부 조인 (LEFT OUTER JOIN)
SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2
ON 테이블_1.특성_A = 테이블_2.특성_B
오른쪽 외부 조인 (RIGHT OUTER JOIN)
오른쪽 외부 조인은 테이블 B의 모든 데이터와 테이블 A와 매칭이 되는 레코드를 포함
-- 오른쪽 외부 조인 (RIGHT OUTER JOIN)
SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2
ON 테이블_1.특성_A = 테이블_2.특성_B
완전 외부 조인 (FULL OUTER JOIN)
완전 외부 조인은 MySQL에서는 명시적인 SQL 구문은 지원하지 않지만, UNION을 사용해서 완전 외부 조인이 가능
# 방법1 : JOIN와 UINION
SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2
ON 테이블_1.특성_A = 테이블_2.특성_B
UNION
SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2
ON 테이블_1.특성_A = 테이블_2.특성_B
# 방법2 : UNION ALL and exclusion join
SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2
ON 테이블_1.특성_A = 테이블_2.특성_B
UNION ALL
SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2
ON 테이블_1.특성_A = 테이블_2.특성_B
WHRER 테이블_1.특성_A IS null;
댓글