인덱스에 포함되지 않은 칼럼에 대한 옵션조건은 어차피 테이블에서 필터링

할수 밖에 없으므로 그럴 때는 OR조건을 사용해도 무방하다. OR조건을 활용한 옵션 조건 처리를 정리하면 

컬럼이면, 18c부터

(Page 213). 
(Page 213). 

1.인덱스 엑세스 조건으로 사용불가.

2.인덱스 필터 조건으로도 사용불가

3.테이블 필터 조건으로만 사용가능

4.단, 인덱스 구성 컬럼 중 하나 이상이 Not Null 컬럼이면, 18c부터 인덱스 필터 조건 으로 사용 가능

WINDOW FUNATION 에서 OVER랑 같이쓰는 구문

1.RANGE UNBOUNDED PRECEDING

2.ROWS BETWEEN 1 PRECEDING AND 1  FOLLOWING

3.RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING

 

 

일단 이기능은 SQL전문가가이드 2과목에서 다루고있어서 알게된 기능인데. 그룹별로 누적된 값을 구할수 있고

여러 옵션값들로 범위에 제한을 둘수도 있다.

 

범위지정옵션으로는 RANGE , ROWS 가 있는데

둘의차이는 RANGE는 ORDER로 정렬된 칼럼중 같은값을 가지는 로우가 있다면 

묶어서 한번에 연산하지만 ROWS는 각로우마다 계산하여 준다.

 

 

1.RANGE UNBOUNDED PRECEDING : 현재 행을 기준으로 해서 파티션 내의 첫번째 행까지 범위를 지정한다.

 

 

위세가지 쿼리는 같은 결과값을 반환한다.

두번째쿼리는 오라클에서 동일하게 해석하고

세번째쿼리는 디폴트값이 적용되어 RANGE UNBOUNDED PRECEDING 가 적용된것이다.

 

쿼리 결과값을 보면 MGR로 파티션을 나눈것을 볼수있는데. 3번째행 JAMES부터 값들이 누적된것을 

볼수있다. WARDM,MARTIN을 보면 누적이 안되고 3450이 출력되었는데 이것은 같은

ORDER로 취급되어 같이 더해버려서 같은값이 출력된것이다. 

 

 

ORDER를 ENAME으로 바꿔서 쿼리를 작성했을때 정상적으로 누계가 되는것을 확인할수있다.

 

 

2.ROWS BETWEEN 1 PRECEDING AND 1  FOLLOWING : 현재 행을 기준으로 파티션내 앞뒤 한건씩을 범위로 지정

쿼리를 보면 MGR로 칼럼을 나누었다. 결과값을 보면 알수있듯이 

첫번째행(앞행) 마지막행(뒷행) 없어서 앞행or뒷행 만 포함되어 나누기 2를 하여 나온 결과값이다. 

 

 

위에것에서 비트윈 값을 바꾸어서 하면 어떻게될까?

동일하게 적용되지만 레코드를 다르게 가지고와 계산값이 달라진다.

TURNER 을 보면 앞행3(2까지밖에없음) 뒷행2인데  전체 평균값이 나온다.

MARTIN도 마찬가지다

 

3.RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING: 같은 파티션내 현재행부터 마지막행까지

 

 

몇가지 포인트를 정리하자면 

 

디폴트값 : RANGE UNBOUNDED PRECEDING 

 

시작어: RANGE or ROWS 

 

*BETWEEN에서 사용하는 구문 ( BETWEEN 을 지정하면 Start AND End 까지 범위지정 )

: CURRENT ROW : 현재 진행로우

: ROW PRECEDING : ROW에 입력된 개수 전 레코드 까지(BETWEEN 앞부분)

: ROW FOLLOWING : ROW에 입력된 개수 후 레코드 까지(BETWEEN 뒷부분)

 

테이블생성

