PostgresSQL/PostgresSQL 복습

2026-06-15

jamk-diary 2026. 6. 15. 18:02

실무에서 가장 많이 쓰는 패턴으로 딱 구성된 맞춤형 실습 과제를 준비했어.

마치 네가 "회사의 데이터 분석가"가 되었다고 생각하고, 아래 3문제를 천천히 풀어봐!


💻 재미나를 위한 JOIN 실습 과제

[기본 세팅 조건]

  • 사원 테이블: employees e (사원번호 employee_id, 이름 first_name, 부서번호 department_id, 상사번호 manager_id, 급여 salary)
  • 부서 테이블: departments d (부서번호 department_id, 부서명 department_name)

🎯 1단계: "누가 어디서 일하는지 점검해 봐!" (기초 매칭)

  • 문제: 사원들의 이름(first_name)과 그 사원이 속한 부서명(department_name)을 출력하되, 부서가 배정되지 않은 신입 사원까지도 누락 없이 전부 출력하시오.
  • 힌트: 사원을 주인공으로 삼아서 다 살려야 해! 어떤 조인을 써야 할까? 😉

🎯 2단계: "인사과 비상! 낙오된 데이터를 찾아라!" (차집합 필터링)

  • 문제: 회사 데이터 점검을 위해 "사원이 단 한 명도 없는 텅 빈 유령 부서"의 부서 번호(department_id)와 부서명(department_name)만 쏙 골라내서 출력하시오.
  • 힌트: 오른쪽 부서 테이블을 다 살려놓고, 사원 쪽의 빈칸(IS NULL)을 지우개로 슥슥 지워보자!

🎯 3단계: "동기부여 프로젝트, 상사보다 많이 버는 사람?" (셀프 조인 심화)

  • 문제: 관리자(상사)보다 급여(salary)를 더 많이 받는 사원의 이름(first_name)과 급여, 그리고 그 상사의 이름과 급여를 함께 출력하시오.
  • 출력 레이블 별칭: 사원이름은 [사원], 사원급여는 [사원급여], 상사이름은 [상사], 상사급여는 [상사급여]로 지정할 것!
  • 힌트: 오늘 마지막에 배운 1인 2역 셀프 조인을 쓰되, WHERE 절에 급여 크기 비교(>) 조건을 넣어봐!
  •  

--1
SELECT e.first_name, d.department_name 
FROM employees e LEFT OUTER JOIN departments d  -- 👈 사원을 주인공으로 다 살리기!
  ON e.department_id = d.department_id;        -- 👈 부서 번호끼리 이쁘게 조립!

--2


SELECT d.department_id, d.department_name 
FROM employees e RIGHT OUTER JOIN departments d -- 👈 부서를 다 살려야 하니까 RIGHT!
  ON e.department_id = d.department_id 
WHERE e.employee_id IS NULL; -- 👈 사원 번호 자리가 텅 빈 '유령 부서'만 쏙 골라내기!

--3
SELECT 
    emp.first_name as "[사원]", 
    emp.salary as "[사원급여]", 
    m.first_name as "[상사]",       -- 👈 오타 수정!
    m.salary as "[상사급여]" 
FROM employees emp JOIN employees m 
  ON emp.manager_id = m.employee_id -- 👈 [치트키] 사원의 상사 id = 상사의 사원번호!
WHERE emp.salary > m.salary;        -- 👈 상사보다 '더 많이' 받는 조건!

 

 

-- 🟡 나의 제출 코드
SELECT emp.first_name as"사원" ,emp.salary as "사원 급여 ", m.first_ name as "상사", m.salary as "상사급여" 
from employees emp join employees m 
  on emp.department_id = m.department_id 
where emp.salary >= m.salary

'PostgresSQL > PostgresSQL 복습' 카테고리의 다른 글

2026-06-11  (0) 2026.06.11