본문 바로가기

Oracle/Oracle

Oracle 6

 

전시간 정리

=any( 10,20,30)  //  =in

>=any(10,20,30) //최소값보다같거나 큰 자료

<=all() // 최대값보다 작거나 같은 자료

varchar(2), char(n), long , number, number(n), number(n,m),date , day(3) to second , year to month

 

p.303 insert

다른 테이블의 여러 값을 한테이블에 넣기

insert all into 테이블이름 values() into 테이블이름 values() select

update테이블이름 set 컬럼이름 = 값, 컬럼이름=값 where 조건

Q.해당 부서가 RESEARCH인 사원에 대해 급여를 7%인상 , hiredate를 오늘 날짜로 벼경

update copyemp set sal=sal+sal*0.07 ,hiredate=sysdate
from copyemp
where deptno=(select deptno from dept where dname='RESEARCH')

Q.모든 사원의 급여와 입사일을 이름이 King인 사원의 급여와 입사일과 같게 변경하세요...

update copyemp set (sal,hiredate)=(select sal,hiredate from copyemp where ename='King')

 

테이블안에 자료삭제

delete from copyemp where deptno=(select deptno from emp where ename='FORD')

Merge ( 합병)

merge into 테이블 별칭 using 대상테이블/뷰 on조인조건 when matched then update set컬럼명=값, 컬럼명=값 where not matched then insert(컬럼명,컬럼명) values(값,값)...

컬럼이 같으면 덮어씌워준다.

merge into copyemp using emp
on(copyemp.empno=emp.empno)   //만일 자료가 일치하면
when matched then
update set copyemp.ename=emp.ename, copyemp.job=emp.job, copyemp.mgr=emp.mgr, copyemp.hiredate=emp.hiredate,copyemp.sal=emp.sal,copyemp.comm=emp.comm, copyemp.deptno=emp.deptno       //(여기서 순서는 중요하지 않음.) 값을 덮어씌워주고
when not matched then insert values(emp.empno,emp.ename,emp.job,emp.mgr,emp.hiredate,emp.sal,emp.comm,emp.deptno)

//값을 추가해준다(여기는 값이 추가되는것이므로 순서가 중요하다.)

*추가설명:2007자료에 2012년 최신자료를 추가해주는데 만일 중복되는 값이 있으면 update를 이용해서 덮어씌워주고 중복값이 없으면 2012년 최신자료를 2007년 자료에 추가해주는 형식으로 진행되는것이 Merge이다.

트랜잭션이란 여러가지 작업을 하나의 작업으로 한꺼번에 모아 집합으로 처리해주는 것을 말한다.

ex)계좌입금,이체.. ->A은행에서 인출, B은행에 입금 (이경우는 하나의 집합으로 '계좌이체'라는 작업단위로 처리를 한다. 따라서 A,B둘다 처리된 후에 성공(->commit) 혹은 실패(->rollback-작업취소)로 처리하는 것을 트랜잭션이라 한다.)

방법: 명령어 처리후 취소하려면 rollback하고 완료하려면 commit이라 적으면 된다.

만일 1,2,3...순으로 처리하는데 취소해야할 경우 rollbak하면 1까지 다 취소된다. 이럴때 savepoint를 사용해서 지정된 부분만 취소/성공 시켜준다.

DDL,DCL을 처리하면 전에 처리한 명령어도 자동commit되니 주의하자.

ex)truncate 테이블명 (ddl임)  ->처리후자동커밋됨

쿼리문으로 작성된 delete는 commit되기전까지는 임시저장공간에 있다가 commit이나 rollback되는 순간 DB에 반영된다. 하지만 truncate은 처리후 바로 DB에 반영되므로 자동커밋된다. 따라서 속도는 truncate이 훨씬빠름!

 

not null

unique:null은 가능하지만 중복값은 안됨

primary key:not null+unique

foreign key

check : 특정범위값안에만 입력하게 허용하는것 (ex.점수는 0-100)

create table tt(

hakno varchar2(10) constraint pk_tt_hakno primary key

, name varchar(10)

);

->여기서 생성된 객체의 정보를 알고싶을떄 constraints를 참고하여 확인할 수 있다.

create table tb_stu(
num number(3)
constraint nn_tb_stu_num not null
,name varchar2(10)
,kor number(2))

 

alter table tb_stu modify name varchar2(10) constraint nn_tb_stu not null
->기존tb_stu테이블의 컬럼명의 속성을 변경해주고 constraints에 보여줄 pk의 형식에 이름을 지정해준다.

alter table tb_stu drop constraint nn_tb_stu 

/->지정해준 constraint의 이름을 지우고자 할때!

Primary Key ->기본키(not null+unique)

create table p1(
num varchar2(10) constraint p1_num_pk primary key
,name varchar2(10) constraint p1_name_nn not null
,juso varchar2(10)
)
/

Primary Key 여러개로 뭉쳐서 지정

create table p3
(
 iphak varchar2(3),
dept varchar2(3),
num varchar2(3),
name varchar2(10),
constraint pk_p3 primary key(iphak,dept,num))
/

 

외부키참조시

create table t2(empno number constraint t2_empno_pk primary key,
ename varchar2(10),
deptno number constraint t2_deptno_fk references t1(deptno))

외부키에서 참조하는 테이블은 외부키에 있는 값과 null값을 제외한 값은 입력할 수 없다.

또한 외부키값이 포함된 테이블은 외래키로 연결되어있는 상태에서 삭제나 수정이 불가하다.(연결이 되어있지 않는 자료는 삭제가 가능하다)

 

'Oracle > Oracle' 카테고리의 다른 글

Data Dictionary  (0) 2014.03.16
Oracle 7  (0) 2012.04.04
Oracle 5  (3) 2012.04.02
Oracle 4  (0) 2012.03.30
Oracle 3  (0) 2012.03.29