DML(데이터조작어)
f
firststep 에디터
IT / 자격증 전문 라이터
2026년 2월 27일957
DML(데이터조작어)
1) INSERT: 데이터 추가
1-1) 단일 행 INSERT(한 줄 추가)
- 테이블에 새 행 1개를 추가합니다.
- 컬럼을 일부만 지정하면, 지정하지 않은 컬럼은 NULL(또는 DEFAULT)이 됩니다.
예)
INSERT INTO emp (empno, ename, job, hiredate)
VALUES (101, 'YONGMOON', 'MANAGER', DATE '2023-08-01');
1-2) 컬럼 목록 없이 INSERT(전체 컬럼에 넣기)
- 테이블 컬럼 순서대로 값을 모두 넣을 때 사용합니다.
- 실무에서는 컬럼 순서 변경 위험 때문에 보통 권장하지는 않지만, 교재에선 개념 설명용으로 자주 나옵니다.
예)
INSERT INTO emp
VALUES (102, 'YONGMOON2', 'CLERK', 7902, DATE '2023-08-03', 2000, NULL, 20);
1-3) 서브쿼리로 여러 행 INSERT(다중 INSERT)
- 다른 테이블에서 조회한 결과를 통째로 삽입합니다.
- “부서번호 20인 직원만 따로 복사해서 테이블 만들기” 같은 용도.
예시 흐름(이미지):
- EMP_MNG 테이블을 새로 만들고(구조만)
- EMP에서 DEPTNO=20인 행만 SELECT
- 그 결과를 EMP_MNG에 INSERT
INSERT INTO emp_mng (empno, ename, job, hiredate, deptno)
SELECT empno, ename, job, hiredate, deptno
FROM emp
WHERE deptno = 20;
2) UPDATE: 데이터 수정
2-1) 기본 형태
UPDATE 테이블
SET 컬럼1 = 값1, 컬럼2 = 값2
WHERE 조건;
- WHERE 없으면 전부 수정이라서 위험합니다.
2-2) 단순 UPDATE 예시
예: ENAME이 'YONGMOON'인 사람의 급여/커미션 수정
UPDATE emp
SET sal = 200, comm = 300
WHERE ename = 'YONGMOON';
2-3) 서브쿼리로 UPDATE(값을 계산해서 넣기)
이미지 예시 핵심:
- YONGMOON의 SAL을 “10번 부서 평균 급여”로 바꾼다.
UPDATE emp
SET sal = (
SELECT AVG(sal)
FROM emp
WHERE deptno = 10
)
WHERE ename = 'YONGMOON';
3) DELETE: 데이터 삭제
3-1) 기본 형태
DELETE FROM 테이블
WHERE 조건;
- WHERE 없으면 전부 삭제입니다.
예: YONGMOON2 삭제
DELETE FROM emp
WHERE ename = 'YONGMOON2';
WHERE ename = 'YONGMOON2';
3-2) DELETE vs TRUNCATE 차이(이미지 표 핵심)
- DELETE
- 조건으로 일부 삭제 가능
- 행 단위 삭제(상대적으로 느릴 수 있음)
- 보통 롤백 가능
- 트리거 영향 있음(삭제 트리거 등)
- TRUNCATE
- 테이블 전체를 통째로 비우는 느낌(보통 WHERE 불가)
- 빠름
- DB에 따라 롤백/로그 동작이 DELETE와 다름(대체로 제한적)
- “전체 초기화”에 사용
한 줄 비유:
- DELETE = “지우개로 필요한 줄만 지우기”
- TRUNCATE = “종이 자체를 새로 갈아끼우기(전체 비우기)”
4) MERGE: 데이터 동기화(UPSERT: 있으면 UPDATE, 없으면 INSERT)
4-1) 왜 쓰나?
- 두 테이블을 비교해서
- 키가 같으면 UPDATE
- 키가 없으면 INSERT
- “소스 테이블 내용을 타깃 테이블에 반영”할 때 사용합니다.
4-2) 기본 구조(이미지 핵심)
MERGE INTO 타깃 T
USING 소스 S
ON (매칭조건)
WHEN MATCHED THEN
UPDATE ...
WHEN NOT MATCHED THEN
INSERT ...
4-3) 이미지 예시 의미(EMP → EMP_MNG로 반영)
- 기준 키: EMPNO
- EMP_MNG에 같은 EMPNO가 있으면 → EMP의 SAL/COMM로 UPDATE
- EMP_MNG에 없으면 → EMP의 행을 INSERT
예시(형태만 깔끔하게 정리):
MERGE INTO emp_mng m
USING emp e
ON (m.empno = e.empno)
WHEN MATCHED THEN
UPDATE SET m.sal = e.sal, m.comm = e.comm
WHEN NOT MATCHED THEN
INSERT (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno);
결과 해석(이미지 요지)
- EMP_MNG에 이미 있던 직원(EMPNO가 겹침)은 급여/커미션이 최신 값으로 갱신됨
- EMP_MNG에 없던 직원은 새로 들어옴
- EMP_MNG에만 있던 행(예: 101 같은 추가 데이터)은 매칭이 안 되므로 그대로 남을 수 있음(조건/설계에 따라)
전체 요약(암기 포인트)
- INSERT: 추가 (VALUES 또는 SELECT 결과로 여러 행 추가)
- UPDATE: 수정 (WHERE 필수, 서브쿼리로 계산값 가능)
- DELETE: 삭제 (WHERE 없으면 전체 삭제)
- TRUNCATE: 전체 비우기(빠름, 제한 많음)
- MERGE: 동기화(있으면 UPDATE, 없으면 INSERT)
f
firststep 에디터 · IT / 자격증 전문 라이터
firststep.kr의 실무 에디터로서 무언가를 처음 도전하는 분들이 헤매지 않도록 검증된 지식과 실습 가이드를 작성합니다.
댓글 0개
댓글을 작성하려면 로그인이 필요합니다
간단한 이메일과 비밀번호로 3초 만에 가입하고 의견을 남겨보세요.
첫 번째 댓글을 남겨보세요!