2016. 12. 6. 02:09

Character Set

. Character set :

한글만 입력한다면  KO16MSWIN949 로 설정

한글과 다른 언어를 혼용 해서 사용 한다면 AL32UTF8 설정 하는 것을 권고. 해당 셋이 정렬도 완벽하다.

그리고 꼭 해야 하는 한글 입력 시 ORA-01756: quoted string not properly terminated 발생 하면 클라이언트의 NS_LANG 설정이

잘 먹히지 않은 것.

. .bash_profile 적용 하기.  --> 이 부분 이 잘 안 된 것 같음.

 

 

Database Configuration Assistant - Create Database 
Initialization Parameters 
- step 10 of 14 
DATABASE 
Database Operation 
Creation Mode 
Database Template 
Database Identification 
Management Options 
Database Credentials 
Netuork Configuration 
Storage Locations 
Database Options 
InitializMion Parameters 
Creation Options 
Pre Requisite Checks 
Sum m arg 
Progress Page 
Character Sets 
o 
Use the default 
The default character set for this database IS based on the language setting of this operating 
system: WE8MSWlN1252 
o 
Use Unicode (AL32UTF8) 
Setting character set to Unicode (AL 321JTF8) enables you to store multiple language groups 
Choose from the list of character sets 
Database Character Set 
National Character Set 
Default Language 
Default Territoru 
@ Shourecommended character sets only 
AL161JTF16 - Unicode UT F-16 Universal character set 
American 
United States 
All Initialization Parameters 
< Back 
Next > 
Cancel

SQL> col value$ format a40

SQL> set line 150

SQL> col name format a25

SQL> col value$ format a40

SQL> col comment$ format a40

SQL> select * from sys.props$ where name like '%CHARACTER%';

 

NAME                          VALUE$                                   COMMENT$

------------------------- ---------------------------------------- ----------------------------------------

NLS_NCHAR_CHARACTERSET          AL16UTF16                                   NCHAR Character set

NLS_CHARACTERSET          KO16MSWIN949                                   Character set

NLS_NUMERIC_CHARACTERS          .,                                           Numeric characters

 

SQL> select * from sys.props$ where name like 'NLS_%';

 

NAME                          VALUE$                                   COMMENT$

------------------------- ---------------------------------------- ----------------------------------------

NLS_RDBMS_VERSION          12.1.0.2.0                                   RDBMS version for NLS parameters

NLS_NCHAR_CHARACTERSET          AL16UTF16                                   NCHAR Character set

NLS_NCHAR_CONV_EXCP          FALSE                                    NLS conversion exception

NLS_LENGTH_SEMANTICS          BYTE                                           NLS length semantics

NLS_COMP                  BINARY                                   NLS comparison

NLS_DUAL_CURRENCY          $                                           Dual currency symbol

NLS_TIMESTAMP_TZ_FORMAT   DD-MON-RR HH.MI.SSXFF AM TZR                   Timestamp with timezone format

NLS_TIME_TZ_FORMAT          HH.MI.SSXFF AM TZR                           Time with timezone format

NLS_TIMESTAMP_FORMAT          DD-MON-RR HH.MI.SSXFF AM                   Time stamp format

NLS_TIME_FORMAT           HH.MI.SSXFF AM                           Time format

 

 

NAME                          VALUE$                                   COMMENT$

------------------------- ---------------------------------------- ----------------------------------------

NLS_DATE_LANGUAGE          AMERICAN                                   Date language

NLS_DATE_FORMAT           DD-MON-RR                                   Date format

NLS_CALENDAR                  GREGORIAN                                   Calendar system

NLS_CHARACTERSET          KO16MSWIN949                                   Character set

NLS_NUMERIC_CHARACTERS          .,                                           Numeric characters

NLS_ISO_CURRENCY          AMERICA                                   ISO currency

NLS_CURRENCY                  $                                           Local currency

NLS_TERRITORY                  AMERICA                                   Territory

NLS_LANGUAGE                  AMERICAN                                   Language

 

20 rows selected.

 

 

SQL> set pagesize 30

SQL> col parameter for a30

SQL> col value for a30

SQL>

 

 

SQL> select * from v$nls_parameters;

 

PARAMETER                       VALUE                                  CON_ID

------------------------------ ------------------------------ ----------

NLS_LANGUAGE                       AMERICAN                                0

NLS_TERRITORY                       AMERICA                                       0

NLS_CURRENCY                       $                                       0

