안녕하세요!
오늘은 오라클에서 테이블을 JOIN하는 방법에 대해 알아보겠습니다.
JOIN이란?
여러 개의 테이블의 데이터를 하나의 결과(테이블)로 모아서 출력하는 SQL문법입니다.
▶ 조인의 종류는 크게 오라클 조인 문법과 1999 ANSI 조인 문법으로 나눌 수 있습니다.
1999 ANSI 조인은 많은 관계형 데이터베이스에서 공통적으로 사용하는 SQL문입니다. 프로그래머를 꿈꾸는 많은 분들이 사용하는 MySQL에서는 이 방법을 사용하고 있습니다.
반면에 오라클 조인문법은 오라클에서 독자적으로 만들어 JOIN SQL문법을 사용하였습니다.
하지만 현재, 오라클에서는 독자적인 오라클 조인문법과 1999 ANSI 조인문법을 모두 이용하여 테이블 JOIN을 할 수 있답니다.
1. 오라클 조인 문법
(1) EQUI JOIN (2) NON EQUI JOIN (3) OUTER JOIN (4) SELF JOIN |
2. 1999 ANSI 조인 문법
(1) FULL OUTER JOIN (2) RIGHT/LEFT OUTER JOIN (3) ON절을 사용한 JOIN (4) USING절을 사용한 JOIN (5) NATURAL JOIN (6) CROSS JOIN |
앞으로 아래의 테이블을 활용하겠습니다.
우선 테이블의 관계를 살짝 확인하고 따라 오세요!
[ 고객 테이블 ]
고객이름 |
나이 |
주소 |
총구매액 |
추천인 |
A |
24 |
서울 |
30000 |
null |
B |
29 |
일산 |
10000 |
A |
C |
26 |
파주 |
25000 |
A |
D |
27 |
|
0 |
B |
[ 주소 테이블 ]
주소 | 관할부서 |
서울 | 한국 A |
일산 | 한국 B |
파주 | 한국 C |
제주 | 한국 D |
[ 등급 테이블 ]
고객등급 |
최소구매액 |
최대구매액 |
1 |
0 |
9999 |
2 |
10000 |
19999 |
3 |
20000 |
30000 |
▶ EQUI JOIN과 NON EQUI JOIN
EQUI JOIN 예시
고객이름, 나이, 주소, 관할부서를 알고 싶어요!
SQL> SELECT c.고객이름, c.나이, c.주소, a.관할부서 FROM 고객 c, 주소 a WHERE c.주소 = a.주소 ; |
결과:
고객이름 |
나이 |
주소 |
관할부서 |
A |
24 |
서울 |
한국 A |
B |
29 |
일산 |
한국 B |
C |
26 |
파주 |
한국 C |
NON EQUI JOIN 예시
고객이름, 나이, 고객등급을 알고 싶어요!
SQL> SELECT c.고객이름, c.나이, g.고객등급 FROM 고객 c, 등급 g WHERE c.총구매액 BETWEEN g.최소구매액 AND g.최대구매액 ; |
결과:
고객이름 |
나이 |
고객등급 |
A |
24 |
3 |
B |
29 |
2 |
C |
26 |
3 |
D |
27 |
1 |
위의 SQL문의 차이를 발견하셨나요?
문제1. EQUL JOIN과 NON EQUI JOIN의 차이는 무엇일까요?
또한,
각각의 예시에서 알 수 있듯이 JOIN을 하기위해서는 WHERE절을 통해 연관 데이터로 조인 조건을 줍니다.
이때 WHERE절은 검색조건이 아닌 '조인 조건'입니다.
추가 문제: 만약, 조인 조건이 없을 경우에는 어떻게 될까요?
▶ OUTER JOIN
OUTER JOIN은
EQUI JOIN으로는 볼 수 없는 결과를 볼 때 사용하는 조인입니다.
(EQUI JOIN으로 조인되지 않은 데이터를 볼 때 사용하는 방법입니다.)
문제2. 위의 EQUL JOIN 예시의 결과를 보면 주소가 없는 고객 D는 출력되지 않았습니다.
과연, JOIN시에 고객D를 출력하고 싶으면 어떻게 해야할까요?
이때 사용하는 것이 바로 OUTER JOIN SIGN입니다.
ORACLE에서는 ( + ) 를 이용하여 OUTER JOIN이 가능합니다.
결과:
고객이름 |
나이 |
주소 |
관할부서 |
A |
24 |
서울 |
한국 A |
B |
29 |
일산 |
한국 B |
C |
26 |
파주 |
한국 C |
D |
27 |
null |
null |
* 참고: 1999 ANSI JOIN절에서는 LEFT / RIGHT OUTER JOIN절로 위와 같은 결과를 출력할 수 있습니다.
▶ SELF JOIN
문제3. 고객이름, 추천인 이름을 알고 싶습니다.
위의 문제의 경우 SELF JOIN을 이용하여 결과를 출력합니다.
SELF JOIN은 자기 자신의 테이블과 조인하는 문법으로
FROM문에서 테이블 별칭을 사용하여 마치 두개의 테이블이 존재하는 것처럼 JOIN문을 작성하면 됩니다.
여기까지!
어렵지만 중요한 JOIN문에 관한 문법을 알아봤습니다!
특히 MySQL을 사용하던 사람으로서 보다 편리한듯, 불편한듯 신기한 부분이 많았던것 같아요!
다들 참고해서 더 나은 빅데이터 분석가가 되어봐요~
여기서 다루지 못한 1999 ANSI 조인문은 다음 포스팅에서 확인하실 수 있습니다!
이 글이 도움되셨다면 아래 공감 꾹~
'SQL' 카테고리의 다른 글
ORACLE | UNION(집합연산자) & 레포팅 함수 (0) | 2018.04.05 |
---|---|
ORACLE | 3개의 tables를 조인하는 방법! (1) | 2018.04.04 |
ORACLE | 분석함수 RANK & DENSE_RANK , PIVOT& UNPIVOT (0) | 2018.04.02 |
ORACLE | 그룹함수, GROUP BY절과 HAVING (0) | 2018.03.30 |
ORACLE | 날짜타입 형변환하기! (2) | 2018.03.29 |