고래씌

[Oracle] 7-1. DML(INSERT, UPDATE, DELETE) - INSERT 본문

Database/Oracle

[Oracle] 7-1. DML(INSERT, UPDATE, DELETE) - INSERT

고래씌 2023. 11. 29. 13:39

1. DML (Data Manipulation Language)

: 데이터 조작 언어
    
- 테이블에 새로운 데이터를 삽입(INSERT)하거나 기존의 데이터를 수정(UPDATE)하거나 삭제(DELETE)하는 구문들

 


2. INSERT

: 테이블에 새로운 "행"을 추가하는 구문

 

    [표현법]
    
    * INSERT INTO [계열]

 


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

=> 해당 테이블에 "모든"컬럼에 대해 추가하고자 하는 값을 내가 직접 제시해서
     "한 행"을 INSERT하고자 할 때 쓰는 표현법

 ※ 주의사항 : 컬럼의 순서, 자료형, 개수를 맞춰서 VALUES 괄호 안에 나열해야함

 

 

▶ EMPLOYEE 테이블에 사원 정보 추가

 

=> 값 추가 된 것을 확인

 

 


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

=> 해당 테이블에 "특정"컬럼만 선택해서 그 컬럼에 추가할 값만 제시하고자 할 때 사용
    
    - 그래도 한행 단위로 데이터가 추가되기 때문에 선택이 안된 컬럼은 기본적으로 NULL 값이 들어간다.
    - 단, DEFAULT 설정이 있는 경우 "기본값"이 들어간다.
    
    - NOT NULL 제약조건이 걸려있는 컬럼은 반드시 선택해서 직접 값을 제시해야함.
    (단, DEFAULT 옵션이 추가된 경우는 생략가능) 

 

 

 EMPLOYEE 테이블에 사원 정보 추가

 

=> ENT_YN은 DEFAULT 설정이 되어 있어서 기본값 "N"이 들어감

 


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

=> VALUES()로 값을 직접 기입하는게 아니라 서브쿼리로 조회한 결과값을 통째로 INSERT 하는 구문
    (여러행을 한번에 INSERT 할 수 있다)

 

 

① EMP_01 이라는 새 테이블 추가

 

 

② 전체 사원들의 사번, 이름, 부서명을 조회

 

 

③ 위 서브쿼리 결과를 INSERT

 


4) INSERT ALL  계열 - ①

- 두 개 이상의 테이블에 각각 INSERT 할 때 사용
  조건 : 그때 사용되는 서브쿼리가 동일해야 한다.

 

  [표현법]

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

 

 

① 첫번째 테이블

: 급여가 300만원 이상인 사원들의 사번, 사원명, 직급명을 보관할 테이블

 

 

② 두번째 테이블

: 급여가 300만원 이상인 사원들의 사번, 사원명, 부서명을 보관할 테이블

 

 

③ 사번, 사원명, 직급명, 부서명 조회

 

 

④ INSERT ALL

 

 

=> 총 16개의 행 추가됨

 

 

 

4) INSERT ALL  계열 - ②

=> 조건에 맞는 값들만 넣겠다

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

 

 

① 새로운 테스트용 테이블 생성

- 2010년도 기준으로 이전에 입사한 사원들의 사번, 사원명, 입사일, 급여

 

 

 

- 2010년도 이후에 입사한 사원정보를 저장할 테이블

 

 

조건을 사용해서 각 테이블에 값 추가(INSERT)