전체 집합의 내용을 알고 싶을 때, 즉 테이블 A, B가 있을 때, 겹치는 것, 겹치지 않는 것 전부 포함해서 보여주자는 것.
부서 테이블, 직원 테이블이 있을 때
하나의 부서는 여러개의 직원을 가질 수 있다
CREATE TABLE
IF NOT EXISTS departments
(
department_id serial PRIMARY KEY
,department_name varchar(255) NOT NULL
);
CREATE TABLE
IF NOT EXISTS employees
(
employee_id serial PRIMARY KEY
,employee_name varchar(255)
,department_id integer
);
SELECT * FROM departments ;
SELECT * FROM employees;
INSERT INTO departments (department_name)
VALUES
('sales')
,('marketing')
,('HR')
,('IT')
,('production');
COMMIT;
INSERT INTO employees (
employee_name
,department_id
)
VALUES
('beette nicholson',1)
,('christian gable',1)
,('joe swank',2)
,('fred costner',3)
,('sandra kilmer',4)
,('julia mcqueen',null);
COMMIT ;
부서와 직원 관련된 모든 정보를 보고 싶다
SELECT
e.employee_name
,d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON d.department_id = e.department_id;
부서의 department_id가 직원의 department_id와 같은 상태로
전체 정보 중에 직원이 없는 부서를 보고 싶다 - RIGHT ONLY
SELECT
e.employee_name
,d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON d.department_id = e.department_id
WHERE e.employee_name IS NULL;
직원의 값이 NULL인 row를 불러오면
다른 방법도 가능하지 않을까?
RIGHT OUTER JOIN을 해서 RIGHT ONLY 해도 같겠지!
SELECT
e.employee_name
,d.department_name
FROM employees e
right JOIN departments d
ON e.department_id = d.department_id
WHERE e.employee_name IS NULL;
'데이터 분석 > SQL' 카테고리의 다른 글
[SQL 문법] NATURAL JOIN (0) | 2020.11.04 |
---|---|
[SQL 문법] CROSS JOIN (0) | 2020.11.04 |
[SQL 문법] SELF JOIN + ON (0) | 2020.11.03 |
[SQL 문법] INNER JOIN + ON (0) | 2020.10.31 |
[SQL 문법] IS NULL (0) | 2020.10.31 |