다연이네

[days08] DML - 테이블에 데이터 추가, 복사, 수정 등 + 제약조건 본문

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;

 

반응형
Comments