[SQL] INSERT, INSERT ALL

지미미·2023년 4월 20일
0

Oracle SQL Developer

목록 보기
5/15
post-thumbnail

INSERT

테이블에 새로운 행을 추가하여 테이블의 행 개수를 증가시키는 구문

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 ALL

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;
profile
블루라이트로 광합성 하는 새럼

0개의 댓글