NLS_ISO_CURRENCY               AMERICA                                       0

NLS_NUMERIC_CHARACTERS               .,                                       0

NLS_CALENDAR                       GREGORIAN                               0

NLS_DATE_FORMAT                DD-MON-RR                               0

NLS_DATE_LANGUAGE               AMERICAN                                0

NLS_CHARACTERSET               KO16MSWIN949                               0

NLS_SORT                       BINARY                                       0

NLS_TIME_FORMAT                HH.MI.SSXFF AM                               0

NLS_TIMESTAMP_FORMAT               DD-MON-RR HH.MI.SSXFF AM                0

NLS_TIME_TZ_FORMAT               HH.MI.SSXFF AM TZR                       0

NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR               0

NLS_DUAL_CURRENCY               $                                       0

NLS_NCHAR_CHARACTERSET               AL16UTF16                               0

NLS_COMP                       BINARY                                       0

NLS_LENGTH_SEMANTICS               BYTE                                       0

NLS_NCHAR_CONV_EXCP               FALSE                                       0

 

19 rows selected.

 

SQL> select  '보라' d from dual;

ERROR:

ORA-01756: quoted string not properly terminated

 

 

 

 

export NLS_LANG=American_America.KO16MSWIN949

export LANG=C

export EDITOR=vi

'Oracle' 카테고리의 다른 글

오라클 vs MS SQL 함수 비교.  (0) 2016.12.06
아키텍처 기반 튜닝 원리- SQL 전문가 가이드  (0) 2015.09.19
SQL 기본 및 활용  (0) 2015.09.19
2016. 12. 6. 02:04

오라클 vs MS SQL 함수 비교.

오라클 vs MS SQL 함수 비교

수식/수치 연산 함수

다음은 Oracle에서 지원하는 수식/수치 연산 함수와 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명

Oracle

Microsoft SQL Server

절대 값

ABS

ABS

아크 코사인

ACOS

ACOS

아크 사인

ASIN

ASIN

n의 아크 탄젠트

ATAN

ATAN

n m의 아크 탄젠트

ATAN2

ATN2

최소 정수 >=

CEIL

CEILING

코사인

COS

COS

쌍곡선 코사인

COSH

COT

지수 값

EXP

EXP

최대 정수 <=

FLOOR

FLOOR

자연 로그

LN

LOG

밑이 n인 로그

LOG(N)

해당 없음

상용 로그

LOG(10)

LOG10

나머지 연산자

MOD

USE MODULO (%) OPERATOR

거듭제곱

POWER

POWER

난수

해당 없음

RAND

반올림

ROUND

ROUND

숫자 부호 표시

SIGN

SIGN

사인

SIN

SIN

쌍곡선 사인

SINH

해당 없음

제곱근

SQRT

SQRT

탄젠트

TAN

TAN

쌍곡선 탄젠트

TANH

해당 없음

잘라내기

TRUNC

해당 없음

목록의 최대값

GREATEST

해당 없음

목록의 최소값

LEAST

해당 없음

NULL일 때 숫자 변환

NVL

ISNULL

문자열 함수

다음은 Oracle에서 지원하는 문자열 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명

Oracle

Microsoft SQL Server

문자를 ASCII로 변환

ASCII

ASCII

문자열 연결

CONCAT

( + )

ASCII를 문자로 변환

CHR

CHAR

문자열의 문자 시작 위치 반환(왼쪽부터)

INSTR

CHARINDEX

소문자로 변환

LOWER

LOWER

대문자로 변환

UPPER

UPPER

문자열의 왼쪽 채우기

LPAD

해당 없음

선행 공백 제거

LTRIM

LTRIM

후행 공백 제거

RTRIM

RTRIM

문자열의 패턴 시작 위치

INSTR

PATINDEX

문자열을 여러 번 반복

RPAD

REPLICATE

문자열의 발음 기호

SOUNDEX

SOUNDEX

반복되는 공백 문자열

RPAD

SPACE

수치 데이터에서 변환된 문자 데이터

TO_CHAR

STR

부분 문자열

SUBSTR

SUBSTRING

문자 바꾸기

REPLACE

STUFF

문자열에서 각 단어의 첫 문자를 대문자로 만들기

INITCAP

해당 없음

문자열 번역

TRANSLATE

해당 없음

문자열 길이

LENGTH

DATELENGTH 또는 LEN

목록에서 가장 큰 문자열

GREATEST

해당 없음

목록에서 가장 작은 문자열

