[Oracle] 오라클 #12, insert 삽입구문(특이한 insert 구문)

Insert문

- DML(insert, update, delete)

- insert into 테이블명(컬럼리스트) values(값리스트);


create table tblMemo(

    seq number primary key,

    name varchar2(30) not null,

    memo varchar2(1000) not null,

    regdate date default sysdate not null,

    etc varchar2(500) default '비고없음' null,

    page number null

);

create sequence memoSeq; --메모테이블의 시퀀스 객체 생성한다.


select * from tblMemo;


insert 문 여러가지 사용 패턴


1. 표준 : 원본테이블에 정의된 컬럼 순서대로 컬럼리스트와 값리스트를 표기하는 방법.

insert into tblMemo(seq,name,memo,regdate,etc,page) values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',sysdate,'비고',1);


2. null 제약을 가진 커럼값 입력하기(=특정컬럼에 null을 대입하기)

insert into tblMemo(seq,name,memo,regdate,etc) values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',sysdate,'비고');   --> null을 넣고싶은 컬럼을 아예 제거

    

insert into tblMemo(seq,name,memo,regdate,etc,page) values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',sysdate,'비고',null);  --> null상수 대입하기


3. default 제약 사용하기

--default 제약이 걸린 컬럼에 null을 넣었더니 default 값이 대신 대입된다.

insert into tblMemo(seq,name,memo,regdate,page) values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',sysdate,1);  -->  생략을 사용해서 null대입


insert into tblMemo(seq,name,memo,etc,regdate,page) values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',null,sysdate,1); --> 직접 null 대입 : default동작 X


4. 생략을 통해서 null 대입(디폴트 + 낫널 = 생략에 의한 표현을 사용할 수 있다.)

insert into tblMemo(seq,name,memo,etc,page) values(memoSeq.nextval,'홍길동','집에가고싶다....우우우','비고',1);


5. 직접 null대입 : not null 조건때문에 안됨

insert into tblMemo(seq,name,memo,regdate,etc,page) values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',null,'비고',1);

    


6. 컬럼리스트 생략(선언할 당시의 컬럼 순서를 참조한다. -> 반드시 값 리스트가 원본 테이블의 컬럼순서와 동일해야한다.)

insert into tblMemo

    values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',sysdate,'비고',1);


insert into tblMemo

    values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',default,'비고',1);

    

insert into tblMemo

    values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',default,null,1);


insert into tblMemo

    values(memoSeq.nextval,'홍길동','집에가고싶다....우우우',default,default,null);

    

---------------------------------------일반적인 insert ----------------------------------------------


-----------------------------------일반적이지 않은 insert 구문 -------------------------------------------


create table tblMemoCopy(

    seq number primary key,

    name varchar2(30) not null,

    memo varchar2(1000) not null,

    regdate date default sysdate not null,

    etc varchar2(500) default '비고없음' null,

    page number null

);


1. tblMemo -> (복사) -> tblMemoCopy

1) insert into tblMemoCopy

    select * from tblMemo; --> insert + 서브쿼리


2) insert into tblMemoCopy

    select * from tblMemo where mod(seq,2)=0;


--영업부 직원만의 테이블

insert into 영업부

    select * from tblinsa where buseo='영업부';


create table 영업부 --(***************)

as     

select * from tblinsa where buseo='영업부';     ->> 이런구문이 허용이 된다는 것. 근데 좋은 사용법이 아님.


select * from 영업부;


--insert + select

-- : 테이블 별도제작(제약사항추가)

-- : 순수한 데이터만 복사

-- : 업무용 O, 개발자 테스트용 O


--create table + select

-- : 테이블 자동생성 + 데이터 복사

-- : 원본테이블의 제약사항은 복사가 안됨.(컬럼명 + 자료형)

-- : 업무용 X, 개발자 테스트용 O









댓글

Designed by JB FACTORY