DML (Data Manipulation Language)
1. INSERT
- 테이블에 새로운 로우를 추가할 때 사용하는 SQL문이다
- 테이블에 새로운 데이터를 입력하기 위해 사용하는 데이터 조작어이다.
- 테이블의 모든 컬럼에 자료를 입력하는 경우 컬럼 목록을 기술하지 않아도 된다. 컬럼 목록이 생략되면 VALUES절 다음의 값들이 테이블의 기본 컬럼 순서대로 입력된다.
특정한 컬럼에만 DATA를 입력하는 경우 | 모든 컬럼에 DATA를 입력하는 경우 |
INSERT INTO table_name(column_value, ...) VALUES(column_value, ...) |
INSERT INTO table_name VALUES(column_value, ...) |
1) INSER구문의 오류 발생의 예
- 컬럼명에 기술된 목록 수보다 VALUES 다음에 나오는 괄호 안에 기술한 값의 개수가 적으면 에러
- 칼럼명에 기술된 목록 수보다 VALUES 다음에 나오는 괄호에 기술한 값의 개수가 많으면 에러
2) 칼럼명을 생략한 INSERT 구문
테이블에 로우를 추가할 때 몇몇 특정 칼럼이 아닌 모든 칼럼에 자료를 입력하는 경우에는 굳이 칼럼 목록을 기술하지 않아도 된다.
칼럼 목록이 생략되면 VALUES절 다음의 값들이 테이블의 기본 칼럼 순서대로 입력된다.
Q) INSERT 구문을 이용하여 컬럼명을 생략하고 데이터를 추가
SQL> INSERT INTO DEPT02
VALUES (20, 'RESEARCH', 'DALLAS');
3) NULL값의 삽입
데이터를 입력하는 시점에서 해당 칼럼 값을 모르거나 확정되지 않았을 경우에는 NULL값을 입력해야한다. NULL값 삽입에는 암시적인 방법과 명시적인 방법이 있다.
3-1) 암시적으로 NULL값 삽입
암시적인 방법은 컬럼명 리스트에 칼럼을 생략하는 것이다. 즉, 다른 칼럼은 값을 입력하지만 이렇게 생략한 칼럼에는 암시적으로 NULL값이 할당된다.
Q) 지역명이 결정되지 않은 30부서에 부서명만 입력
SQL> INSERT INTO DEPT01 (DEPTNO, DNAME)
VALUES (30, 'SALES');
3-2) 명시적으로 NULL값 삽입
명시적인 방법은 VALUES 리스트에 NULL이라고 직접 기술하여 입력하는 방법이다
지역명이 결정되지 않아서 다음과 같이 2개의 칼럼만 입력하면 오류가 발생한다
SQL> INSERT INTO DEPT01
VALUES (40, 'OPERATIONS');
수정 SQL> INSERT INTO DEPT01
VALUES (40, 'OPERATIONS', 'NULL');
NULL 값은 NULL대신 ' '를 사용할 수 있다.
SQL > INSERT INTO DEPT01
VALUES (50, '', 'CHICAGO');
2. UPDATE
UPDATE 테이블명
SET 컬럼명1 = 값1, 컬럼명2 = 값2
WHERE conditions;
UPDATE문은 기존의 행을 수정하는 것이다. 따라서 어떤 행의 데이터를 수정하는지 WHERE절을 이용하여 조건을 지정해야 한다. WHERE절을 사용하지 않으면 모든 행이 수정된다.
1) 테이블의 모든 행 변경
WHERE절을 추가하지 않으면 모든행이 변경된다.
Q) 모든 사원의 부서번호를 30번으로 수정
SQL> UPDATE EMP03
SET DEPTNO=30;
Q) 모든 사원의 급여를 10% 인상
SQL> UPDATE EMP03
SET SAL = SAL * 1.1;
Q) 입사일을 오늘로 수정
SQL> UPDATE EMP03
SET HIREDATE = SYSDATE;
2) 테이블의 특정 행만 변경
UPDATE문에 WHERE절을 추가하면 조건만 만족하는 특정행만 변경할 수 있다.
Q) 부서번호가 10번인 사원의 부서번호를 30번으로 수정
SQL> UPDATE EMP04
SET DEPTNO=30
WHERE DEPTNO=10;
Q) JOB 컬럼값이 MANAGER인 경우, 급여를 10% 인상하는 쿼리문
SQL> UPDATE EMP01
SET SAL = SAL * 1.1
WHERE JOB = 'MANAGER';
Q) 1987년에 입사한 사원의 입사일을 오늘로 수정하는 쿼리문
SQL> UPDATE EMP01
SET HIREDATE = SYSDATE
WHERE SUBSTR(HIREDATE, 1, 2) = '87';
3. DELETE
- 테이블에 저장되어 있는 데이터를 삭제하는 명령문이다.
- 테이블의 기존 행을 삭제하는 명령문이다.
- 특정 로우를 삭제하기 위해서는 WHERE절을 추가한다.
- 만약 DELETE문에 WHERE절을 사용하지 않을 경우 테이블에 있는 모든 행이 삭제된다.
DELETE FROM table_name
WHERE conditions;
Q) 30번 부서를 삭제
SQL> DELETE FROM EMP04 WHERE DEPTNO = 30;
4. DELETE와 TRUNCATE의 차이점
DELETE 명령어
DELETE를 사용하여 테이블의 행을 삭제할 경우에 행이 많으면 행이 삭제될 때마다 많은 자원이 소모된다.
DELETE는 삭제 이전 상태로 원상 복귀할 경우를 생각해서 ROLLBACK 정보를 저장하고 있어야 하기 때문이다.
TRUNCATE 명렁어
TRUNCATE 사용하여 테이블의 행을 삭제할 경우 TRUNCATE 명령어는 DDL 명령문으로 ROLLBACK될 수 없다. 즉시 커밋 하기 때문에 효율적으로 삭제 할 수 있다.
참고자료 : 예제로 배우는 ORACLE 11g