LEAST

해당 없음

NULL일 때 문자열 변환

NVL

ISNULL

날짜 함수

다음은 Oracle에서 지원하는 날짜 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명

Oracle

Microsoft SQL Server

날짜 추가

(날짜 열의 +/- ) 또는 ADD_MONTHS

DATEADD

날짜 차이

(날짜 열의 +/- ) 또는 MONTHS_BETWEEN

DATEDIFF

현재 날짜와 시간

SYSDATE

GETDATE()

달의 마지막 날

LAST_DAY

해당 없음

표준 시간대 변환

NEW_TIME

해당 없음

다음 날의 요일

NEXT_DAY

해당 없음

날짜의 문자열 표시

TO_CHAR

DATENAME

날짜의 정수 표시

TO_NUMBER(TO_CHAR))

DATEPART

날짜 반올림

ROUND

CONVERT

날짜 잘라내기

TRUNC

CONVERT

문자열을 날짜로

TO_DATE

CONVERT

NULL일 때 날짜 변환

NVL

ISNULL

변환 함수

다음은 Oracle에서 지원하는 변환 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명

Oracle

Microsoft SQL Server

숫자를 문자로

TO_CHAR

CONVERT

문자를 숫자로

TO_NUMBER

CONVERT

날짜를 문자로

TO_CHAR

CONVERT

문자를 날짜로

TO_DATE

CONVERT

16진수를 이진수로

HEX_TO_RAW

CONVERT

이진수를 16진수로

RAW_TO_HEX

CONVERT

기타 행 수준 함수

다음은 Oracle에서 지원하는 기타 행 수준 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명

Oracle

Microsoft SQL Server

NULL이 아닌 첫째 식 반환

DECODE

COALESCE

현재 시퀀스 값

CURRVAL

해당 없음

다음 시퀀스 값

NEXTVAL

해당 없음

1 = 2일 때 NULL 반환

DECODE

NULLIF

사용자의 로그인 ID 번호

UID

SUSER_ID

사용자의 로그인 이름

USER

SUSER_NAME

사용자의 데이터베이스 ID 번호

UID

USER_ID

사용자의 데이터베이스 이름

USER

USER_NAME

현재 사용자

CURRENT_USER

CURRENT_USER

사용자 환경(감사 추적)

USERENV

해당 없음

CONNECT BY 절의 수준

LEVEL

해당 없음

집계 함수

다음은 Oracle에서 지원하는 집계 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명

Oracle

Microsoft SQL Server

평균

AVG

AVG

개수

COUNT

COUNT

최대값

MAX

MAX

최소값

MIN

MIN

표준 편차

STDDEV

STDEV 또는 STDEVP

합계

SUM

SUM

분산

VARIANCE

VAR 또는 VARP


'Oracle' 카테고리의 다른 글

Character Set  (0) 2016.12.06
아키텍처 기반 튜닝 원리- SQL 전문가 가이드  (0) 2015.09.19
SQL 기본 및 활용  (0) 2015.09.19
2015. 9. 19. 23:45

아키텍처 기반 튜닝 원리- SQL 전문가 가이드

출처 : SQL 전문가 가이드  요약 정리 


데이터베이스 성능 튜닝의 3대 핵심 요소 

  1. SQL 부하 해소 
  2. 데이터 베이스 Call 최소화 
  3. I/O 효율화 
--> 성능 요소를 해결 하는데 90% 이상은 개발팀 역량에 달렸다. 
어플리케이션으로 부터 발생하는 일량을 근본 적으로 줄여야 한다. 

정의

데이터베이스 : 물리적인 디스크에 저장된 데이터집합(데이터파일, 리두로그파일, 컨트롤파일)
인스턴스 : 공유메모리(SGA)와 이를 엑세스하는 프로세스 집합

★하나의 인스턴스는 하나의 데이터베이스를 엑세스(Single), 여러개의 인스턴스는 하나의 데이터베이스를 엑세스(RAC)

나.SQL Server 아키텍처
정의

하나의 인스턴스당 최고 32,767개의 데이터베이스를 정의해서 사용
기본적으로 시스템데이터베이스가 만들어지면, 사용자데이터베이스를 추가하여 생성하는 구조

시스템데이터베이스 : mster, model, msdb, tempdb 등
사용자데이터베이스 : 데이터파일(mdf), 트랜잭션로그파일(ldf), 보조데이터파일(ndf)


