ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - Insert 실습 한방정리
    DataBase/Oracle 2024. 8. 27. 22:13
    반응형

     

    Insert 실습 한방정리

     

     

    테이블의 내용이 아닌 컬럼만 가지고 와서 테이블을 만들어준다.

    CREATE TABLE emp01
    as
    SELECT empno, ename, job FROM emp WHERE 1=0;

     

     

    다음과 같은 사원 정보를 추가한다.
    1111 홍길동 인사 / 2222 김길동 개발 / 3333 최길동 인사 / 4444 박길동 생산 
    INSERT INTO emp01(empno, ename, job)
    values(1111, '홍길동', '인사');
    
    SELECT * FROM emp01;
    INSERT INTO emp01(empno, ename, job)
    values(2222, '김길동', '개발');
    
    
    INSERT INTO emp01(empno, ename, job)
    values(3333, '최길동', '인사');
    
    INSERT INTO emp01(empno, ename, job)
    values(4444, '박길동', '생산');

     values에 들어간 값과  insert into에 적어준 컬럼이 1:1 매칭이 되어 값이 들어가게 된다. 

     

     

    컬럼 목록을 생략하는 경우

    INSERT INTO emp01
    values(5555, '홍길동', '개발');

    컬럼 목록을 생략하여도 values와 컬럼의 갯수가 일치한다면 정상적으로 값이 insert된다.

     

     

    컬럼 목록에 모든 컬럼이 있지 않는 경우

    INSERT INTO emp01(empno, ename)
    VALUES (6666, '이길동');

    emp01테이블에는, empno, ename, job 이렇게 3개의 컬럼이 존재하지만 2개의 컬럼만 명시하여 해당 컬럼에 값을 넣어준다면, 생략한 컬럼에는 null값이 들어가게 된다.

     

    Null을 명시적으로 저장

    INSERT INTO emp01 (empno, ename, job)
    values(7777, '박보검', NULL);

     

    <예시 테이블 생성>

    CREATE table emp02
    AS
    SELECT empno, ename, job FROM emp WHERE 1=0;

     

     

    컬럼이 동일하지 않아도 값이 들어간다. 단 순서대로 들어간다.

    INSERT INTO emp02(empno, ename, job)
    SELECT empno, ename, hiredate FROM emp;

    이와같이 컬럼명이 동일하지 않아도 순서대로 값이 들어가게 된다. 


     서브쿼리로 Insert하기

    INSERT INTO emp02
    SELECT empno, ename, job FROM emp01;

    서브쿼리를 사용하여 이와같이 insert할 수 있다.

     

     

    <예시 테이블 추가 생성>

    CREATE table emp03
    AS
    SELECT empno, ename, job FROM emp WHERE 1=0;
    
    CREATE table emp04
    AS
    SELECT empno, ename, hiredate FROM emp WHERE 1=0;

     

    서브 쿼리의 결과를 가지고 와서 해당 컬럼에 맞게 값을 Insert한다. 

    INSERT ALL 
    INTO emp03(empno, ename, job) values(empno, ename, job)
    INTO emp04(empno, ename, hiredate) values(empno, ename, hiredate)
    SELECT empno, ename, job, hiredate FROM emp;

     

    <문제>

    사원번호, 이름 급여를 저장할 수 있는 빈 테이블을 만들고
    급여가 1500이상인 사원들의 사원번호, 이름, 급여를 저장한다.
    CREATE TABLE emp05 
    AS
    SELECT empno, ename, sal FROM emp WHERE 1=0;

    우선 emp05라는 테이블을 생성한다.

     

    INSERT INTO emp05 
    SELECT empno, ename, sal FROM emp WHERE sal >= 1500;

    서브쿼리를 사용하여 값을 넣어준다. (컬럼명을 생략하는 경우 갯수가 초과 되지 않는다면 오류가 발생하지 않는다.)


     

    사원번호, 이름, 부서명을 저장할 수 있는 빈 테이블을 만들고
    DALLAS 지역에 근무하고 있는 사원들의 사원번호, 이름, 부서명을 저장한다.
    CREATE TABLE emp06
    AS
    SELECT a1.empno, a1.ename, a2.dname
    FROM emp a1, dept a2
    WHERE a1.deptno = a2.deptno AND 1=0;

     

    INSERT INTO emp06(empno, ename, dname)
    SELECT e.empno, e.ename, d.dname
    FROM emp e, dept d
    WHERE e.deptno = d.deptno;
    반응형

    댓글

Designed by Tistory.