본문 바로가기
SQL/Oracle

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

by wakestand 2019. 12. 5.
반응형

여기 NAME과, AGE 형태의 값을 받는 테이블 TB1, TB2가 있는데

TB1에는 4줄의 값을

TB2에는 3줄의 값을 삽입했다

 

이 두 테이블을 이용해

INNER JOIN과 OUTER JOIN의 예제 및 차이점을 알아보자

 

1. INNER JOIN

 

INNER JOIN은 

select * from 테이블1 inner join 테이블2 on 테이블1.컬럼 = 테이블2.컬럼

이런 식으로 사용하는데

 

on 뒤에 조건이 맞는 내용만 가져온다

TB1의 NAME과 TB2의 NAME이 같은 경우는

김철수밖에 없으니

김철수만 나오게 된다는 얘기다

 

2. LEFT, RIGHT OUTER JOIN

 

outer join은 한쪽 테이블에 값이 있을 경우에 다른쪽 테이블이 조건에 맞지 않아도 가져오게 되는데

left는 왼쪽, right는 오른쪽 테이블에 값이 있을 경우 반대 테이블이 조건에 맞지 않아도 가져온다는 얘기다

 

보면 left, right 테이블 모두 조건에 맞는 값은 김철수밖에 없으나

left, right 테이블에 값이 있기 때문에 left, right는 채우고

반대쪽 테이블은 비워서 가져오는 것이 보인다

 

3. FULL OUTER JOIN

 

FULL OUTER JOIN은 어느 한쪽 테이블에 값이 있을 경우 다른 테이블과 조건이 맞지 않아도 가져온다

 

이제 INNER JOIN, LEFT, RIGHT OUTER JOIN, FULL OUTER JOIN을 정리해보자면

1. INNER JOIN : 두 테이블 간 조건이 맞는 값만 가져온다

2. LEFT, RIGHT OUTER JOIN : 조건에 맞지 않아도 LEFT 혹은 RIGHT에 값이 존재하면 값을 가져오게 된다

3. FULL OUTER JOIN : 두 테이블 중 한 테이블에만 값이 있다면 조건에 맞지 않아도 값을 가져오게 된다

 

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

CREATE TABLE TB1 ( NAME VARCHAR2(20), AGE NUMBER(3) );
CREATE TABLE TB2 ( NAME VARCHAR2(20), AGE NUMBER(3) );

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);

INSERT INTO TB2(NAME, AGE) VALUES('김철수', 30);
INSERT INTO TB2(NAME, AGE) VALUES('최수영', 50);
INSERT INTO TB2(NAME, AGE) VALUES('하희영', 55);

-- INNER JOIN : 조건에 해당하는 값만 나옴
SELECT * FROM TB1 INNER JOIN TB2 ON TB1.NAME = TB2.NAME;

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

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

-- FULL OUTER JOIN : 한쪽 테이블에 값이 있을 시 다른 쪽 테이블이 조건에 맞지 않아도 나옴
SELECT * FROM TB1 FULL OUTER JOIN TB2 ON TB1.NAME = TB2.NAME
반응형

댓글