Jin's Dev Story

[PostgreSQL] PostgreSQL SELF 조인 본문

Database/PostgreSQL

[PostgreSQL] PostgreSQL SELF 조인

woojin._. 2024. 6. 11. 10:34

SELF 조인

  • 같은 테이블끼리 특정 컬럼을 기준으로 매칭되는 컬럼을 출력하는 조인
  • 즉, 같은 테이블의 데이터를 각각의 집합으로 분류한 후 조인

실습

 

 1) 업체의 직원 조직도의 데이터를 보여주는 테이블

SELECT * FROM EMPLOYEE;

 

 2) EMPLOYEE 테이블과 EMPLOYEE 테이블을 조인. EMPLOYEE_ID 와 MANAGER_ID 컬럼을 조인

|| : 문자열 합치기 연산자

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;

 

 3) MPLOYEE 테이블과 EMPLOYEE 테이블을 조인. EMPLOYEE_ID와 MANAGER_ID 컬럼을 조인. 단, 최상위 관리자도 모두 보이게 조회

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;

 

 4) FILM 테이블과 FILM 테이블을 SELF 조인. 서로 다른 영화인 집합을 조회하며 영화의 상영 시간은 동일한 데이터를 조회

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;

-- SELF 조인을 사용하지 않을때 조회 방법 -> 값이 나오지 않음
SELECT *
FROM FILM F1
WHERE
	F1.LENGTH = F1.LENGTH
	AND F1.FILM_ID <> F1.FILM_ID;