DBMS/개념

05_ DML(데이터 조작어)

seungwon-1 2025. 9. 18. 12:25

DML은 데이터 조회, 추가, 수정, 삭제를 담당하는 SQL 명령어들이다.
실제로 DB를 다룰 때 가장 자주 쓰였던 명령어들이라 꼭 익혀야 하는 명령어이다.


크게 보면 다음 네 가지로 나뉜다:

  • SELECT — 조회
  • INSERT — 삽입
  • UPDATE — 수정
  • DELETE — 삭제

 

1. SELECT — 데이터 조회

기본 문법

SELECT column1, column2, ...
FROM table_name
WHERE 조건식;

 

  • * : 모든 열 조회
  • WHERE : 조건 지정 (비교연산자 >, <, = 등 사용)
SELECT * FROM employees;

 

 

 

DISTINCT — 중복 제거

SELECT DISTINCT department_id
FROM employees;

중복 제거 후 부서ID만 출력

 

실습
employees에서 중복 없는 job_id만 조회

SELECT DISTINCT job_id
FROM employees;

 

WHERE — 조건 조회

SELECT first_name, salary
FROM employees
WHERE salary >= 5000;

실습

department_id가 20이고 salary가 6000 이상인 직원 정보

SELECT *
FROM employees
WHERE department_id=20 AND salary>=6000;

 

ORDER BY — 정렬

SELECT first_name, salary
FROM employees
ORDER BY salary DESC;

 

실습

department_id 오름차순, 같은 부서 안에서는 salary 내림차순

SELECT first_name, department_id, salary
FROM employees
ORDER BY department_id ASC, salary DESC;

 

ROWNUM — 행 수 제한 (Oracle)

SELECT first_name, salary
FROM employees
WHERE ROWNUM <= 10;

 

실습

salary가 높은 순으로 상위 5명 조회

SELECT first_name, salary
FROM (
    SELECT first_name, salary
    FROM employees
    ORDER BY salary DESC
)
WHERE ROWNUM <= 5;

 

 

2. INSERT — 데이터 삽입

기본 문법

INSERT INTO table_name (col1, col2, ...)
VALUES (val1, val2, ...);
INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES (101, 'John', 'Doe', 5000);

 

여러 행 삽입

INSERT ALL
  INTO tbl_student (student_id, name, birth_day)
  VALUES (8, '이길동', '2001-01-01')
  INTO tbl_student (student_id, name, birth_day)
  VALUES (9, '박철수', '2002-01-01')
SELECT * FROM dual;

 

서브쿼리로 삽입

INSERT INTO employees_backup (employee_id, first_name, salary)
SELECT employee_id, first_name, salary
FROM employees
WHERE department_id = 10;

 

실습

salary가 8000 이상인 직원들을 새 테이블에 삽입

CREATE TABLE high_salary_employees AS
SELECT *
FROM employees
WHERE 1=0;

INSERT INTO high_salary_employees
SELECT *
FROM employees
WHERE salary >= 8000;

 

3. UPDATE — 데이터 수정

기본 문법

UPDATE table_name
SET column1 = value1, column2 = value2
WHERE 조건;
UPDATE employees
SET salary = salary*1.10
WHERE department_id = 10;

 

실습

job_id가 'IT_PROG'인 직원의 급여를 15% 인상

UPDATE employees
SET salary = salary*1.15
WHERE job_id = 'IT_PROG';

 

여러 열 수정

UPDATE employees
SET first_name='John', last_name='Smith'
WHERE employee_id = 101;

모든 행 수정

UPDATE employees
SET salary = salary*1.05;

 

실습

commission_pct가 NULL이 아닌 직원만 0.02 증가

UPDATE employees
SET commission_pct = commission_pct + 0.02
WHERE commission_pct IS NOT NULL;

 

4. DELETE — 데이터 삭제

기본 문법

DELETE FROM table_name
WHERE 조건;
DELETE FROM employees
WHERE employee_id = 101;

 

실습

hire_date가 2005년 이전인 직원 삭제

DELETE FROM employees
WHERE hire_date < TO_DATE('2005-01-01','YYYY-MM-DD');

 

모든 행 삭제

DELETE FROM employees;

 

실습

employees_backup의 모든 데이터 삭제

DELETE FROM employees_backup;
 

5. TRUNCATE — 전체 삭제 (복구 불가)

효과가 delete보다는 빠르지만 되돌릴 수가 없다.

TRUNCATE TABLE employees_backup;

 

실습

TRUNCATE 사용하기

-- 1. test_data 테이블 생성
CREATE TABLE test_data (
    id NUMBER,
    name VARCHAR2(50)
);

-- 2. 데이터 삽입
INSERT INTO test_data (id, name) VALUES (1, '홍길동');
INSERT INTO test_data (id, name) VALUES (2, '김철수');
INSERT INTO test_data (id, name) VALUES (3, '이영희');

-- 3. 전체 데이터 삭제
TRUNCATE TABLE test_data;

-- 4. 확인
SELECT * FROM test_data; -- 아무 행도 나오지 않음

테이블을 생성을 하고 TRUNCATE를 사용하게 되면 위의 테이블의 전체 데이터를 삭제를 해서 select를 해도 값이 안 나오는 것을 볼 수 있다.

 

 

  • SELECT는 조회, INSERT는 추가, UPDATE는 수정, DELETE는 삭제
  • DELETE는 조건 삭제, TRUNCATE는 전체 삭제
  • WHERE를 빼면 모든 행이 영향을 받는다 (특히 UPDATE/DELETE 주의)
  • 실습할 때는 항상 백업 테이블을 만들어 놓고 작업하는 습관을 들여야 할 것 같다.

 

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

07_ DML의 심화  (0) 2025.09.21
06_ DB의 연산자  (0) 2025.09.19
04_ DDL(데이터 구조 정의어)  (0) 2025.09.17
📚03_ DBMS의 자료형  (0) 2025.09.16
02_ DB와 SQL  (0) 2025.09.15