백그라운드프로세스
ORACLE SQL Server설명 
SMON(System Monitor)Database cleanup / Shrinking Thread장애가 발생한 시스템을 재기동할 때 인스턴스 복구를 수행하고, 임시 세그먼트와 익스텐트를 모니터링한다
PMON(Process Minitor)Open Data Services(OPS) 이상이 생긴 프로세스가 사용하던 리소스를 복구한다
DBWn(Database Writers) Lazywriter Thread버퍼 캐시에 있는 더티 버퍼를 데이터 파일에 기록
LGWR (Log Writer)Log writer Thread로그 버퍼 엔트리를 redo 로그 파일에 기록한다
ARCn(Archiver)N/A꽉찬 리두로그가 덮어 쓰여지기 전에 archive로그 디렉토리로 백업한다
CKPT(Checkpoint) Database Checkpoint Threadcheckpoint 프로시스는 이전의 checkpoint 가 일어났던 마지막 시점 이후의 데이터베이스 변경 사항을 데이터파일에 기록하도록 트리거링하고, 기록이 완료되면 현재 어디까지 기록했는지를 컨트롤 파일과 데이터 파일 헤더에 기록한다. 좀더 자세히 설명하면 wirte Ahead Logging 방식을 사용하는 DBMS는 리두로그에 기록해 둔 버퍼 블록에 대한 변경사항 중 현재 어디까지를 데이터 파일에 기록했는지 체크 포인트정보를 관리해야 한다. 이는 버퍼캐시와 데이터 파일이 동기화된 시점을 가리키며, 장애가 발생하면 마지막 체크포인트 이후 로그 데이터만 디스크에 기록함으로써 인스턴스를 복구할수 있도록 하는 용도로 사용된다.이 정보를 갱신하는 주기가 길수록 장애 발생시 인스턴스 복구 시간도길어진다.
RECO(Recoverer)Distributed Transaction Coordinator(DTC)분산 트랜잭션 과정에 발생한 문제를 해결한다

파일구조

가.데이터파일

1) 블록(=페이지)

  • 대부분의 DBMS에서는 I/O 블록단위로 이루어짐
  • 데이터를 읽고 쓸때의 논리적인 단위
  • SQL 성능을 좌우하는 가장 중요한 성능지표
  • 옵티마이저의 판단에 가장 큰 영향을 미치는 요소
항목오라클SQL Server
명칭블록페이지
블록크기2KB,4KB, 8KB, 16KB, 32KB, 64KB8KB

2)익스텐트(Extent)

  • 테이블스페이스로부터 공간을 할당하는 단위
항목오라클SQL Server
크기다양한크기의 익스텐트항상 64KB(페이지크기가 8KB이므로)
오브젝트단일오브젝트사용2개이상의오브젝트
  • 균일익스텐트(Uniform) : 64KB 이상의 공간을 필요로 하는 테이블이나 인덱스를 위해 사용됨
    8개 페이지 단위로 할당된 익스텐트를 단일 오브젝트가 모두 사용
  • 혼합익스텐트(Mixed) : 한 익스텐트에 할당된 8페이지를 여러 오브젝트가 나누어 사용
    모든 테이블이 처음에는 혼합 익스텐트로 시작하지만 64KB가 넘으면서 두번째부터는 균일익스텐트 사용

3)세그먼트(Segment)

  • 테이블, 인덱스,Undo 처럼 저장공간을 필요로하는 데이터베이스 오브젝트 (한개 이상의 익스테트 사용)
  • 파티션은 오브젝트와 세그먼트가 1:M (파티션을 만들면 내부적으로 여러개의 세그먼트가 만들어짐)
  • 한 세그먼트에 할당된 엑스텐트가 여러 데이터파일에 흩어져 저장됨(디스크 경합감소.I/O 분산효과)
오라클SQL Server
세그먼트힙구조 또는 인덱스구조 오브젝트

4) 테이블스페이스(Tablespace) 

  • 세그먼트를 담는 콘테이너로서 여러개의 데이터파일로 구성됨
  • 사용자는 데이터파일을 직접 선택할수 없으므로 실제 파일을 선택하고 익스텐트를 할당하는것은 DBMS의 몫
오라클SQL Server
테이블스페이스파일그룹

'Oracle' 카테고리의 다른 글

Character Set  (0) 2016.12.06
오라클 vs MS SQL 함수 비교.  (0) 2016.12.06
SQL 기본 및 활용  (0) 2015.09.19
2015. 9. 19. 23:24

