Oracle
[days08] DML - 테이블에 데이터 추가, 복사, 수정 등 + 제약조건
다연
2020. 11. 9. 19:10
반응형
DML 데이터 조작어 : update, delete, insert + commit/rollback (트랜잭션 처리)
DML(데이터 조작언어)은 commit, rollback이 필수적이다.
1. 데이터 추가 (insert문)
insert into tbl_member(id, name, age, birth, regdate, tel)
values ('admin', '홍길동', 20, '98/01/01', sysdate, '01012345678');
desc tbl_member;
--테이블 구조를 확인하니 ID와 NAME만 NOT NULL이다.
--그럼 필수 입력 항목만 추가해보자
insert into tbl_member(id, name)
values ('dayeon', '다연');
--age, birth, tel 컬럼은 필수입력 사항이 아니고 null을 허용한다
insert into tbl_member(id, name, age, birth, tel)
values ('lee', '이길동', null, null,null);
commit;
2. 기존 테이블 열 구조와 데이터를 복사하여 새 테이블 생성하기
emp 테이블로부터 30번 부서원들만 새로운 테이블에 저장 + 생성 (tbl_emp30)
create table tbl_emp30 --empno, ename, job
as (
select *
from emp
where deptno = 30
);
--실제 emp와 구조가 똑같고
--deptno가 30인 정보만 있더라
select *
from tbl_emp30;
제약조건은 생성되지 않는다. (not null 제약조건은 생성) pk x
영업부의 사원정보만 뽑아 새 테이블 만들기
create table tbl_insa_sales(empno, ename, hiredate, sal)
as
select num, name, ibsadate, basicpay
from insa
where buseo = '영업부';
select *
from tbl_insa_sales;
3. 제약조건 확인
1) insa테이블의 제약 조건 확인
2) tbl_insa_sales 테이블의 제약조건 확인
select *
from user_constraints -- user은 scott
where table_name = 'INSA';
select *
from user_constraints
where table_name = 'TBL_INSA_SALES';
--NOT NULL 제약조건은 복사되고 그 외 제약조건(PK)은 복사X
4. 기존 테이블 열 구조만 복사하여 새 테이블 생성하기 (데이터는 복사 x)
create table tbl_emp20
as
select *
from emp
where deptno = 20 and 1=0; -- 1=0 false으로 where조건문 거짓됨 (무조건 where을 거짓으로 만들자)
select *
from tbl_emp20;
5. PK 제약조건 새로 설정(추가)
alter table 테이블명
add constraint 제약조건명 테이블명_컬럼명_PK primary key(컬럼명);
alter table TBL_EMP20
add constraint tbl_emp20_empno_pk primary key(empno);
6. 데이터 수정(update문)
update 테이블명
set 컬럼명 = 새값, 컬럼면 = 새값;
10 부서원들의 sal을 10%인상과 동시에 40번 부서로 이동
update emp
set sal=sal*1.1, deptno = 40
where deptno=10;
rollback;
emp 테이블에서 10번부서는 10%, 20번부서는 20% 그 외에는 30% 인상
update emp
set sal = case
when deptno=10 then sal*1.1
when deptno=20 then sal*1.2
else sal*1.3
end;
반응형