Outer Join은 크게 세 가지 유형
1. Left Outer Join - 기준 테이블의 모든 데이터와 오른쪽 테이블의 일치하는 데이터를 반환한다.
일치하는 데이터가 없는 경우, 기준 테이블의 데이터와 함께 NULL값을 반환 한다.
2. Right Outer Join - 오른쪽 테이블의 모든 데이터와 기준 테이블의 일치하는 데이터를 반환 한다.
일치하는 값이 없는 경우, 오른쪽 테이블의 데이터와 함께 NULL값을 반환 한다.
3. Full Outer Join - 기준 테이블과 오른쪽 테이블의 모든 데이터를 반환한다. 일치하는 값이 없는 경우
해당 위치에 NULL값을 반환한다.
Outer Join의 주요 장점
1. 완전한 정보 제공 : Outer Join은 두 테이블 간에 일치하지 않는 데이터가 있을 때, 누락된 정보를 식별할 수 있게된다.
이는 데이터의 완전성을 보장하는데 도움이된다.
2.데이터 누락 감지 : 일치하는 데이터가 없는 경우, NULL 값으로 표시되므로 데이터가 누락되거나 일치하지않는 문제를 쉽게 식별할 수 있다.
3.보다 복잡적인 질의 기능 : INNER Join만 사용하는 것 보다 OUTER Join을 사용하면 보다 복잡한 질의를 만들 수 있어 데이터 분석에 유용하다.
다만, OUTER Join을 사용할 때의 주의할 점은 결과 집합에 NULL값이 포함될수 있어, 결과를 해석하거나 사용할 때 이 점을 고려해야 한다.
데이터 예제
CREATE TABLE id_table (
id INT PRIMARY KEY,
writer_id INT
);
INSERT INTO id_table (id, writer_id) VALUES (1, 1);
INSERT INTO id_table (id, writer_id) VALUES (2, 2);
INSERT INTO id_table (id, writer_id) VALUES (3, 3);
INSERT INTO id_table (id, writer_id) VALUES (6, 4); -- 추가된 행
CREATE TABLE title_table (
id INT PRIMARY KEY,
title VARCHAR(50)
);
INSERT INTO title_table (id, title) VALUES (1, '축구 경기 보기');
INSERT INTO title_table (id, title) VALUES (2, '요리 배우기');
INSERT INTO title_table (id, title) VALUES (3, '책 읽기');
-- 4번째와 5번째 행은 생략
CREATE TABLE writer_table (
writer_id INT PRIMARY KEY,
writer_name VARCHAR(20)
);
INSERT INTO writer_table (writer_id, writer_name) VALUES (1, '길동이');
INSERT INTO writer_table (writer_id, writer_name) VALUES (2, '육룡이');
INSERT INTO writer_table (writer_id, writer_name) VALUES (3, '이도');
INSERT INTO writer_table (writer_id, writer_name) VALUES (4, '철수'); -- 추가된 행
예제를 통해 각각의 JOIN 유형을 적용해보자.
1. LEFT JOIN
SELECT
id_table.id AS ID,
title_table.title AS Title,
writer_table.writer_name AS Writer
FROM
id_table
LEFT JOIN
title_table ON id_table.id = title_table.id
LEFT JOIN
writer_table ON id_table.writer_id = writer_table.writer_id;
결과 :
2.RIGHT JOIN
SELECT
id_table.id AS ID,
title_table.title AS Title,
writer_table.writer_name AS Writer
FROM
id_table
RIGHT JOIN
title_table ON id_table.id = title_table.id
RIGHT JOIN
writer_table ON id_table.writer_id = writer_table.writer_id;
결과 :
3.FULL JOIN
SELECT
id_table.id AS ID,
title_table.title AS Title,
writer_table.writer_name AS Writer
FROM
id_table
FULL JOIN
title_table ON id_table.id = title_table.id
FULL JOIN
writer_table ON id_table.writer_id = writer_table.writer_id;
결과 :
'DB > Oracle' 카테고리의 다른 글
Oracle 시퀀스(Sequence) (0) | 2023.05.23 |
---|---|
Oracle DB - UNION (0) | 2023.05.18 |
Oracle DB - INNER JOIN (0) | 2023.05.14 |
Oracle DB - 서브쿼리(Subquery) (0) | 2023.05.12 |
Oracle DB - SELECT 구문 (0) | 2023.05.10 |