SQL 기본 및 활용

출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=26743834&

그루비 지식 창고

수정 없이 정리 목적으로 필요한 부분가 가져왔습니다. 



DUAL 테이블 특징

 - 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.
- SELECT ~ FROM ~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.
- DUMMY라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다.


날짜형 함수
  날짜형 함수는 DATE 타입의 값을 연산하는 함수이다.
  Oracle의 TO_NUMBER(TO_CHAR( )) 함수의 경우 변환형 함수로 구분할 수도 있으나 SQL Server의 YEAR, MONTH,DAY 함수와 매핑하기 위하여 날짜형 함수에서 설명한다. 


변환함수
변환형 함수는 특정 데이터 타입을 다양한 형식으로 출력하고 싶을 경우에 사용되는 함수이다.  

암시적 데이터 유형 변환의 경우 성능 저하가 발생할 수 있으며, 자동적으로 데이터베이스가 알아서 계산하지 않는 경우가 있어 에러를 발생할 수 있으므로 명시적인 데이터 유형 변환 방법을 사용하는 것이 바람직하다. 

명시적 데이터 유형 변환에 사용되는 대표적인 변환형 함수는 다음과 같다. 


CASE 표현
IF-THEN-ELSE 논리와 유사한 방식으로 표현식을 작성해서 SQL의 비교 연산 기능을 보완하는 역할을 한다.  

 


집계 함수와 NULL

  리포트의 빈칸을 NULL이 아닌 ZERO로 표현하기 위해 NVL(Oracle)/ISNULL(SQL Server) 함수를 사용하는 경우가 많은데, 다중 행 함수를 사용하는 경우는 오히려 불필요한 부하가 발생하므로 굳이 NVL 함수를 다중 행 함수 안에 사용할 필요가 없다.
다중 행 함수는 입력 값으로 전체 건수가 NULL 값인 경우만 함수의 결과가 NULL이 나오고 전체 건수 중에서 일부만 NULL인 경우는 NULL인 행을 다중 행 함수의 대상에서 제외한다.
   SUM(CASE MONTH WHEN 1 THEN SAL ELSE 0 END)처럼 ELSE 절에서 0(Zero)을 지정하면 불필요하게 0이 SUM 연산에 사용되므로 자원의 사용이 많아진다.
하나가 Oracle의 SUM(NVL(SAL,0)), SQL Server의 SUM(ISNULL (SAL,0)) 연산이다. 개별 데이터의 급여(SAL)가 NULL인 경우는 NULL의 특성으로 자동적으로 SUM 연산에서 빠지는 데, 불필요하게 NVL/ISNULL 함수를 사용해 0(Zero)으로 변환시켜 데이터 건수만큼의 연산이 일어나게 하는 것은 시스템의 자원을 낭비하는 일이다.

[예제] SIMPLE_CASE_EXPRESSION 조건  
SELECT TEAM_ID
              , NVL(SUM(CASE POSITION WHEN 'FW' THEN 1 ELSE 0 END),0) FW -- 불필요한 연산이 일어남
              , NVL(SUM(CASE POSITION WHEN 'MF' THEN 1 END),0) MF   -- SUM은 NULL을 제외 하고 합산 하므로 SUM안이 아닌 밖에 NVL를 사용 하여 건수들 만큼 자원의 낭비를 줄임
              , NVL(SUM(CASE POSITION WHEN 'DF' THEN 1 END),0) DF   -- SQL SERVER로 변경 하고자 할 경우 ISNULL(SUM(CASE POSITION WHEN 'DF' THEN 1 END),0) DF
              , NVL(SUM(CASE POSITION WHEN 'GK' THEN 1 END),0) GK  -- SEARCHED_CASE_EXPRESSION 표현 NVL(SUM(CASE POSITION = 'GK' THEN 1 END),0) GK
              , COUNT                                                                                 SUM
FROM PLAYER
GROUP BY TEAM_ID;  


NATURAL JOIN

NATURAL JOIN은 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) JOIN을 수행한다. NATURAL JOIN이 명시되면, 추가로 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없다. 그리고, SQL Server에서는 지원하지 않는 기능이다. 

SELECT DEPTNO, EMPNO, ENAME, DNAME
FROM   EMP NATURAL JOIN DEPT ;

NATURAL은 식별자를 가질 수 없다. 또한 동일한 열에 대해서는 생략된다. 
USING 조건절

