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 |