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인 직원만 따로 복사해서 테이블 만들기” 같은 용도.

예시 흐름(이미지):

  1. EMP_MNG 테이블을 새로 만들고(구조만)
  2. EMP에서 DEPTNO=20인 행만 SELECT
  3. 그 결과를 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';
 

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)
반응형