DBMS/개념

07_ DML의 심화

seungwon-1 2025. 9. 21. 14:38

데이터베이스에서 자주 사용하는 DML(Data Manipulation Language)의 심화 기능을 정리해봤다


1. INSERT 문 심화

1.1 다중 행 삽입

여러 데이터를 한 번에 삽입할 수 있다. 효율적인 데이터 입력 방법이다.

-- 다중 행 삽입 예시
INSERT ALL
    INTO practice_employees (employee_id, first_name, last_name, email, hire_date, job_id)
    VALUES (1, 'John', 'Doe', 'jdoe@example.com', '2023-01-01', 'IT_PROG')
    INTO practice_employees (employee_id, first_name, last_name, email, hire_date, job_id)
    VALUES (2, 'Jane', 'Smith', 'jsmith@example.com', '2023-02-01', 'SA_REP')
SELECT * FROM DUAL;

 

 

1.2 서브쿼리를 이용한 INSERT

다른 테이블의 결과를 이용해서 데이터를 삽입할 수도 있다.

-- 부서별 최고 급여 직원 삽입
INSERT INTO practice_top_employees (employee_id, first_name, last_name, salary, department_id)
SELECT e.employee_id, e.first_name, e.last_name, e.salary, e.department_id
FROM practice_employees e
INNER JOIN (
    SELECT department_id, MAX(salary) as max_salary
    FROM practice_employees
    GROUP BY department_id
) m ON e.department_id = m.department_id AND e.salary = m.max_salary;

 

 

2. UPDATE 문 심화

서브쿼리를 활용한 UPDATE

서브쿼리를 통해 조건에 맞는 행을 계산해서 수정할 수 있다.

-- 부서별 평균 급여로 갱신
UPDATE practice_employees e
SET salary = (
    SELECT AVG(salary)
    FROM practice_employees
    WHERE department_id = e.department_id
)
WHERE job_id = 'SA_REP';

 

 

3. DELETE 문 심화

서브쿼리를 이용한 DELETE

조건부 삭제를 서브쿼리로 처리할 수 있다.

-- 평균 급여 미만 직원 삭제
DELETE FROM practice_employees
WHERE salary < (
    SELECT AVG(salary)
    FROM practice_employees
);

-- 삭제 후 확인
SELECT * FROM practice_employees;

 

 

4. SELECT 문 심화

4.1 GROUP BY 절

데이터를 그룹화하고 집계 함수를 적용할 수 있다.

-- 부서별 평균 급여
SELECT department_id, AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
ORDER BY avg_salary DESC;

4.2 HAVING 절

그룹화된 결과에 조건을 줄 때 HAVING을 사용한다.

-- 평균 급여가 5000 이상인 부서
SELECT department_id, AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 5000
ORDER BY avg_salary DESC;

 

 

부서별 최고 급여와 최저 급여 차이가 5000 이상인 부서를 조회하라.

직무별, 부서별 평균 급여를 계산하고, 평균 급여가 전체 평균보다 높은 그룹만 조회하라.

입사년도별 직원 수를 계산하고, 가장 많은 직원이 입사한 연도 Top 3를 조회하라.

SELECT 
    department_id,
    MAX(salary) as max_salary,
    MIN(salary) as min_salary,
    MAX(salary) - MIN(salary) as salary_gap
FROM employees
GROUP BY department_id
HAVING MAX(salary) - MIN(salary) >= 5000
ORDER BY salary_gap DESC;

 

 

'DBMS > 개념' 카테고리의 다른 글

09_ 날짜와 시간 함수  (0) 2025.09.25
08_ DBMS 형변환  (0) 2025.09.23
06_ DB의 연산자  (0) 2025.09.19
05_ DML(데이터 조작어)  (0) 2025.09.18
04_ DDL(데이터 구조 정의어)  (0) 2025.09.17