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


SELF JOIN

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

image

테이블 생성

CREATE TABLE EMPLOYEE ( 
  EMPLOYEE_ID INT PRIMARY KEY,
  FIRST_NAME VARCHAR (255) NOT NULL,
  LAST_NAME VARCHAR (255) NOT NULL,
  MANAGER_ID INT,
  FOREIGN KEY (MANAGER_ID) 
  REFERENCES EMPLOYEE (EMPLOYEE_ID) ON   --- MANAGER아이디는 EMPLOYEE아이디에 반드시 포함되어야 된다는 뜻(참조관계)
  DELETE CASCADE );
  
INSERT INTO EMPLOYEE (
  EMPLOYEE_ID
, FIRST_NAME
, LAST_NAME
, MANAGER_ID
)
VALUES
(1, 'Windy', 'Hays', NULL),
(2, 'Ava', 'Christensen', 1),
(3, 'Hassan', 'Conner', 1),
(4, 'Anna', 'Reeves', 2),
(5, 'Sau', 'Norman', 2),
(6, 'Kelsie', 'Hays', 3),
(7, 'Tory', 'Goff', 3),
(8, 'Salley', 'Lester', 3);

COMMIT;

SELECT * FROM EMPLOYEE;

image

-> 각 employee마다 id가 있으며, 사장을 뜻하게 되는 Windy Hays를 제외하고는 모든 자신을 관리하는 manager가 있다. (즉, Ava와 Hassan은 Windy Hays 아래직원이자 매니저이다.)

- 관계도

image


SELF 조인 실습

● 기본 실습

SELECT
	  E.FIRST_NAME || ' ' || E.LAST_NAME EMPLOYEE,
	  M.FIRST_NAME || ' ' || M.LAST_NAME MANAGER
  FROM
	  EMPLOYEE E
INNER JOIN EMPLOYEE M 
   ON M.EMPLOYEE_ID = E.MANAGER_ID
ORDER BY MANAGER;

image

-> EMPOYEE 테이블을 셀프 INNER 조인하여, EMPLOYEE_ID와 MANAGER_ID 이 같은 값만 출력한다.

-> 따라서, MANAGER_ID 값이 NULL인 Windy Hays는 employee에 포함되지 않음.


● SELF LEFT OUTER 조인

SELECT
	  E.FIRST_NAME || ' ' || E.LAST_NAME EMPLOYEE,
	  M.FIRST_NAME || ' ' || M.LAST_NAME MANAGER
  FROM
	  EMPLOYEE E
LEFT JOIN EMPLOYEE M 
   ON M.EMPLOYEE_ID = E.MANAGER_ID
ORDER BY MANAGER;

image

-> INNER JOIN 에서 LEFT JOIN 으로 바뀐 것이다. (LEFT OUTER JOIN = LEFT JOIN)

-> 따라서, MANAGER_ID의 값이 NULL인 Windy Hays까지 employee에 포함되어 출력됨.


● 부정형 조건

SELECT
	  F1.TITLE,
	  F2.TITLE,
	  F1.LENGTH
  FROM
	  FILM F1
INNER JOIN FILM F2 
   ON F1.FILM_ID != F2.FILM_ID
  AND F1.LENGTH = F2.LENGTH;

image

-> FILM 테이블을 SELF INNER 조인하여, 서로 다른 영화면서, FILM.LENGTH의 값은 같은 것들만 출력한다.

-> 이처럼 동일한 테이블을 각각의 다른 집합으로 구성하여 조인하는 것이 셀프 조인이다.


● 부정형 조건 실패 예시

SELECT
	  *
  FROM
	  FILM F1 -- 테이블을 조회
WHERE F1.LENGTH = F1. LENGTH
  AND F1.FILM_ID != F1.FILM_ID;

-> 결과가 나오지 않는다.

-> 자기자신과 길이가 같은 것을 출력하라는 것은 모든 데이터를 의미하고, 자기 자신과 아이디가 다른 것을 출력하는 것은 아무것도 출력될 수 없다.

-> 셀프 조인이 필요한 이유이다!


© 2021. All rights reserved.

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

kyusang Hwang