오라클

INSERT문/UPDATE문/DELETE문 (DML)

웹개발자준비 2018. 8. 29. 16:22

insert

- DML(insert, update,delete)

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


//insert문 사용할 떄 여러가지 패턴

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

);


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

insert into tblMemo (seq, name, memo, regdate, etc, page)

        values (memoSeq.nextval, '홍길동', '메모입니다.', sysdate, '비고', 1);


cf) 반드시 컬럼리스트의 순서와 값리스트의 순서는 동일해야 한다.

insert into tblMemo (name, memo, regdate, etc, page, seq)

        values (memoSeq.nextval, '홍길동', '메모입니다.', sysdate, '비고', 1);


cf) insert 문을 작성할 때 원본 테이블의 컬럼리스트 순서와는 상관없다.

insert into tblMemo (name, memo, regdate, etc, page, seq)

        values ('홍길동', '메모입니다.', sysdate, '비고', 1, memoSeq.nextval);


cf) null 제약을 가진 컬럼값 입력하기(= 특정 컬럼에 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); 


cf)default 제약 사용하기

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

insert into tblMemo(seq,name,memo,regdate,page)

    values (memoSeq.nextval,'홍길동','메모입니다',sysdate,1); -생략을 사용해서 null 대입


2) null 상수를 직접 넣은 경우에는 default 제약이 동작하지 않는다.

insert into tblMemo(seq,name,memo,regdate,etc,page)

    values (memoSeq.nextval,'홍길동','메모입니다',sysdate,null,1); --null 상수를 사용해서 null 대입


3) default 제약 + not null 제약이 동시에 걸린 컬럼은 생략한 표현을 사용할 수 있다.

insert into tblMemo(seq,name,memo,etc,page)

    values (memoSeq.nextval,'홍길동','메모입니다','비고',1);


cf) 컬럼 리스트 생략

1) insert into tblMemo values (memoSeq.nextval, '홍길동', '메모입니다.', sysdate, '비고', 1);


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

insert into tblMemo values ('홍길동', '메모입니다.', sysdate, '비고', 1,memoSeq.nextval);




** insert + select

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

- 순수한 데이터만 복사

- 업무용 O + 개발자 테스트용 O


**create table + select

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

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

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


---------------------------------------------------------------------------------------------

update

- DML(insert, update,delete)

- 원하는 행의 원하는 데이터를 수정하는 명령어

- update 테이블명 set 컬럼명 = 수정할값 [컬럼명 = 수정할값] x N[where절]

- where 절 : 수정하고 싶은 레코드 지정


update name set gender ='f' where name='유재석';


ex)홍길동 : 부장 -> 이사[진급]

- 수정할 대상이 유일한 행(1개) -> 식별 -> PK -> num 컬럼 -> num 컬럼을 조건으로

update insa set jikwi = '이사' where name = '홍길동';


ex)다중행(그룹) 업데이트 

- 모든 기획부 직원의 급여 10%인상

update insa set basicpay = basicpay *1.1 where buseo ='기획부';


ex) 모든행 업데이트

update insa set basicpay = basicpay *1.1




----------------------------------------------------------------------------------------------------

delete

- DML(insert, update,delete)

- (행) 데이터를 삭제하는 명령어

- 일부 컬럼값만 삭제 불가능 > update(null)

- delete [from] 테이블명 [where절]


delete from insa where city ='서울';

delete from insa where city <>'경기';

delete from insa where num =1002;

delete from insa;