테이블에 새로운 행을 추가하여 테이블의 행 개수를 증가시키는 구문
INSERT INTO 테이블명 (서브쿼리);
INSERT하고자 하는 컬럼이 모든 컬럼인 경우 컬럼명 생략 가능. 단, 컬럼의 순서를 지켜서 VALUES에 값을 기입해야 함
INSERT 시 VALUES 대신 서브쿼리 이용 가능
예시
INSERT INTO EMP_COPY (
SELECT EMP.EMP_ID, EMP_NAME, DEPT_TITLE
FROM EMP
LEFT JOIN DEPT ON (DEPT_CODE = DEPT_ID))
;
INSERT 시 서브쿼리가 사용하는 테이블이 같은 경우
여러 개의 테이블에 INSERT ALL을 이용하여 한 번에 삽입 가능
단, 각 서브쿼리의 조건절이 같아야 함
[WHEN 조건1 THEN]
INTO 테이블명1[(컬럼, 컬럼, ...)] VALURES(값, 값, ...)
[WHEN 조건2 THEN]
INTO 테이블명2[(컬럼, 컬럼, ...)] VALURES(값, 값, ...)
서브쿼리;
-- INSERT ALL 연습 문제)
-- EMP 테이블의 입사일을 기준으로
-- 컬럼: EMP_ID, EMP_NAME, HIRE_DATE, SALARY
-- 2000년 1월 1일 이전에 입사한 사원의 정보는 EMP_OLD 테이블에 삽입하고
-- 2000년 1월 1일 이후에 입사한 사원의 정보는 EMP_NEW 테이블에 삽입한다.
INSERT ALL
WHEN TO_CHAR(HIRE_DATE, 'YYYY-MM-DD') < '2000-01-01' THEN
--WHEN HIRE_DATE < '2000-01-01' THEN
INTO EMP_OLD (EMP_ID, EMP_NAME, HIRE_DATE, SALARY)
WHEN HIRE_DATE >= TO_DATE('20000101', 'YY/MM/DD') THEN
--WHEN HIRE_DATE >= '2000-01-01' THEN
INTO EMP_NEW (EMP_ID, EMP_NAME, HIRE_DATE, SALARY)
SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY
FROM EMP
;
CREATE TABLE EMP_OLD
AS SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY
FROM EMP
WHERE 1=0
;
CREATE TABLE EMP_NEW
AS SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY
FROM EMP
WHERE 1=0
;
SELECT * FROM EMP_OLD;
SELECT * FROM EMP_NEW;