반응형
본 글은 책 "칼퇴족 김대리는 알고 나만 모르는 SQL 기초 편"의 정리 내용입니다.
OUTER JOIN에는 크게 LEFT, RIGHT, FULL 3가지 방법이 있다. 본 글에서는 RIGHT OUTER JOIN을 다룬다.
RIGHT OUTER JOIN (외부 조인)
- RIGHT OUTER JOIN이란 오른쪽 테이블을 기준으로 왼쪽 테이블을 붙이는 것을 의미
- 'RIGHT JOIN'이라는 명령어로도 사용 가능 (OUTER 명령어 생략 가능)
더보기
CREATE TABLE ADDR1 (
"CUST_ID" INT NOT NULL,
"HOME_ADDR1" CHAR(50) NOT NULL,
"HOME_ADDR2" CHAR(50) NOT NULL,
PRIMARY KEY('CUST_ID')
);
INSERT INTO ADDR1
VALUES
(5465, '서울시 강남구 역삼동', '111-11'),
(2354, '서울시 종로구 공평동', '222-22'),
(5410, '서울시 중구 서소문동', '333-33'),
(6511, '서울시 송파구 문정동', '444-44');
CREATE TABLE MOBILE1 (
"CUST_ID" INT NOT NULL,
"MOBILE_NO" CHAR(50) NOT NULL,
PRIMARY KEY('MOBILE_NO')
);
INSERT INTO MOBILE1
VALUES
(5465, '010-1111-1111'),
(2354, '010-2222-2222'),
(5410, '010-3333-3333'),
(5410, '010-7777-7777'),
(7979, '010-7979-7979');
특징
- 오른쪽 MOBILE1 테이블의 모든 값을 나타내고, 오른쪽 테이블을 기준으로 왼쪽 ADDR1 테이블이 붙음
- 한 개의 키 값에 두 개 이상의 값을 가지고 있으면 모든 값이 붙음
(MOBILE1 테이블에 CUST_ID가 5410인 고객의 휴대폰 번호는 2개가 있다는 것을 알 수 있음) - 오른쪽 테이블의 키 값을 기준으로 왼쪽 테이블의 키 값이 존재하지 않는다면 NULL값으로 처리
(CUST_ID가 7979인 고객의 HOME_ADDR1, HOME_ADDR2는 NULL값으로 처리됨)
위의 합쳐진 테이블을 만들기 위한 SQL 문장은?
SELECT ADDR1.CUST_ID, ADDR1.HOME_ADDR1, ADDR1.HOME_ADDR2,
MOBILE1.CUST_ID AS CUST_ID2, MOBILE1.MOBILE_NO
FROM ADDR1 RIGHT JOIN MOBILE1
ON ADDR1.CUST_ID = MOBILE1.CUST_ID;
- 다만 sqlite에서는 RIGHT JOIN을 지원하지 않음
- Error: RIGHT and FULL OUTER JOINs are not currently supported
- FROM 절에서 테이블의 위치를 변경하여 LEFT JOIN을 이용해 위의 결과를 얻을 수 있음
SELECT ADDR1.CUST_ID, ADDR1.HOME_ADDR1, ADDR1.HOME_ADDR2,
MOBILE1.CUST_ID AS CUST_ID2, MOBILE1.MOBILE_NO
FROM MOBILE1 LEFT JOIN ADDR1
ON ADDR1.CUST_ID = MOBILE1.CUST_ID;
반응형
'SQL' 카테고리의 다른 글
[SQL] 테이블 행 합치기 (UNION) (0) | 2022.02.22 |
---|---|
[SQL] 테이블 합치기 (FULL OUTER JOIN) (0) | 2022.02.17 |
[SQL] 테이블 합치기 (LEFT OUTER JOIN) (0) | 2022.02.17 |
[SQL] 테이블 합치기 (INNER JOIN) (0) | 2022.02.17 |
[SQL] 그룹화된 데이터의 필터링 (HAVING) (0) | 2022.02.17 |