먼저 조인(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이 가능하므로
자세한 내용은 아래 글을 확인해주면 된다
예제에 사용한 쿼리는 아래와 같다
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
'SQL > Oracle' 카테고리의 다른 글
오라클 CASE WHEN 사용법 & 예제 (0) | 2019.12.17 |
---|---|
SQL CRUD(Create, Read, Update, Delete) 중에 뭐가 제일 어려워요? (0) | 2019.12.12 |
오라클 MERGE INTO 사용법 & 예제 (0) | 2019.12.10 |
UNION, UNION ALL 사용법, 예제 & 차이점 (0) | 2019.12.09 |
INNER JOIN, OUTER JOIN(LEFT, RIGHT, FULL) 예제부터 차이까지 (0) | 2019.12.05 |
댓글