◆ INSERT


◇ 단일행 입력

SQL> insert into table [(column [, column, ...]) ]
   values (value [, value, ...]);


◇ NULL 입력
널을 입력하기 위한 방법으로는 묵시적 방법과 명시적 방법이 있다.
  - 묵시적 방법
SQL> insert into professor (profno, name, deptno)
   values (9910, '이순신', 201);
묵시적 방법은 위와 같이 insert into절에서 해당 컬럼의 이름과 값을 생략하면 된다.

  - 명시적 방법
SQL> insert into professor
   values (9910, '이순신', null, null, null, null, null, 201);
명시적 방법은 위와 같이 values절의 컬럼값에 null을 입력하면 된다.


◇ 날짜 데이터 입력
컬럼에 날짜를 입력하려면 해당 시스템에서 요구하는 기본 날짜 형식에 따른 날짜 데이터를 입력해야 한다. 필요에 따라 to_date 함수를 사용하여 사용자가 원하는 형식으로 입력 가능하다.
SQL> insert into professor (profno, name, hiredate)
   values (9910, '이순신', to_date('2005-01-01','YYYY-MM-DD:HH24:MI:SS));


◇ sysdate함수를 이용한 현재 날짜 입력
게시판 등에서 사용자가 글을 등록한 시점의 날짜 데이터를 자동으로 입력해야 할 경우 사용함.
SQL> insert into gesipan
   values (1, 'AAA', sysdate);


◇ 다중행 입력(ITAS)
서브쿼리를 이용하여 자신이나 다른 테이블의 데이터를 복사하여 여러 행을 동시에 입력할 수 있다.
SQL> insert into table
   subquery;
SQL> insert into emp2
   select * from emp;
위 쿼리는 기존에 emp2라는 테이블이 존재하는 상태에서 emp테이블의 모든 데이터를 emp2 테이블 안에 삽입한다.



◆ UPDATE
테이블에 저장된 데이터를 수정하기 위한 데이터 조작어.
SQL> update table
   set column = value [, column = value, ...]
   [where condition];
where절을 생략하면 테이블의 모든 행을 수정함.


◇ 서브쿼리를 이용한 데이터 수정
SQL> update student
   set (grade, deptno) = (select grade, deptno
                                   from student
                                   where studno = 10103)
   where studno = 10201;
위 쿼리는 학번이 10103인 학생의 학년과 학과번호를 검색하여 학번이 10201인 학생의 학년과 학과번호를 같도록 수정한다.



◆ DELETE
SQL> delete from table
   [where condition];
where절을 생략하면 테이블의 모든 행을 삭제함.


◇ 서브쿼리를 이용한 데이터 삭제
delete from student
   where deptno = (select deptno
                           from department
                           where dname = '컴퓨터공학과');
위 쿼리는 부서테이블에서 컴퓨터공학과의 부서번호를 검색하여 학생 테이블에서 컴퓨터공학과의 부서번호와 일치하는 데이터를 모두 삭제한다.



◆ MERGE
구조가 같은 두개의 테이블을 비교하여 하나의 테이블로 합치기 위한 명령어.
SQL> merge into [결과테이블] [alias]
   using [table | view | subquery] alias
   on [조인조건]
   when matched then
      update set ...
   when not matched then
      insert into ...
      values ...;

Merge의 단점은 처음엔 merge작업속도가 빠르지만, 계속 날이 가면 갈수록 merge 작업속도가 느려짐. 즉 부하가 많이 걸린다. 이때는 결과 테이블의 인덱스 전략을 잘 수립해야 한다.



◆ Sequence
시퀀스는 기본키 값을 자동으로 생성하기 위하여 일련번호를 생성하기 위한 객체이다. 시퀀스는 기본키 값을 사전에 결정하기 어려운 응용분야에서 유용하게 사용될 수 있다.
예를 들어 웹게시판에 글이 등록되는 순서대로 번호를 하나씩 할당하는 등의 작업에 사용하면 아주 유용하다.

시퀀스 값은 오라클 내부 루틴에 의해 자동으로 번호가 생성된다.

시퀀스 값은 한번 발행되면 취소가 안된다.

◇ 시퀀스 생성
SQL> create sequence 시퀀스명
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue]
[cycle | nocycle]
[cache n | nocache]
increment by n : 시퀀스 번호의 증가 값으로 기본값은 1
start with n : 시퀀스 시작번호로 기본값은 1
maxvalue n | nomaxvalue : 생성 가능한 시퀀스 최대값
minvalue n | nominvalue : cycle일 경우 새로 시작되는 값
cycle | nocycle : 시퀀스 번호를 순환하여 사용할 것인지 지정
cache n | nocache : 시퀀스 생성속도를 개선하기 위해 캐싱여부 지정

위에서 시퀀스의 캐시옵션은 잘 생각해보고 써야 한다. 시퀀스넘버를 캐싱하면 그 넘버를 메모리에 놓는데, 그사이 서버가 죽었다가 살아나면 거기에 넣어놓았던 값들은 사라진다.
후에 시퀀스넘버를 할당받으면 사이에 캐싱되었던 값들과 할당받은 넘버값 사이에 공백이 생길 우려가 있다.
단, rac는 다중 인스턴스이므로 인스턴스 모두가 죽을 위험도가 낮으므로 시퀀스캐싱을 권한다.


◇ CURRVAL, NEXTVAL
시퀀스에서 생성된 현재 번호를 확인하거나, 다음 번호를 생성하는 함수
SQL> select s_seq.CURRVAL from dual;

SQL> insert into student(studno, name, deptno)
   values (s_seq.NEXTVAL, '홍길동', 101);


◇ 시퀀스 삭제
SQL> drop sequence 시퀀스명;

'오라클 > SQL' 카테고리의 다른 글

[SQL] DDL(Data Definition Language)  (0) 2010.08.19
[SQL] TCL(Transaction Control Language)  (0) 2010.08.19
[SQL] SQL의 종류  (0) 2010.08.19
[SQL] Sub Query  (0) 2010.08.18
[SQL] ANSI Join  (0) 2010.08.18
Posted by 겨울섬
,