DML(데이터 조작어) 문 정보

DML(데이터 조작어) 문은 기존 테이블의 데이터에 액세스하여 데이터를 조작합니다.

SQL*Plus 환경에서는 SQL> 프롬프트 뒤에 DML 문을 입력할 수 있습니다.

SQL Developer 환경에서, 워크시트에 DML 문을 입력할 수 있습니다. 또는 SQL Developer Connections 프레임 및 툴을 사용하여 데이터에 액세스하고 조작할 수 있습니다.

SQL Developer에서 DML 문의 효과를 보려면 Connections 프레임에서 변경된 객체의 스키마 객체 유형을 선택한 다음 Refresh 아이콘을 눌러야 할 수 있습니다.

DML 문이 포함되어 있는 트랜잭션을 커밋해야 DML 문이 영구적으로 적용됩니다. 트랜잭션은 Oracle Database에서 하나의 단위(단일 DML 문이 될 수 있음)로 취급되는 SQL 문 시퀀스입니다. 트랜잭션이 커밋되기 전까지는 트랜잭션을 롤백(실행 취소)할 수 있습니다. 트랜잭션에 대한 자세한 내용은 "트랜잭션 제어 명령문 정보"를 참조하십시오.

참조: DML 문에 대한 자세한 내용은 Oracle Database SQL Language Reference를 참조하십시오.

INSERT 문 정보

INSERT 문은 기존 테이블에 행을 삽입합니다.

INSERT 문의 간단한 권장 양식에는 다음과 같은 구문이 있습니다.

INSERT INTO table_name (list_of_columns)
VALUES (list_of_values);

list_of_columns의 모든 열에는 list_of_values의 해당 위치에 적합한 값이 있어야 합니다. 따라서 테이블에 행을 삽입하기 전에 테이블에 어떤 열이 있으며 적합한 값이 무엇인지 알아야 합니다. SQL Developer를 사용하여 이 정보를 가져오려면 "자습서: SQL Developer를 사용하여 EMPLOYEES 테이블 속성 및 데이터 보기"를 참조하십시오. SQL*Plus를 사용하여 이 정보를 가져오려면 DESCRIBE 문을 사용하십시오. 예:

DESCRIBE EMPLOYEES;

결과:

Name                                      Null?    Type
----------------------------------------- -------- ------------

EMPLOYEE_ID                               NOT NULL NUMBER(6)
FIRST_NAME                                         VARCHAR2(20)
LAST_NAME                                 NOT NULL VARCHAR2(25)
EMAIL                                     NOT NULL VARCHAR2(25)
PHONE_NUMBER                                       VARCHAR2(20)
HIRE_DATE                                 NOT NULL DATE
JOB_ID                                    NOT NULL VARCHAR2(10)
SALARY                                             NUMBER(8,2)
COMMISSION_PCT                                     NUMBER(2,2)
MANAGER_ID                                         NUMBER(6)
DEPARTMENT_ID                                      NUMBER(4)

Example 3-1의 INSERT 문은 모든 열 값이 제공되고 있는 직원의 EMPLOYEES 테이블에 행을 삽입합니다.

테이블에 행을 삽입하기 위해 모든 열 값을 알 필요는 없지만 모든 NOT NULL 열의 값을 알아야 합니다. NULL이 될 수 있는 열의 값을 모르는 경우 list_of_columns에서 이 열을 생략할 수 있습니다. 기본값은 NULL입니다.

Example 3-2의 INSERT 문은 SALARY를 제외한 모든 열 값이 제공된 직원의 EMPLOYEES 테이블에 행을 삽입합니다. 현재로서는 SALARY의 값이 NULL일 수 있습니다. 급여를 알게 되면 UPDATE 문을 사용하여 변경할 수 있습니다(예제 3-4 참조).

Example 3-3의 INSERT 문은 LAST_NAME이 제공되지 않은 직원의 EMPLOYEES 테이블에 행을 삽입합니다.

예제 3-1 - 모든 정보가 있는 경우 INSERT 문 사용

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,
  LAST_NAME,
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,
  SALARY,
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  10,              -- EMPLOYEE_ID
  'George',        -- FIRST_NAME
  'Gordon',        -- LAST_NAME
  'GGORDON',       -- EMAIL
  '650.506.2222',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  9000,            -- SALARY
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

결과:

1 row created.

예 3-2 일부 정보를 사용할 수 없을 때의 INSERT 문 사용

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,
  LAST_NAME,
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,          -- Omit SALARY; its value defaults to NULL.
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  20,              -- EMPLOYEE_ID
  'John',          -- FIRST_NAME
  'Keats',         -- LAST_NAME
  'JKEATS',        -- EMAIL
  '650.506.3333',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

결과:

1 row created.

예제 3-3 INSERT 문을 잘못 사용

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,      -- Omit LAST_NAME (error)
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  20,              -- EMPLOYEE_ID
  'John',          -- FIRST_NAME
  'JOHN',          -- EMAIL
  '650.506.3333',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

결과:

ORA-01400: cannot insert NULL into ("HR"."EMPLOYEES"."LAST_NAME")

참조:

UPDATE 문 정보

UPDATE 문은 기존 테이블 행 집합을 갱신(값 변경)합니다.

간단한 UPDATE 문 양식에는 다음과 같은 구문이 있습니다.

UPDATE table_name
SET column_name = value [, column_name = value]...
[ WHERE condition ];

각 값은 해당 column_name에 적합해야 합니다. WHERE 절을 포함하면 명령문은 조건을 충족하는 행에서만 열 값을 갱신합니다.

예 3-4의 UPDATE 문은 사원의 급여가 알려지기 전에 예 3-2의 EMPLOYEES 테이블에 삽입된 행에서 SALARY 열의 값을 갱신합니다.

예 3-5의 UPDATE 문은 부서 80의 모든 직원에 대한 수수료 백분율을 갱신합니다.

예제 3-4: UPDATE 문을 사용하여 데이터 추가

UPDATE EMPLOYEES
SET SALARY = 8500
WHERE LAST_NAME = 'Keats';

결과:

1 row updated.

예제 3-5 UPDATE 문을 사용하여 여러 행 갱신

UPDATE EMPLOYEES
SET COMMISSION_PCT = COMMISSION_PCT + 0.05
WHERE DEPARTMENT_ID = 80;

결과:

34 rows updated.

참조:

DELETE 문 정보

DELETE 문은 테이블에서 행을 삭제합니다.

간단한 DELETE 문 양식에는 다음과 같은 구문이 있습니다.

DELETE FROM table_name [ WHERE condition ];

WHERE 절을 포함하면 이 명령문은 조건을 충족하는 행만 삭제합니다. WHERE 절을 생략하면 이 명령문은 테이블에서 모든 행을 삭제하지만 비어 있는 테이블은 계속 존재합니다. 테이블을 삭제하려면 DROP TABLE 문을 사용하십시오.

예제 3-6의 DELETE 문은 예제 3-1예제 3-2에 삽입된 행을 삭제합니다.

예제 3-6: DELETE 문 사용

DELETE FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('01-JAN-07', 'dd-mon-yy');

결과:

2 rows deleted.

참조: