SQL과 데이터베이스 - 조인과 집계 데이터 : FULL OUTER JOIN


FULL OUTER JOIN

이 학습은 패스트캠퍼스의 올인원 패키지 : 모두를 위한 SQL/DB 강의를 듣고 복습하는 내용입니다.

image

: 두 테이블 간 출력가능한 모든 데이터를 포함한 집합을 출력한다.

(INNER 조인, LEFT OUTER 조인, RIGHT OUTER 조인 모두 포함).


FULL OUTER 조인 실습

● 기본 실습

: 아래그림과 같이 만들었던 BASKET_A, BASKET_B 테이블 이용

image

image

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;

image

-> 모든 집합이 출력되었다.

image


● 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

image

-> FULL OUTER JOIN에서 A.ID가 NULL 혹은 B.ID가 널인 값들만 추출한다.

image


추가 실습

● 테이블 생성

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; 

image

SELECT  * FROM EMPLOYEES; 

image


● FULL OUTER 조인 실습

SELECT
       E.EMPLOYEE_NAME
     , D.DEPARTMENT_NAME
  FROM
      EMPLOYEES E
FULL OUTER JOIN DEPARTMENTS D 
ON D.DEPARTMENT_ID = E.DEPARTMENT_ID;

image

-> 모든 집합이 출력되었다.

-> 소속된 부서가 없는 직원, 소속한 직원이 없는 부서 둘다 출력


● 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;  -- 소속된 직원이 없는 부서

image

-> 소속된 직원이 없는 부서만 출력

-> FULL OUTER JOINRIGHT 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; -- 소속한 부서가 없는 직원

image

-> 소속한 부서가 없는 직원만 출력

-> FULL OUTER JOINLEFT JOIN으로 바꾸어도 같은 결과가 나온다.


© 2021. All rights reserved.

----------Powered by Hydejack----------

kyusang Hwang