sqld
DML(데이터조작어)
자격증원톱
2026. 2. 27. 08:59
반응형
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)
반응형