본문 바로가기
SQL/Oracle

오라클 JOIN 예제 및 사용방법

by wakestand 2019. 12. 10.
반응형

먼저 조인(JOIN)이란 두 테이블의 결과를 합쳐주는 것을 말한다

위 스크린샷을 보면 TB1과 TB2를 만들고 값을 넣어줬는데

 

JOIN을 통해 원하는 조건으로 각 테이블을 합친 결과를 가져올 수 있다는 얘기다

JOIN의 종류는 INNER JOIN, OUTER JOIN이 있는데 예제를 보고 차례대로 알아보자

 

먼저 INNER JOIN인데

SELECT * FROM TB1 A, TB2 B

이후 WHERE 절에서 조건을 만드는데

A.NAME = B.NAME으로 설정하면

 

TB1 테이블의 NAME과 TB2 테이블의

NAME이 같은 행만 가져오게 되는데

 

TB1과 TB2의 NAME이 동일한 것은

'김철수' 밖에 없으니 김철수만 나오게 된다

 

INNER JOIN이란 조건과 맞는 것만 가져오는 것!

 

다음으로는 OUTER JOIN인데

OUTER JOIN은 조건에 만족하지 않아도

(+)를 붙이지 않은 쪽에 값이 있다면

예제처럼 나오게 된다

 

(+)가 우측 테이블에 붙으면 LEFT OUTER JOIN

좌측 테이블에 붙으면 RIGHT OUTER JOIN이 되겠다

 

즉 OUTER JOIN은 조건에 맞지 않아도

(+)를 붙이지 않은 쪽에 값이 있다면 나오는 것!

 

마지막으로 정리해보자면

JOIN은 여러 테이블을 조건에 맞춰 가져오는 것이며

INNER JOIN과 (LEFT, RIGHT) OUTER JOIN으로 나눌 수 있는데

 

INNER JOIN은 조건에 맞는 경우에만 가져오게 되며

(LEFT, RIGHT) OUTER JOIN은 조건에 맞지 않아도

(+)가 붙지 않은 테이블에 값이 있을 경우 값을 가져오게 된다

 

그리고 Oracle 전용 JOIN 말고도 ANSI JOIN이 가능한데

ANSI란 American National Standards Institute(미국 국립 표준 협회)의 약자로

모든 SQL에서 공통으로 사용 가능한 SQL인데

ANSI로 JOIN이 가능하므로

자세한 내용은 아래 글을 확인해주면 된다 

 

INNER JOIN, OUTER JOIN(LEFT, RIGHT, FULL) 예제부터 차이까지

여기 NAME과, AGE 형태의 값을 받는 테이블 TB1, TB2가 있는데 TB1에는 4줄의 값을 TB2에는 3줄의 값을 삽입했다 이 두 테이블을 이용해 INNER JOIN과 OUTER JOIN의 예제 및 차이점을 알아보자 1. INNER JOIN IN..

wakestand.tistory.com

예제에 사용한 쿼리는 아래와 같다

 

CREATE TABLE TB1 ( NAME VARCHAR2(20), AGE NUMBER(3) );
CREATE TABLE TB2 ( NAME VARCHAR2(20), AGE NUMBER(3) ); -- 테이블 TB1, TB2 생성

INSERT INTO TB1(NAME, AGE) VALUES('김철수', 30);
INSERT INTO TB1(NAME, AGE) VALUES('이영희', 35);
INSERT INTO TB1(NAME, AGE) VALUES('박영수', 40);
INSERT INTO TB1(NAME, AGE) VALUES('엄영수', 40); -- TB1 내에 행 삽입

INSERT INTO TB2(NAME, AGE) VALUES('김철수', 30);
INSERT INTO TB2(NAME, AGE) VALUES('최수영', 50);
INSERT INTO TB2(NAME, AGE) VALUES('하희영', 55); -- TB2 내에 행 삽입

-- INNER JOIN : 조건에 해당하는 값만 나옴
SELECT * FROM TB1 A, TB2 B WHERE A.NAME = B.NAME

-- LEFT OUTER JOIN : 왼쪽 테이블에 값이 있을 시 오른쪽 테이블이 조건에 맞지 않아도 나옴 
SELECT * FROM TB1 A, TB2 B WHERE A.NAME = B.NAME(+)

-- RIGHT OUTER JOIN : 오른쪽 테이블에 값이 있을 시 왼쪽 테이블이 조건에 맞지 않아도 나옴
SELECT * FROM TB1 A, TB2 B WHERE A.NAME(+) = B.NAME

 

반응형

댓글