ALTIBASE HDB 5.3.3 기초강좌
MOVE 0 0 47,285

by Altibase MOVE LIMIT [2012.02.08]


MOVE 개념

  MOVE는 ALTIBASE HDB 에서만 제공되는 DML 이며, 소스 테이블에서 원하는 조건의 레코드를 찾아 타겟 테이블로 이동할 때 사용합니다.

  이동이라는 개념을 사용하기 때문에 소스 테이블에서 타겟 테이블로 이동된 데이터는 소스 테이블에서는 삭제가 되고, 타겟 테이블에만 존재하게 됩니다.

  • [그림] MOVE 개념
  • MOVE 개념

기본 MOVE 구문

 
MOVE INTO target_table_name
FROM  source_table_name
[WHERE conditions];
    
  • - INTO target_table_name : FROM절에 명시한 source 테이블로부터 테이블의 행을 이동시킬 target 테이블의 이름을 명시한다.
  • - FROM source_table_name : target 테이블로 행의 데이터를 이동시킬 source 테이블의 이름을 명시한다.
  • - [WHERE conditions] : 조건절을 작성하여 이동하고자 하는 행을 제한한다.

기본 MOVE 예제

  T1테이블에서 T2테이블로 전체 레코드를 이동하시오.

 
iSQL> SELECT COUNT(*) FROM t1;

COUNT                
-----------------------
5                    

1 row selected.

iSQL> SELECT COUNT(*) FROM t2;

COUNT                
-----------------------
0                    

1 row selected.

iSQL> MOVE INTO t2
      FROM t1;
    
5 rows moved.
    

  T1테이블에서 T2테이블로 c1=10 인 레코드만 이동하시오

 
iSQL> SELECT * FROM t1;

C1       C2         
-----------------------
5        KIM
10       LEE
15       HAN
20       PARK            
4 row selected.


iSQL> SELECT * FROM t2;

C1       C2                     
-----------------------
No row selected.


iSQL> MOVE INTO t2
      FROM t1
      WHERE c1=10 ;
    
1 rows moved.


iSQL> SELECT * FROM t1;

C1       C2         
-----------------------
5        KIM
15       HAN
20       PARK            

3 row selected.


iSQL> SELECT * FROM t2;
C1       C2                     
-----------------------
10       LEE

1 row selected.
    

특정 컬럼만 MOVE 구문

 
MOVE INTO target_table_name[(column_name, ...)] 
FROM source_table_name [(column_name, ...)] 
[WHERE conditions];
    
  • - MOVE INTO target_table_name[(column_name,..)] : INSERT..SELECT 구문과 유사하게 테이블 이름 뒤의 괄호 안에 column_list를 열거하는 방식으로 특정 칼럼으로만 데이터 이동이 가능하다.
  • - FROM source_table_name [(column_name, ...)] : 이동시킬 데이터의 특정 칼럼만 명시한다.
  • - 특정 칼럼 이름을 나열하여 데이터를 이동시킬 때 source 테이블과target 테이블의 칼럼 개수가 맞아야 하고, 데이터타입도 호환 가능해야 한다.

특정 컬럼만 MOVE 예제

  T1 테이블의 c1=4를 만족하는 데이터 중 c1과 c2 칼럼의 데이터만 T2 테이블로 이동하시오

 
iSQL> MOVE INTO t2(c1, c2)
      FROM t1(c1, c2)
      WHERE t1.c2 = 4;
    

LIMIT을 이용한 MOVE 구문

  MOVE 구문으로 이동하는 레코드의 수를 제한할 때, LIMIT 을 사용할 수 있습니다.

 
MOVE INTO target_table_name 
FROM source_table_name 
[WHERE conditions]
LIMIT [start_index ,] row_count;
    
  • - LIMIT [start_index ,] row_count; : start_index는 삭제하고자 하는 시작 행의 위치를 작성한다. 생략 시 첫 번째 행부터 삭제한다.
  • - row_count는 삭제하고자 하는 행의 개수를 지정한다.

LIMIT을 이용한 MOVE 예제

  CUSTOMER 테이블에서 고객번호가 7001011111111과 7912319999999 사이인 레코드 중 3건만 customer_new 테이블로 이동하시오.

 
iSQL> MOVE INTO customer_new 
      FROM customer 
      WHERE cno BETWEEN 7001011111111 AND 7912319999999 
      LIMIT 3;

3 rows moved.
    

MOVE 사용 시 주의사항

  • - WHERE 조건절을 생략했을 경우 테이블의 모든 행이 이동
  • - FROM절에서 테이블의 칼럼명을 생략할 경우, 전체 칼럼이 이동
  • - 칼럼의 이름을 명시할 경우 명시하지 않은 칼럼에는 NULL값이 들어감 명시되지 않은 칼럼이 NOT NULL 제약조건인 경우는 에러 발생
  • - Source 테이블과 Target 테이블은 동일 테이블일 수 없음
  • - 두 테이블간의 칼럼 개수가 같아야 하며, 데이터 타입도 호환 가능해야 함

- 강좌 URL : http://www.gurubee.net/lecture/2185

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입