CS/데이터베이스

SQL 실습(6)

hyomee2 2024. 7. 22. 21:46

* 실습은 앞의 SQL(2) 게시물에서 이용한 데이터베이스를 이용해 진행했다.

 

-- Q2. 서브쿼리를 이용하여 영업부인 직원들의 사원번호, 직원명, 부서코드, 급여를 출력하세요.
-- 참고. 영업부인 직원은 부서명에 ‘영업’이 포함된 직원임
SELECT emp_id, emp_name, dept_code, salary
FROM employee 
WHERE dept_code IN (SELECT dept_id 
                     FROM department 
                    WHERE dept_title LIKE '%영업%' );
						  

-- Q3. 서브쿼리와 JOIN을 이용하여 영업부인 직원들의 사원번호, 직원명, 부서명, 급여를 출력하세요.
SELECT a.emp_id, a.emp_name, b.dept_title, a.salary
FROM employee a
  JOIN department b ON a.dept_code = b.dept_id
 WHERE dept_code IN (SELECT dept_id
                        FROM department
                       WHERE dept_title LIKE '%영업%');
						

-- Q4. JOIN을 이용하여 부서의 부서코드, 부서명, 해당 부서가 위치한 지역명, 국가명을 추출하는 쿼리를 작성하고,
-- 이 쿼리를 서브쿼리로 활용하여 모든 직원의 사원번호, 직원명, 급여, 부서명, (부서의) 국가명을 출력하세요.
SELECT d.emp_id, d.emp_name, d.salary, e.dept_title, e.national_name
FROM employee d 
	JOIN (SELECT a.dept_id, a.dept_title, b.local_name, c.national_name
    		FROM department a
              JOIN location b ON a.location_id =  b.local_code
              JOIN national c ON b.national_code = c.national_code) e
ORDER BY e.national_name;


-- Q5. 러시아에서 발발한 전쟁으로 인해 정신적 피해를 입은 직원들에게 위로금을 전달하려고 합니다. 
-- 위로금은 각자의 급여에 해당 직원의 급여 등급에 해당하는 최소 금액을 더한 금액으로 정했습니다. 
-- Q4에서 작성한 쿼리를 활용하여 해당 부서의 국가가 ‘러시아’인 직원들을 대상으로, 
-- 직원의 사원번호, 직원명, 급여, 부서명, 국가명, 위로금을 출력하세요.단, 위로금 내림차순으로 출력되도록 하세요.
SELECT d.emp_id, d.emp_name, d.salary, e.dept_title, e.national_name, d.salary+f.min_sal AS 위로금
FROM employee d 
	JOIN (SELECT a.dept_id, a.dept_title, b.local_name, c.national_name
    		FROM department a
            JOIN location b ON a.location_id =  b.local_code
            JOIN national c ON b.national_code = c.national_code) e
	JOIN sal_grade f ON d.sal_level = f.sal_level
WHERE e.national_name = '러시아'
ORDER BY 위로금 DESC;