Published 2022. 11. 23. 16:30

   - DQL (QUERY 데이터 질의 언어) : SELECT(쿼리문)
   - DML (MANIPULATION 데이터 조작 언어) : INSERT, UPDATE,DELETE, [SELECT]
   - DDL (DEFINITION 데이터 정의 언어) : CREATE, ALTER, DROP 
   - DCL (CONTROL 데이터 제어 언어) : GRANT, REVOKE, [COMMIT,ROLLBACK]
   - TCL (TRANSACTION 트랜잭션 제어 언어) : COMMIT, ROLLBACK


< DML 데이터 조작 언어 > 

 테이블에 데이터를 삽입(INSERT)하거나, 수정(UPDATE)하거나, 삭제(DELETE)하는 구문 

1. INSERT

      테이블에 새로운 행을 추가시키는 구문 
      
    [표현법]
      1) 특정 컬럼을 지정하지 않고 삽입하고자 할 때
       INSERT INTO 테이블명 VALUES(값, 값, 값, 값, ..);
       컬럼 순번을 지켜서 VALUES에 값을 나열해야됨 (컬럼 갯수만큼 값 제시)
       
       부족하게 값을 제시했을 경우 => not enough values 오류 
       값을 더 많이 제시 했을 경우 => too many values 오류 

INSERT INTO EMPLOYEE 
VALUES(900,'장채현','980911-2154320','jang_ch@br.com','01012345678',
       'D1','J7',4000000,0.2,200,SYSDATE,NULL,DEFAULT);

   2) 특정 컬럼을 선택해서 값을 제시하고자 할 때
     INSERT INTO 테이블명 (컬럼명,컬럼명,컬럼명) VALUES (값,값,값);
     
     한 행으로 추가되기 때문에 선택안된 컬럼에는 기본적으로 NULL이 들어감 
     => NOT NULL 제약조건이 걸려있는 컬럼은 반드시 선택해서 직접 값 제시해야함 
     단, 기본값(DEFAULT)이 지정되어 있으면 NULL이 아닌 기본값이 들어감 

INSERT 
  INTO EMPLOYEE
     (
       EMP_ID
     , EMP_NAME
     , EMP_NO
     , JOB_CODE
     , HIRE_DATE
     )
VALUES 
     (
      901
     , '강람보'
     , '890130-2156002'
     , 'J7'
     , TO_DATE('901223 143000','RRMMDD HH24MISS') 
     );

 

 3) 서브쿼리를 수행결과값을 통째로 INSERT하고자 할 때 
     INSERT INTO 테이블명 
     (서브쿼리);

INSERT INTO EMP_01
(
   SELECT EMP_ID,EMP_NAME,DEPT_TITLE
     FROM EMPLOYEE
     LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID)
);

 

 

2. INSERT ALL 

두개 이상의 테이블에 각각 INSERT 할 때 사용되는 서브쿼리가 동일 할 경우 

 [표현법]
    1) INSERT ALL
         INTO 테이블명1 VALUES (컬럼명,컬럼명,...)
         INTO 테이블명2 VALUES (컬럼명,컬럼명, ..)
         서브쿼리;

INSERT ALL
INTO EMP_DEPT VALUES(EMP_ID,EMP_NAME,DEPT_CODE,HIRE_DATE)
INTO EMP_MANAGER VALUES(EMP_ID,EMP_NAME,MANAGER_ID)
    SELECT EMP_ID,EMP_NAME,DEPT_CODE,HIRE_DATE,MANAGER_ID
      FROM EMPLOYEE
     WHERE DEPT_CODE = 'D1';

 2) INSERT ALL
               WHEN 조건1 THEN 
                INTO 테이블명1 VALUES(컬럼명, 컬럼명,...)
             WHEN 조건2 THEN
               INTO 테이블명2 VALUES(컬럼명, 컬럼명,...)
            서브쿼리;

INSERT ALL
WHEN HIRE_DATE < '2000/01/01' THEN
  INTO EMP_OLD VALUES (EMP_ID,EMP_NAME,HIRE_DATE,SALARY)
WHEN HIRE_DATE >= '2000/01/01' THEN
  INTO EMP_NEW VALUES (EMP_ID,EMP_NAME,HIRE_DATE,SALARY)
SELECT EMP_ID, EMP_NAME, HIRE_DATE,SALARY
FROM EMPLOYEE;

 

** 추가 : INSERT시 컬럼값으로 서브쿼리를써도됨 

INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME,EMP_NO,JOB_CODE, SALARY) 
 VALUES (500,'김말순','900912-2345676','J7',(SELECT MAX(SALARY)FROM EMPLOYEE));
복사했습니다!