-
Oracle - DML(Data ManipulationLanguage) INSERT - Part 1데이터베이스/Oracle 2020. 11. 20. 15:42728x90반응형
DML(Data ManipulationLanguage)
DML이란 데이터 조작 언어로 테이블에 값을 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문을 말한다.
먼저 INSERT를 알아보자.
INSERT
INSERT란 테이블에 새로운 행을 추가하여 테이블의 행 개수를 증가시키는 구문이다.
[ INSERT 예시 ]
컬럼명을 생략하지 않은경우
INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE, DEPT_CODE, JOB_CODE, SAL_LEVEL, SALARY, BONUS, MANAGER_ID, HIRE_DATE, ENT_DATE, ENT_YN) VALUES(900, '장채현', '901123-1080503', 'jang_ch@kh.or.kr', '01055569512', 'D1', 'J8', 'S3', 4300000, 0.2, '200', SYSDATE, NULL, DEFAULT);
컬럼명을 생략할 경우
INSERT INTO EMPLOYEE -- 컬럼명 생략 VALUES(900, '장채현', '901123-1080503', 'jang_ch@kh.or.kr', '01055569512', 'D1', 'J8', 'S3', 4300000, 0.2, '200', SYSDATE, NULL, DEFAULT);
* INSERT하고자 하는 컬럼이 모든 컬럼인 경우 컬럼명 생략이 가능하다.
단, 컬럼의 순서를 지켜서 VALUES에 값을 기입해야 한다.
서브쿼리를 이용한 예시
INSERT INTO EMP_01( SELECT EMP_ID, EMP_NAME, DEPT_TITLE FROM EMPLOYEE LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID) -- 서브쿼리 );
* 서브쿼리를 이용하여 여러개의 값을 삽입할 수 있다.
* INSERT 시 VALUES 대신 서브쿼리 이용 가능
INSERT ALL
INSERT ALL이란 INSERT 시 서브쿼리가 사용하는 테이블이 같은 경우 두 개 이상의 테이블에 INSERT ALL을 이용하여 한 번에 삽입이 가능하다.
단, 각 서브쿼리의 조건절이 같아야 한다.
[ INSERT ALL 예시 ]
- EMP_DEPT_D1테이블에 EMPLOYEE테이블의 부서코드가 D1인 직원의 사번, 이름, 소속부서, 입사일을 삽입하고
EMP_MANAGER테이블에 EMPLOYEE테이블의 부서코드가 D1인 직원의 사번, 이름, 관리자 사번을 조회하여 삽입하기
EMP_DEPT_D1 테이블 생성
CREATE TABLE EMP_DEPT_D1 AS SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE FROM EMPLOYEE WHERE 1 = 0; -- 같은 조건절
EMP_MANAGER 테이블 생성
CREATE TABLE EMP_MANAGER AS SELECT EMP_ID, EMP_NAME, MANAGER_ID FROM EMPLOYEE WHERE 1 = 0; -- 같은 조건절
생성 뒤 INSERT ALL을 통해 데이터 삽입하기
INSERT ALL INTO EMP_DEPT_D1 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’;
삽입을 하고 나서 결과는 이러하다.
EMP_DEPT_D1 테이블 조회
EMP_MANAGER 테이블 조회
또다른 예시
- EMPLOYEE테이블의 구조를 복사하여 사번, 이름, 입사일, 급여를 기록할 수 있는 테이블 EMP_OLD와 EMP_NEW 생성
EMP_OLD 테이블 생성
CREATE TABLE EMP_OLD AS SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY FROM EMPLOYEE WHERE 1 = 0;
EMP_NEW 테이블 생성
CREATE TABLE EMP_NEW AS SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY FROM EMPLOYEE WHERE 1 = 0;
두 테이블 생성 한 후 INSERT ALL을 통해 데이터 삽입하기
- EMPLOYEE테이블의 입사일 기준으로 2000년 1월 1일 이전에 입사한 사원의 사번, 이름, 입사일, 급여를 조회해서 EMP_OLD테이블에 삽입하고 그 후에 입사한 사원의 정보는 EMP_NEW테이블에 삽입
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;
삽입한 후 두 테이블의 결과값 조회
왼쪽은 EMP_OLD테이블
오른쪽은 EMP_NEW테이블
728x90반응형'데이터베이스 > Oracle' 카테고리의 다른 글
Oracle - DML(Data ManipulationLanguage) DELETE - Part 3 (0) 2020.11.20 Oracle - DML(Data ManipulationLanguage) UPDATE - Part 2 (0) 2020.11.20 Oracle - DDL (Data Definition Language) 제약 조건 - Part 2 (0) 2020.11.20 Oracle - DDL (Data Definition Language) CREATE - Part 1 (0) 2020.11.17 Oracle - 서브쿼리(SUBQUERY) - Part2 (0) 2020.11.16