[10단계] 이젠 테이블이 2개입니다
38. 현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!
SELECT count(*)
FROM departments
39. 모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!
- JOIN ON으로 처리 했다.
- JOIN ON 은 말 그대로 교집합?이라고 생각하면 쉽다.
- INNER JOIN: 기본적으로 많이 사용되는 JOIN입니다. 두 테이블에서 일치하는 데이터를 모두 반환합니다.
- LEFT JOIN: 왼쪽 테이블의 모든 데이터를 반환하며, 오른쪽 테이블에 일치하는 값이 없으면 NULL을 반환합니다.
- RIGHT JOIN: 오른쪽 테이블의 모든 데이터를 반환하며, 왼쪽 테이블에 일치하는 값이 없으면 NULL을 반환합니다.
- FULL OUTER JOIN: 양쪽 테이블의 모든 데이터를 반환하며, 일치하는 값이 없는 경우에는 NULL을 반환합니다.
SELECT em.name, dt.name
FROM employees em
JOIN departments dt ON em.department_id = dt.id;
40. '기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
- 해당 부분은 subquery로 풀어보았다.
- 말 그대로, departments 에서 name이 기술팀인 id 랑 employees에서의 id랑 같은 데이터를 뽑았다.
SELECT em.name
FROM employees em
WHERE em.department_id = (SELECT dt.id
FROM departments dt
WHERE dt.name='기술팀')
41. 부서별로 직원 수를 계산하는 쿼리를 작성해주세요!
- 일단, JOIN ON 으로 id가 둘이 같은 걸 묶는다.
- 그런 후 GROUP BY로 name을 묶은 후, 그걸 count 했다.
SELECT dt.name AS department_name, COUNT(*) AS employee_count
FROM employees em
JOIN departments dt ON em.department_id = dt.id
GROUP BY dt.name;
실행순서 >
1. FROM employees em JOIN departments dt
employees와 departments 테이블을 결합합니다.
2. ON em.department_id = dt.id
employees.department_id와 departments.id가 일치하는 행만 필터링합니다.
3. GROUP BY dt.name
부서 이름(dt.name)을 기준으로 데이터를 그룹화합니다.
4. SELECT dt.name AS department_name, COUNT(*) AS employee_count
그룹화된 데이터에서 부서 이름과 각 부서의 직원 수를 선택하여 반환합니다.
42. 직원이 없는 부서의 이름을 찾는 쿼리를 작성해주세요!
- 직원이 없는 부서는 employees 에 department_id가 없는걸 찾아야 하는 것임.
- 그러니까 department_id를 조회에서. 그 조회한 열에서 department의 id가 존재하냐? 안하냐? 만 보면 된다.
SELECT dt.name
FROM departments dt
WHERE dt.id NOT IN (SELECT department_id FROM employees)
1.서브쿼리 실행 > employees 테이블에서 department_id 값을 추출하여 집합으로 반환합니다.
2. WHERE 조건 평가: 각 departments.id 값이 서브쿼리 결과에 포함되지 않는지 (NOT IN) 확인합니다.
3. SELECT: 조건을 만족하는 행의 dt.name을 반환합니다.
43. '마케팅팀' 부서에만 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
- 마케팅 부서에만. 이기 때문에, 마케팅 부서 외에는 count()가 이어야한다.
- 문제에서는 가볍게, 마케팅팀만 뽑는 것을 원하는 거일수도 있으나, 혹시 다른 데이터가 있을 때도 고려하여 조금 길게 코드를 작성해 보았다.
SELECT dt.name, em.department_id, em.name
from employees as em, departments as dt
WHERE dt.name = '마케팅팀'
AND department_id IN (SELECT department_id
FROM employees em
GROUP BY em.department_id
HAVING COUNT(em.department_id) = 1)
'백엔드 부트캠프[사전캠프] > 문제풀이' 카테고리의 다른 글
[내일배움캠프-사전캠프] JAVA 걷기반 (1) | 2025.01.21 |
---|---|
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.21 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.20 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.19 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.18 |