SQL과 데이터베이스 - 조인과 집계 데이터 : FULL OUTER JOIN
카테고리 : SQL >> Sqlgrammar
FULL OUTER JOIN
이 학습은 패스트캠퍼스의 올인원 패키지 : 모두를 위한 SQL/DB 강의를 듣고 복습하는 내용입니다.
: 두 테이블 간 출력가능한 모든 데이터를 포함한 집합을 출력한다.
(INNER 조인, LEFT OUTER 조인, RIGHT OUTER 조인 모두 포함).
FULL OUTER 조인 실습
● 기본 실습
: 아래그림과 같이 만들었던 BASKET_A, BASKET_B 테이블 이용
SELECT
A.ID ID_A,
A.FRUIT FRUIT_A,
B.ID ID_B,
B.FRUIT FRUIT_B
FROM BASKET_A A
FULL OUTER JOIN BASKET_B B
ON A.FRUIT = B.FRUIT;
-> 모든 집합이 출력되었다.
● ONLY OUTER 조인
SELECT
A.ID ID_A,
A.FRUIT FRUIT_A,
B.ID ID_B,
B.FRUIT FRUIT_B
FROM BASKET_A A
FULL OUTER JOIN BASKET_B B
ON A.FRUIT = B.FRUIT
WHERE A.ID IS NULL -- right outer
OR B.ID IS NULL; -- left outer
-> FULL OUTER JOIN에서 A.ID가 NULL 혹은 B.ID가 널인 값들만 추출한다.
추가 실습
● 테이블 생성
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
);
INSERT INTO DEPARTMENTS (DEPARTMENT_NAME)
VALUES
('Sales')
, ('Marketing')
, ('HR')
, ('IT')
, ('Production');
COMMIT;
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 조인 실습
SELECT
E.EMPLOYEE_NAME
, D.DEPARTMENT_NAME
FROM
EMPLOYEES E
FULL OUTER JOIN DEPARTMENTS D
ON D.DEPARTMENT_ID = E.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; -- 소속된 직원이 없는 부서
-> 소속된 직원이 없는 부서만 출력
-> FULL OUTER JOIN을 RIGHT JOIN 으로 바꾸어도 같은 결과가 나온다.
● LEFT ONLY
SELECT
E.EMPLOYEE_NAME
, D.DEPARTMENT_NAME
FROM
EMPLOYEES E
FULL OUTER JOIN DEPARTMENTS D
ON D.DEPARTMENT_ID = E.DEPARTMENT_ID
WHERE D.DEPARTMENT_NAME IS NULL; -- 소속한 부서가 없는 직원
-> 소속한 부서가 없는 직원만 출력
-> FULL OUTER JOIN을 LEFT JOIN으로 바꾸어도 같은 결과가 나온다.