데이터 베이스/SQL - 1일 1쿼리
2025.01.07(화) 1일 1쿼리
subindev
2025. 1. 7. 14:32
Quiz 1) 'Development' 부서에서 현재 월급을 가장 많이 받는 직원의 이름과 그 연봉을 출력하라.
SELECT
CONCAT(e.first_name, ' ', e.last_name) as 'Name',
s.salary
FROM dept_emp as de
JOIN departments as d ON de.dept_no = d.dept_no
JOIN salaries as s ON de.emp_no = s.emp_no
JOIN employees as e ON e.emp_no = s.emp_no
WHERE dept_name= 'Development'
AND s.to_date = '9999-01-01' # 현재 급여
AND de.to_date= '9999-01-01' # 현재 부서
ORDER BY salary DESC
LIMIT 1;
Quiz 2) 나이가 가장 많은 직원의 현재 부서와 직급 그리고 이름은? (여러명이라면 여러명 출력)
SELECT
dept_name as '부서',
title as '직급',
CONCAT (e.first_name, ' ', e.last_name) as '이름'
FROM employees as e
JOIN dept_emp as de ON de.emp_no = e.emp_no
JOIN departments as d ON d.dept_no = de.dept_no
JOIN titles as t ON t.emp_no = e.emp_no
WHERE birth_date = (
SELECT DISTINCT birth_date FROM employees ORDER BY birth_date LIMIT 1
)
AND t.to_date = '9999-01-01'
AND de.to_date = '9999-01-01';
아래 처럼 MIN() 함수 이용 가능
SELECT
d.dept_name AS '부서',
t.title AS '직급',
CONCAT(e.first_name, ' ', e.last_name) AS '이름'
FROM employees AS e
JOIN dept_emp AS de ON e.emp_no = de.emp_no
JOIN departments AS d ON d.dept_no = de.dept_no
JOIN titles AS t ON e.emp_no = t.emp_no
WHERE e.birth_date = (
SELECT MIN(birth_date) FROM employees # 이처럼 MIN() 함수 이용 가능
)
AND de.to_date = '9999-01-01'
AND t.to_date = '9999-01-01';