CREATE TABLE ST_AS_REQUEST (

 [CONSULT_NO] [char](12) NOT NULL,
 [USER_PASSWORD] [char](4)  NULL,
 [CUST_SEQ] [char](12) NULL,
 [ITEM_CLASS2] [varchar](50) NULL,
    
      CONSTRAINT ST_AS_REQUEST_PK PRIMARY KEY (CONSULT_NO),
       CONSTRAINT ST_AS_REQUEST_FK FOREIGN KEY (CUST_SEQ) REFERENCES TableName(ColName)
); 

 

 

칼럼추가 

ALTER TABLE ST_MAGAZINE ADD TAG_NAME VARCHAR(50) NOT NULL DEFAULT 'N'

 

ALTER TABLE TCMOnBizConsultInfo ADD consultRequestTime VARCHAR(20) 
ALTER TABLE TCMOnBizConsultInfo ADD consultRequestTime VARCHAR(20) 

테이블을 생성하는 명령어이다. 

 

신텍스

create table tableName(
            Col1     Type   primary key  comment 'PK Key'
           ,Col2    Type   
           ,Col3     Type   
           ,PK > 2  primary KEY(Col1,Col2,Col3)
           ,OptionName1 optionSet1
            OptionName2 optionSet2
           )

 

아래는 실제 생성명령어이다.

create table MASTER_FILE 
( 
    MASTER_ID       int default 0 not null comment '상품ID', 
    FILE_CODE    int       not null COMMENT '파일유형', 
    FILE_ID int  not null comment '상품파일ID', 
    FILE_NAME    varchar(255)     null comment '파일명', 
    FILE_ORG_NAME    varchar(255)  null comment '파일명', 
    CREATED_DATE  varchar(14)   null comment '등록일', 
    primary KEY (MASTER_ID,FILE_CODE,FILE_ID),
    constraint FK_MASTER_TO_MASTER_FILE
     foreign key (MASTER_ID) references MASTER (MASTER_ID) 
            on delete cascade 
) 
    comment '상품상세파일'; 

 

옵션별 기능

constraint  제약조건명을 설정하여 주는것이다.
이옵션을 사용하지 않으면 디폴트값으로 들어가는데 
그러면 가독성이 떨어지게 되고 제약조건 관리가 잘안될수
있다. 쓰는형식은 프로젝트 마다 정말 다다르다
테이블명_키값 , 외부테이블_생성테이블 
이렇게 하는 경우도 있다.

foreign key (ColName) referenences (MASTER) 해당구문은 참조하고있는 테이블(MASTER)의 외부키로 
엮어주는 구문이다. 
on delete cascade  이구문은 부모테이블을 참조하고있는 자식테이블
MASTER_FILE에 있는 데이터들이 부모테이블을 참조하고 
있고 그참조데이터가 지워지면 자식들도 함께 지울수있게
옵션값을 주는것이다. 이렇게 하면 데이터의 무결성을 지킬수 있을것이다.

 

Merge문이란?

 

insert , update , delete 를 한번에 처리 가능하므로

 

대용량의 데이터가 일괄처리 되어야할 때 아주 유용하게 사용할 수 있다.

 

SQL문장을 보면 더욱 쉽게 이해 될 수 있으므로 이하 설명은 생략한다.

 

MERGE INTO TABLE A       --DATA Manipulation To TABLE
USING DUAL              --Condition ON (A.EMP_NO = '값')          
WHEN MATCHED THEN           
	UPDATE SET 
    		,   
            ,  
            ,   
            ,
 WHEN NOT MATCHED THEN      
 	INSERT (      
    			,       
                ,       
                ,       
                ,       
                ,    
                );

USING문에서는 다른 테이블과 Join 을 할 수 있으며

조건을 추가할 수 있다.

 

 

Insert , Delete , Update는 아주 중요한 일이므로

테이블간의 Trigger 생성하여 활성화 함으로써 

데이터의 움직임을 감시 및 추적 할 것을 추천한다.

+ Recent posts