NATURAL JOIN에서는 모든 일치되는 칼럼들에 대해 JOIN이 이루어지지만, FROM 절의 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수가 있다. 다만, 이 기능은 SQL Server에서는 지원하지 않는다. 

SELECT *
FROM DEPT JOIN DEPT_TEMP
USING (DEPTNO);

SELECT *
FROM DEPT JOIN DEPT_TEMP
USING (LOC, DEPTNO);

USING절에 명시된 컬럼이 기준이 되어 동일한 열들을 조인한다. 명시된 데이터가 앞에 나온다. 

SELECT *
FROM DEPT JOIN DEPT_TEMP
USING (DEPTNO);

SELECT *
FROM DEPT JOIN DEPT_TEMP
USING (LOC, DEPTNO);

USING절에 명시된 컬럼이 기준이 되어 동일한 열들을 조인한다. 명시된 데이터가 앞에 나온다. 

  • natural join 에선 using 절 사용 불가하지
  • using 절은 Inner join 에서만 사용하는 구문
  • Inner Join 에서 On 절 또는 Using 절 필수
  • Inner Join 에서 On 절 사용결과 와 Using 절 결과가 다름(Select * 시 조회 컬럼수가 다름)
  • Inner Join 에서 On 절 사용 : 모든 항목이 조회됨
  • Inner Join 에서 Using 절 사용 : 조인키 항목은 한번만 조회됨
계층형 질의

테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의(Hierarchical Query)를 사용한다. 
계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다. 

그림은 사원에 대한 순환관계 데이터 모델을 표현한 것이다. 
(2)계층형 구조에서 A의 하위 사원은 B, C이고 B 밑에는 하위 사원이 없고 C의 하위 사원은 D, E가 있다. 
계층형 구조를 데이터로 표현한 것이 (3)샘플 데이터이다. 

Oracle 계층형 질의
SELECT ...
FROM   TABLE
WHERE  CONDITION AND CONDITION
START WITH CONDITION
CONNECT BY [NOCYCLE] CONDITION AND CONDITION
[ORDER SIBLINGS BY COLUMN, COLUMN......]
  • START WITH절은 계층 구조 전개의 시작 위치를 지정하는 구문이다. 즉, 루트 데이터를 지정한다.(액세스)
  • CONNECT BY절은 다음에 전개될 자식 데이터를 지정하는 구문이다. 자식 데이터는 CONNECT BY절에 주어진 조건을 만족해야 한다.(조인)
  • PRIOR : CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정한다. PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 자식 데이터에서 부모 데이터(자식 → 부모) 방향으로 전개하는 순방향 전개를 한다. 그리고 PRIOR 부모 = 자식 형태를 사용하면 반대로 부모 데이터에서 자식 데이터(부모 → 자식) 방향으로 전개하는 역방향 전개를 한다.
  • NOCYCLE : 데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타난다면 이것을 가리켜 사이클(Cycle)이 형성되었다라고 말한다. 사이클이 발생한 데이터는 런타임 오류가 발생한다. 그렇지만 NOCYCLE를 추가하면 사이클이 발생한 이후의 데이터는 전개하지 않는다.
  • ORDER SIBLINGS BY : 형제 노드(동일 LEVEL) 사이에서 정렬을 수행한다.
  • WHERE : 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출한다.(필터링)

Oracle은 계층형 질의를 사용할 때 다음과 같은 가상 칼럼(Pseudo Column)을 제공한다. 

가상 컬럼설명
LEVEL루트 데이터이면 1, 그 하위 데이터이면 2이다. 리프(Leaf) 데이터까지 1씩 증가한다.
CONNECT_BY_ISLEAF전개 과정에서 해당 데이터가 리프 데이터이면 1, 그렇지 않으면 0이다.
CONNECT_BY_ISCYCLE전개 과정에서 자식을 갖는데, 해당 데이터가 조상으로서 존재하면 1, 그렇지 않으면 0이다. 여기서 조상이란 자신으로부터 루트까지의 경로에 존재하는 데이터를 말한다. CYCLE 옵션을 사용했을 때만 사용할 수 있다.

다음은 그림의 (3)샘플 데이터를 계층


조인의 이해 

http://wiki.gurubee.net/pages/viewpage.action?pageId=26744589




'Oracle' 카테고리의 다른 글

Character Set  (0) 2016.12.06
오라클 vs MS SQL 함수 비교.  (0) 2016.12.06
아키텍처 기반 튜닝 원리- SQL 전문가 가이드  (0) 2015.09.19