데이터 분석/SQL

[SQL 문법] FULL OUTER JOIN

참치바나나 2020. 11. 3. 20:42

전체 집합의 내용을 알고 싶을 때, 즉 테이블 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