PM/SQL

[내일배움캠프 TIL] 사전캠프 11일차 SQL 기초(10)

alstj0506 2025. 3. 24. 15:06

Q10) 이젠 테이블이 2개입니다

다음과 같은 직원(employees) 테이블과 부서(departments) 테이블이 있습니다.
 
employees 테이블
id
department_id
name
1
101
르탄이
2
102
배캠이
3
103
구구이
4
101
이션이
 
departments 테이블
id
name
101
인사팀
102
마케팅팀
103
기술팀

38. 현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!
더보기
SELECT COUNT(*) FROM departments

 

39. 모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!
더보기

SELECT e.name, d.name

FROM employees e

JOIN departments d ON e.department_id = d.id

40. '기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
더보기

SELECT e.name 
FROM employees e 
JOIN departments d ON e.department_id = d.id 
WHERE d.name = '기술팀'

41. 부서별로 직원 수를 계산하는 쿼리를 작성해주세요!
더보기

SELECT d.name, COUNT(e.id) AS employee_count

FROM departments d

LEFT JOIN employees e ON d.id = e.department_id

GROUP BY d.id

42. 직원이 없는 부서의 이름을 찾는 쿼리를 작성해주세요!
더보기

SELECT d.name

FROM departments d

LEFT JOIN employees e ON d.id = e.department_id

WHERE e.id IS NULL

43. '마케팅팀' 부서에만 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
더보기

SELECT e.name

FROM employees e

JOIN departments d ON e.department_id = d.id

WHERE d.name = '마케팅팀'


핵심 개념 정리 

 

🔹 SQL 조인(JOIN) 개념 정리

조인(JOIN)은 두 개 이상의 테이블을 연결하여 데이터를 조회하는 SQL 연산입니다.
조인을 사용하면 공통된 키(Primary Key - Foreign Key 관계)를 기준으로 여러 테이블을 하나의 결과 집합으로 합칠 수 있습니다.

 

INNER JOIN 공통 데이터만 조회 교집합
LEFT JOIN 왼쪽 테이블 모든 행 + 일치하는 오른쪽 데이터 왼쪽 테이블 기준
RIGHT JOIN 오른쪽 테이블 모든 행 + 일치하는 왼쪽 데이터 오른쪽 테이블 기준
FULL OUTER JOIN 모든 데이터를 가져옴 (일치하지 않는 경우 NULL 포함) 합집합
SELF JOIN 같은 테이블을 두 번 사용하여 조인 자기 참조

👉 조인을 사용하면 여러 테이블을 결합하여 원하는 데이터를 효율적으로 가져올 수 있다! 🚀

 

1. INNER JOIN (내부 조인)

  • 두 테이블에서 공통된 데이터가 있는 행만 결과로 반환
  • ON 조건을 만족하는 경우에만 데이터가 결합됨
SELECT e.name, d.name 
FROM employees e 
INNER JOIN departments d ON e.department_id = d.id;

 

결과:

직원 이름 부서 이름
르탄이 인사팀
배캠이 마케팅팀
구구이  기술팀
이션이 인사팀

 

2. LEFT JOIN (왼쪽 조인)

  • 왼쪽(기준) 테이블의 모든 데이터를 가져오고, 오른쪽 테이블에 매칭되는 데이터가 없으면 NULL 반환
SELECT d.name, COUNT(e.id) AS employee_count 
FROM departments d 
LEFT JOIN employees e ON d.id = e.department_id 
GROUP BY d.id; 

 

결과 (만약 어떤 부서에 직원이 없으면 NULL이 들어감):


부서 이름 직원 수
인사팀 2
마케팅팀 1
기술팀 1
기획팀 0