Programming/SQL

[Oracle] DML(1) - INSERT / INSERT INTO SELECT / INSERT ALL

Jayna. 2024. 3. 8. 17:36
728x90

DML : DATA MANIPULATION LANGUAGE

데이터 조작 언어

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

 

 

INSERT

테이블에 행을 추가하는 구문

 

1.

INSERT INTO 테이블명 VALUES (값, 값, 값, ... );

=> 해당 테이블 모든 컬럼에 추가하고자 하는 값을 직접 제시해서 INSERT 하고자 할 때 사용

=> 주의할 점: 컬럼 순번을 지켜서 VALUES 괄호 안에 나열 해야함

INSERT INTO EMPLOYEE
VALUES (900, '홍길동', '001122-1234567', 'hgd1122@mail.com', '01012341234'
     , D1', 'J7', 'S4', 3000000, 0.1, NULL, SYSDATE, NULL, DEFAULT);
-- 1 행 이(가) 삽입되었습니다.
728x90

2.

INSERT INTO 테이블(컬럼명1, 컬럼명2, 컬럼명3, ... )
VALUES (값1, 값2, 값3, ... );

=> 해당 테이블에 특정 컬럼만 선택해서 그 컬럼에 추가할 값만 제기하고자 할 때 사용

한 행 단위로 추가되기 때문에 선택이 안된 컬럼은 기본적으로 NULL 값이 들어감

( 기본값 DEFAULT이 지정되어있으리 경우 기본값이 들어감)

 

3. INSERT INTO SELECT

INSERT INTO 테이블명 (서브쿼리);

=> VALUES로 값을 기입하는 것 대신 서브쿼리로 조회한 결과값을 INSERT 하는 구문

(한번에 여러 행을 INSERT 할 수 있다)

-- 전체 사원들의 사번, 이름, 부서명을 조회한 결과
SELECT EMP_ID, EMP_NAME, DEPT_TITLE
  FROM EMPLOYEE, DEPARTMENT
 WHERE DEPT_CODE = DEPT_ID(+);   --20개 행
 
 INSERT INTO EMP_01
   (SELECT EMP_ID, EMP_NAME, DEPT_TITLE
  FROM EMPLOYEE, DEPARTMENT
 WHERE DEPT_CODE = DEPT_ID(+) ); -- 20개 행 이(가) 삽입되었습니다.

 

4. INSERT ALL

두 개 이상의 테이블에 각각 INSERT 할 때 사용

그때 사용되는 서브쿼리가 동일한 경우

INSERT ALL
  INTO 테이블명1 VALUES (컬럼명, 컬럼명, ... )
  INTO 테이블명2 VALUES (컬럼명, 컬럼명, ... )
서브쿼리;
INSERT ALL
  INTO EMP_JOB VALUES (EMP_ID, EMP_NAME, JOB_NAME)  -- 9개의 행 추가
  INTO EMP_DEPT VALUES (EMP_ID, EMP_NAME, DEPT_TITLE) -- 9개의 행 추가
       SELECT EMP_ID, EMP_NAME, DEPT_TITLE, JOB_NAME
         FROM EMPLOYEE E
         JOIN JOB J ON (E.JOB_CODE = J.JOB_CODE)
         LEFT JOIN DEPARTMENT D ON (E.DEPT_CODE = D.DEPT_ID)
        WHERE SALARY >= 3000000;
 -- 18개 행이(가) 삽입되었습니다.

5. INSERT ALL 조건

INSERT ALL
  WHEN 조건1 THEN
  INTO 테이블명1 VALUES (컬럼명, 컬럼명, ... )
  WHEN 조건2 THEN
  INTO 테이블명2 VALUES (컬럼명, 컬럼명, ... )
  서브쿼리 ;
INSERT ALL
  WHEN HIRE_DATE < '2010/01/01' THEN
  INTO EMP_OLD VALUES (EMP_ID, EMP_NAME, HIRE_DATE, SALARY) -- 9개 행
  WHEN HIRE_DATE >= '2010/01/01' THEN
  INTO EMP_NEW VALUES (EMP_ID, EMP_NAME, HIRE_DATE, SALARY) -- 10개 행
  SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY
    FROM EMPLOYEE;  -- 19개 행이(가) 삽입되었습니다.

 

 

 

 

[Oracle] DML(2) - UPDATE / UPDATE에 서브쿼리 쓰기

[Oracle] DML(1) - INSERT / INSERT INTO SELECT / INSERT ALL DML : DATA MANIPULATION LANGUAGE 데이터 조작 언어 테이블에 새로운 데이터를 삽입(INSERT) 하거나, 기존의 데이터를 수정(UPDATE) 하거나, 삭제(DELETE) 하는 구문

jaynarecord.tistory.com

 

[Oracle] DML(3) - DELETE ( vs TRUNCATE 비교)

[Oracle] DML(2) - UPDATE / UPDATE에 서브쿼리 쓰기 [Oracle] DML(1) - INSERT / INSERT INTO SELECT / INSERT ALL DML : DATA MANIPULATION LANGUAGE 데이터 조작 언어 테이블에 새로운 데이터를 삽입(INSERT) 하거나, 기존의 데이터

jaynarecord.tistory.com

 

728x90