📘 DATABASE/ORACLE

DML (Data Manipulation Language)

개발진스 2023. 4. 18. 14:26
728x90

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;

 

수정결과 SELEC문

 

Q) 모든 사원의 급여를 10% 인상

SQL> UPDATE EMP03

          SET SAL = SAL * 1.1;

수정결과 SELEC문

 

Q) 입사일을 오늘로 수정

SQL> UPDATE EMP03

          SET HIREDATE = SYSDATE;

수정결과 SELEC문

 

2) 테이블의 특정 행만 변경

 

UPDATE문에 WHERE절을 추가하면 조건만 만족하는 특정행만 변경할 수 있다.

 

Q) 부서번호가 10번인 사원의 부서번호를 30번으로 수정

SQL> UPDATE EMP04
            SET DEPTNO=30
            WHERE DEPTNO=10;

수정결과 SELEC문

 

 

Q) JOB 컬럼값이 MANAGER인 경우, 급여를 10% 인상하는 쿼리문
SQL> UPDATE EMP01 

          SET SAL = SAL * 1.1

          WHERE JOB = 'MANAGER';

수정결과 SELEC문

 

Q) 1987년에 입사한 사원의 입사일을 오늘로 수정하는 쿼리문

SQL> UPDATE EMP01

          SET HIREDATE = SYSDATE

          WHERE SUBSTR(HIREDATE, 1, 2) = '87';

수정결과 SELEC문

 

 

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

728x90