[SQL] UNPIVOT ORACLE/SQL 2012. 4. 3. 15:58

PIVOT의 경우 로우 단위의 내용을 컬럼 기준으로 하여 각기 통계를 내 놓았다면

UNPIVOT의 경우 컬럼 단위의 내용을 로우 기준으로 하여 나타 낼 수 있다.

샘플은 아래와 같다.

SELECT VALUE FROM
(
    SELECT 'A' AS A1, 'B' AS B2 FROM DUAL
)
UNPIVOT
(
VALUE FOR VALUE_TYPE IN (A1, B2)
)

인덱스에는 클러스터 인덱스와 넌 클러스터 인덱스 두가지로 나뉘어진다.

클러스터 인덱스의 경우 PK를 지정하면 자동적으로 생성이 되며, 인덱스의 열을 자동으로 정렬을 한다.

즉, 기본키를 지정함과 동시에 클러스터 인덱스가 생성이 되며 그 열을 기준으로 정렬이 된다.

특성상 범위 검색에는 좋으나 삽입, 삭제, 수정에 대해서는 속도가 느리다.

넌 클러스터 인덱스는 FK를 예를 들 수가 있는데 정렬 기능이 존재하지 않는다.

특성상 범위 검색에 약하며 삽입, 삭제, 수정에 대해서는 속도가 빠르다.

서로 반대되는 특징을 지니고 있다고 보면 된다.

생성 할 시 CREATE 옆에 CLUSTERED/NONCLUSTERED 를 붙여 생성 할 수 있다.

[SQL] SEQUENCE ORACLE/SQL 2012. 3. 29. 17:57

유일한 값을 생성한다. 증가 내용이나 이런건 물론 사용자가 지정 할 수가 있다.

PRIMARY KEY와 관련되는 경우 종종 사용하는 편인데.. 난 쓸 곳이 없어서 잘 안쓰는 듯..

다음은 예제이다.

CREATE SEQUENCE seq_no

START WITH 1

INCREMENT BY 1

MAXVALUE 1000

위와 같이 하면 기본적으로 생성이 된다. 시작과 증가 정도, 맥스 값을 지정한다.

NEXTVAL을 이용하면 하나씩 증가 하여 자동으로 입력이 가능하고 CURRVAL을 이용하면 현재 시퀀스의 값을 알 수가 있다.

또한 NOMAXVALUE나 NOMINVALUE를 지정하면 제한이 풀리며 CYCLE을 이용할 경우 최대 값을 넘기면 처음부터 순환하게 되어있다. NOCYCLE은 당연히 그 반대이다.

수정할 경우 ALTER를 이용하면 된다. 삭제시에는 DROP을 이용한다.