postgresql 기초강의강좌, FULL OUTER JOIN
19강 SQL이 뭐지? PostgreSQL FULL OUTER JOIN
PostgreSQL
SQL이 뭐지? 19강 시작합니다.
이번 강의에서는
▶ PostgreSQL FULL OUTER JOIN
에 대해서 알아보겠습니다.
Introduction to the PostgreSQL FULL OUTER JOIN
두 테이블의 full outer join을 수행한다고 가정합니다. A와 B 다음은 FULL OUTER JOIN의 구문을 보여줍니다.
SELECT * FROM A
FULL [OUTER] JOIN B on A.id = B.id
;
이 구문에서 OUTER 키워드는 선택 사항입니다.
FULL OUTER JOIN은 LEFT JOIN과 RIGHT JOIN의 결과를 모두 결합합니다.
조인된 테이블의 행이 일치하지 않으면 FULL OUTER JOIN은 일치하는 행이 없는 테이블의 모든 열에 대해 NULL 값을 설정합니다.
한 테이블의 행이 다른 테이블의 행과 일치하는 경우 결과 행에는 두 테이블의 행 열에서 채워진 열이 포함됩니다.
다음 Venn 다이어그램은 RIGHT JOIN의 작동 방식을 보여줍니다.
결과에는 두 테이블의 일치하는 행과 일치하지 않는 행이 포함됩니다.
PostgreSQL FULL OUTER JOIN example
먼저 실습에 사용할 두 개의 새 테이블(employees 및 departments)을 만듭니다.
DROP TABLE IF EXISTS departments;
DROP TABLE IF EXISTS employees;
CREATE TABLE departments (
department_id serial PRIMARY KEY,
department_name VARCHAR (255) NOT NULL
);
CREATE TABLE employees (
employee_id serial PRIMARY KEY,
employee_name VARCHAR (255),
department_id INTEGER
);
commit;
각 부서에는 0명 또는 많은 직원이 있으며 각 직원은 0명 또는 한 부서에 속합니다.
둘째, 일부 표본 데이터를 부서 및 직원 테이블에 insert합니다.
INSERT INTO departments (department_name)
VALUES
('Sales'),
('Marketing'),
('HR'),
('IT'),
('Production');
INSERT INTO employees (
employee_name,
department_id
)
VALUES
('Bette Nicholson', 1),
('Christian Gable', 1),
('Joe Swank', 2),
('Fred Costner', 3),
('Sandra Kilmer', 4),
('Julia Mcqueen', NULL);
commit;
셋째, 부서 및 직원 테이블에서 데이터를 쿼리합니다.
SELECT * FROM departments;
SELECT * FROM employees;
넷째, FULL OUTER JOIN을 사용하여 직원 및 부서 테이블 모두에서 데이터를 쿼리합니다.
SELECT
employee_name,
department_name
FROM
employees e
FULL OUTER JOIN departments d
ON d.department_id = e.department_id;
결과 집합에는 부서에 속한 모든 직원과 직원이 있는 모든 부서가 포함됩니다. 또한 부서에 속하지 않는 모든 직원과 직원이 없는 모든 부서가 포함됩니다.
직원이 없는 부서를 찾으려면 다음과 같이 WHERE 절을 사용합니다.
SELECT
employee_name,
department_name
FROM
employees e
FULL OUTER JOIN departments d
ON d.department_id = e.department_id
WHERE
employee_name IS NULL;
결과는 생산 부서에 직원이 없다는 것을 보여줍니다.
어느 부서에도 속하지 않는 직원을 찾으려면 다음과 같이 WHERE 절을 사용합니다.
SELECT
employee_name,
department_name
FROM
employees e
FULL OUTER JOIN departments d ON d.department_id = e.department_id
WHERE
department_name IS NULL;
출력에서 분명히 알 수 있듯이 줄라 맥퀸은 어떤 부서에도 속하지 않습니다.
지금까지 둘 이상의 테이블에서 매칭이 안되는 행까지 찾아주는
PostgreSQL FULL OUTER JOIN절을 사용하는 방법에 대해 배웠습니다.
감사합니다.
본 강의는 PostgreSQL Tutorial을 참조합니다.
실습용 테이블에 대해서는 3강을 참조하세요.
Do it! SQL을 찾아 주셔서 감사합니다. 여러분의 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
21강 SQL이 뭐지? PostgreSQL NATURAL JOIN (2) | 2022.12.19 |
---|---|
20강 SQL이 뭐지? PostgreSQL Cross Join (2) | 2022.12.19 |
18강 SQL이 뭐지? PostgreSQL Self-Join (1) | 2022.12.18 |
17강 SQL이 뭐지? PostgreSQL RIGHT JOIN (2) | 2022.12.17 |
16강 SQL이 뭐지? PostgreSQL LEFT JOIN (3) | 2022.12.17 |
댓글