Oracle 사용자를위한 ASIQ 비교 SYBASE
Table of Contents PART I. ARCHITECTURE... IV 1. ARCHITECTURE... V 1.1 DB engine...v 1.2 데이터베이스...v 1.3 메모리구조...v 1.4 DB File 구조...vi 1.5 변경정보관리 ( 로그 )...vi 1.6 테이블분할 ( 파티션 )...vi 1.7 수행결과보관기법...vii 1.8 데이터저장기법...vii 1.9 노드확장 /Fault tolerant...vii 1.10 압축...vii 1.11 Index...vii 1.12 Optimiser... viii 1.13 Re-Org... viii 1.14 Locking... viii PART II : SQL... IX 1. SQL... X 1.1 사용언어...x 1.2 기본클라이언트툴...x 1.3 OBJECT 명...x 1.4 문장분리문자...x 1.5 주석...x 1.6 STRING 표현...x 1.7 연산자...x 1.8 DUMMY TABLE...x 1.9 DERIVED TABLE (IN-LINE VIEW)...xi 1.10 묵시적인형변환...xi 1.11 JOIN...xi 1.12 OUTER JOIN...xii 1.13 CONSTRAINT...xii 1.14 DATA TYPE...xii 1.15 USER-DEFINED DATA TYPE... xiii 1.16 BLANK PADDING...xiii 1.17 TEMP TABLE... xiii 1.18 테이블구조보기...xiv 1.19 RI...xiv 1.20 CURSOR...xiv 1.21 USER 생성...xiv 1.22 TRANSACTION MODE...xiv 1.23 EXCEPTION HANDLING...xiv 1.24 IF...xv 1.25 LOOP...xv 1.26 변수...xv 1.27 변수할당...xv 1.28 SEQUENCE...xvi 1.29 Dynamic SQL...xvi 1.30 STORED PROCEDURE/FUNCTION...xvi 1.31 TRIGGER...xvi 1.32 SYNONYM...xvi 1.33 PACKAGE...xvi 1.34 SAM FILE LOAD...xvi 1.35 UNLOAD...xvii 1.36 HINT...xvii
1.37 실행계획보기...xviii PART III : FUNCTION...XIX 1. AGGREGATE FUNCTIONS...1 1.1 AVG : 평균값을구하는함수...1 1.2 COUNT : 특정한컬럼의데이터건수를구하는함수...1 1.3 COUNT(*) : 전 row의데이터건수를구하는함수...1 1.4 MAX : 최대값을구하는함수...1 1.5 MIN : 최소값을구하는함수...1 1.6 SUM : 합을구하는함수...1 1.7 STDDEV : 표준편차를구하는함수...1 1.8 VARIANCE : 분포도를구하는함수...1 2. DATE FUNCTIONS...2 2.1 날짜를다양하기표시하기...2 2.2 날짜에대한반올림 / 반내림값구하기...2 2.3 날짜에대한덧셈연산하기...2 2.4 날짜에대한뺄셈연산하기...3 2.5 날짜에대한요일 / 월이름구하기...4 2.6 날짜에대한일 / 월구하기...4 2.7 현재일자구하기...4 2.8 해당월의마지막날짜구하기...5 2.9 NEW_TIME...5 3. MATHEMATICAL FUNCTIONS...6 3.1 ABS...6 3.2 ACOS...6 3.3 ASIN...6 3.4 ATAN...6 3.5 ATAN2...6 3.6 CEILING...6 3.7 COS : cosine...6 3.8 COSH...6 3.9 TRUNCATE...6 3.10 COT...7 3.11 DEGREES...7 3.12 EXP...7 3.13 FLOOR...7 3.14 LOG...7 3.15 LOG10...7 3.16 MOD...7 3.17 PI...7 3.18 POWER...7 3.19 RADIANS...8 3.20 RAND...8 3.21 ROUND...8 3.22 SIGN...8 3.23 SIN...8 3.24 SINH...8 3.25 SQRT...8 3.26 TAN...8 3.27 TANH...8 4. STRING FUNCTIONS...9 4.1 ASCII...9 4.2 CHAR...9 4.3 CHARINDEX...9 4.4 CONCAT...9 4.5 DATALENGTH...9 4.6 DIFFERENCE...9
4.7 IFNULL...9 4.8 INITCAP...10 4.9 LEFT...10 4.10 LENGTH...10 4.11 LOWER...10 4.12 LPAD...10 4.13 LTRIM...10 4.14 NVL...10 4.15 NULLIF...10 4.16 PATINDEX....11 4.17 REPLACE...11 4.18 REPEAT...11 4.19 REVERSE...11 4.20 RIGHT...11 4.21 RPAD...11 4.22 RTRIM...11 4.23 SOUNDEX...11 4.24 SPACE...11 4.25 STR :...12 4.26 STUFF...12 4.27 SUBSTR...12 4.28 TRANSLATE...12 4.29 TRIM...12 4.30 UPPER...12 5. CONVERSION FUNCTIONS...13 5.1 CHARTOROWID...13 5.2 CONVERT (Oracle)...13 5.3 CAST...13 5.4 HEXTOINT...13 5.5 HEXTORAW...13 5.6 INTTOHEX...13 5.7 RAWTOHEX...13 5.8 ROWIDTOCHAR...14 5.9 STR...14 5.10 TO_DATE :...14 5.11 TO_MULTI_BYTE...14 5.12 TO_NUMBER :...14 5.13 TO_SINGLE_BYTE...14 6. ANALYTICAL FUNCTIONS...15 6.1 DENSE_RANK...15 6.2 NTILE...15 6.3 PERCENT_RANK...15 6.4 PERCENTILE_ CONT...15 6.5 PERCENTILE_ DISC...15 6.6 RANK...15 7. SPECIAL FUNCTIONS AND MISCELLANEOUS...17 7.1 DECODE...17 7.2 ROWNUM...17 7.3 ROWID...17 7.4 접근가능한테이블목록보기...18 7.5 DESC : 테이블의레이아웃보기...18 7.6 MINUS : 차집합구하기...18 7.7 INTERSECT : 교집합구하기...18 7.8 UNION : 합집합구하기...18 7.9 (LEFT RIGHT FULL) OUTER JOIN...19
Part I. Architecture
1. Architecture 1.1 DB engine ASIQ) 하나의 DB process내에서복수개의 thread 라는 task를나누어사용하는 multi-threaded single-server 구조를사용하여복수사용자에대한처리가월등하다. Oracle) 복수의 DB process 와설정한수의 dispatcher, shared process 가복수사용자를관리하는 multi-threaded multi-server 구조의 MTS 와 single-threaded multi-server 구조인 dedicated server 구조로구성할수있다. 1.2 데이터베이스 ASIQ / Oracle : 하나의엔진에하나의데이터베이스가존재 1.3 메모리구조 ASIQ) Oracle)
1.4 DB File 구조 ASIQ) 하나의 DB 는사용자의데이터가저장되는 IQ main store, 시스템혹은메타정보가저장되는 catalog store, 임시적인작업을위한 IQ temporary store 로구성되며각각의 store 는 1 개이상의 dbspace 로구성되어진다. 그렇지만특정한 dbspace 에특정한 object 를생성하는것과같은작업은할수없고 object 를생성하면 object 의정의는 catalog store 의임의의 dbspace 에 object 는 IQ main store 의모든 dbspace 에저장된다.( 임시 object 는 IQ temporary store 에저장된다 ). 1 Database 3 Store n dbspace Oracle) 하나의 DB 는 system tablespace, user tablespace, temporary tablespace 등과같은여러개의 table space 로이루어진다. 특정한 object 를특정한 tablespace 에생성하는등의작업이가능하다. 1 Database n tablespace n datafile 1.5 변경정보관리 ( 로그 ) ASIQ) 사용자데이터에대한변경정보는실제데이터가저장되는 IQ main store 영역내에서 table level 로 snapshot versioning 형태로관리가되며시스템데이터에대한변경정보는기본적으로 dbname.log ( 변경가능 ) 라는파일로관리한다. Oracle) read consistency 라는기법을이용하여 redo log 라는별도의영역에의해관리된다. 1.6 테이블분할 ( 파티션 ) ASIQ) 기본적으로컬럼레벨로파티션되며로우단위의파티션은엔진레벨이아닌사용자가임의적으로실제테이블을만들어데이터를분할해놓고그테이블들을마치하나의
테이블처럼묶어서사용하는 union all view 기능을이용하는수동형태로제공한다. 결국수직과수평이조합된셀레벨파티션을제공한다. Oracle) 엔진레벨에서정의된형태로데이터를분할해주며또한각각의파티션된테이블에대한관리도자동으로수행해주며 hash, range 등여러가지기법을제공한다. 1.7 수행결과보관기법 ASIQ) 테이블들간의조인된결과를미리테이블형태로저장하여실제질의수행시에조인을실행하지않고조인된결과로부터데이터를액세스하여빠른성능을보장할수있게하며다른조건절없이테이블간의 full outer 의결과를보관하는기법으로 join index 라고한다.. Oracle) 미리특정한질의에대한결과 set 을특정한형태의테이블로저장하여그와동일한질의가발생할경우미리저장된결과로부터데이터를액세스하여빠른성능을보장할수있게하는기법으로 Materialized View 라고한다. 1.8 데이터저장기법 ASIQ) 데이터를컬럼레벨로저장한다. 즉하나의블록에는오직하나컬럼의 1 개 (Row) 이상의데이터가들어있다. 이렇게데이터가컬럼레벨로저장되어있기때문에실제질의를수행시필요한컬럼만을디스크에서메모리로읽어올릴수있어불필요한 I/O 를줄일수있다. Oracle) 데이터를로우레벨로저장한다. 즉하나의블록에모든컬럼을포함하는 1 개 (Row) 이상의데이터가들어있다. 1.9 노드확장 /Fault tolerant ASIQ) ASIQ-multiplex 모드를사용하여 shared-disk 기법을사용하여무제한의노드확장을제공한다. Oracle) Real Application Cluster 라는제품으로 shared-disk 기법을사용하여제한적으로노드확장을제공한다. 1.10 압축 ASIQ) 모든데이터, 모든인덱스에대해기본적으로 20% ~ 30% 의압축을제공하며사용자가테이블생성시에각컬럼의카디날리티에따라압축율을증가시킬수도있다. 또한압축된후의질의성능은압축율이높을수록더욱더좋아진다. Oracle) 모든데이터가아닌사용자가임의적으로압축할수있는테이블을정의할수있으며압축한후의질의속도가항상빠르지않기때문에집계테이블과같은중복된데이터와조인이발생하지않은특정한경우에한해서충분히테스트한후에사용가능하다. 1.11 Index ASIQ) 기본적으로컬럼의각비트단위로인덱스가생성되는 bit-wise 인덱스기법을사용하며이기법과 B-tree, bit-map 등을혼합사용하여 7 가지의다양한인덱스를제공한다. 또한
각각의인덱스는인덱스자체가데이터이므로인덱스의 Leaf 노드에추가적인데이터포인터가필요없다. 또한인덱스의생성규칙이정해져있어튜닝이간편하다. Oracle) OLTP 에탁월한성능을발휘하는 B-tree 를비롯하여 bit-map, cluster 등의인덱스를제공한다. 인덱스의 Leaf 노드에실제데이터블록을가리키는포인터가달려있다. 1.12 Optimiser ASIQ) Cost-based optimiser 사용하며비용을산출하기위한메타정보를데이터의변경이발생한즉시이루어진다. Oracle) Cost-based optimiser 와 rule-based optimiser 를사용하며 cost-based optimiser 사용시비용을산출하기위해사용되는메타정보를주기적으로갱신시켜줘야한다 1.13 Re-Org ASIQ) 데이터삭제와동시에그영역을사용가능한영역으로반납하기때문에 re-org의필요성이전혀없다. Oracle) 데이터의삭제시논리적으로삭제되었다는표시만하기때문에이영역을사용가능한영역으로만들어주기위해주기적으로 re-org 작업이필요하다 1.14 Locking ASIQ) 기본적으로테이블레벨 lock만을제공한다, 즉특정한테이블에쓰기작업이진행되면다른어떤사용자도그테이블에쓰기작업을할수없다. 단 table 단위의 snapshot versioning 기법을이용하여읽기작업은얼마든지가능하다. Oracle) read consistency 기법으로쓰기작업중에추가적인쓰기작업은불가능하지만읽기작업은가능하게하며그단위는로우레벨이다.
Part II : SQL
1. SQL 1.1 사용언어 ASIQ) WatcomSQL c.f) ASE와의호환을위해 Transact-SQL도제공하지만성능적인부작용등을고려하여 WatcomSQL 사용을권장한다. Oracle) PL/SQL 1.2 기본클라이언트툴 ASIQ) dbisqlc Oracle) sqlplus 1.3 OBJECT 명 ASIQ / Oracle : Object 명및 SELECT 와같은 SQL 예약어는대 / 소문자를구분하지않는다 1.4 문장분리문자 ASIQ / Oracle : 세미콜론 (;) 으로문장과문장을구분한다. 즉한문장의끝을나타낸다. 1.5 주석 ASIQ) /* */, --, // Oracle) /* */, -- 1.6 STRING 표현 ASIQ / Oracle : string 데이터를표현하기위해단일인용부호 ( ) 로양쪽을감싼다. 1.7 연산자 ASIQ / Oracle : +( 덧셈 ), -( 뺄셈 ), *( 곱셈 ), /( 나눗셈 ), (Concatenation) 1.8 DUMMY TABLE ASIQ) sys.dummy를이용하거나혹은생략가능하다. SELECT now() FROM sys.dummy; 혹은 SELECT now(); Oracle) dual를이용한다
SELECT sysdate FROM dual; 1.9 DERIVED TABLE (IN-LINE VIEW) ASIQ / Oracle : FROM 절에테이블이름이직접나오지않고테이블과같은결과를산출하는또다른 SQL 문을사용할수있다. 1.10 묵시적인형변환 ASIQ) 상위버전으로가면갈수록묵시적인형변환을대부분오류로처리하고있지만아직도많은부분에서묵시적인형변환을자동으로해준다. Oracle) 묵시적인형변환을자동으로해준다. SELECT salary + 10 -- 여기서 salary의 data type은숫자형 FROM employees; 설명 ) ASIQ / Oracle : 10 이라는문자를숫자로자동형변환하여오류없이결과산출 SELECT last_name FROM employees WHERE employee_id = 200 ; -- 여기서 employee_id의 data type은숫자형설명 ) ASIQ : 자동형변환되지않고 Invalid data type comparison 이라는오류를발생 Oracle) : : 200 이라는문자를숫자로자동형변환하여오류없이결과산출 SELECT last_name FROM employees WHERE hire_date = 03-MAR-97 ; -- Oracle인경우이고 hire_date이날짜타입 WHERE hire_date = 1997-03-03 ; -- ASIQ인경우이고 hire_date이날짜타입설명 ) ASIQ / Oracle : 각각의문자를날짜로자동형변환하여오류없이결과산출 1.11 JOIN ASIQ / Oracle 방법1) ASIQ / Oracle 방법 2) SELECT d.dept_id, e.last_name FROM department d, employee e WHERE d.dept_id = e.dept_id; SELECT d.dept_id, e.last_name FROM department d JOIN employee e ON d.dept_id = e.dept_id;
1.12 OUTER JOIN ASIQ 방법1) SELECT d.dept_id, e.last_name FROM department d, employee e WHERE d.dept_id *= e.dept_id; Oracle 방법1) SELECT d.dept_id, e.last_name FROM department d, employee e WHERE d.dept_id = e.dept_id(+); ASIQ / Oracle 방법2) SELECT d.dept_id, e.last_name FROM department d LEFT OUTER JOIN employee e ON d.dept_id = e.dept_id; 1.13 CONSTRAINT ASIQ) 테이블생성시에 UNIQUE, PK, FK 를컬럼레벨과테이블레벨을통해선언가능하다. 또한 IQ UNIQUE 라는컬럼레벨 constraint를선언하여압축율을변경할수도있다.check constraint는제공하지않으며각컬럼에대한 NULL/NOT NULL을정의하지않으면 NULL로정의된다.(c.f : isql로테이블을생성할때는 NOT NULL이된다 ) Oracle) 테이블생성시에 CHECK, UNIQUE, PK, FK 를컬럼레벨과테이블레벨을통해선언가능하다. 각컬럼에대한 NULL/NOT NULL 을정의하지않으면 NULL 로정의된다. 1.14 DATA TYPE VARCHAR2(size) NVARCHAR2(size) Oracle ASIQ 비고 VARCHAR(size) max : 4000B(O), 32000B(IQ) NUMBER NUMBER(p,s) FLOAT TINYINT, SMALLINT, INT, UNSIGNED INT, BIGINT, UNSIGNED BIGINT NUMERIC(p,s), DECIMAL(p,s) FLOAT REAL DOUBLE LONG VARCHAR(size) max : 2GB(O), 32000B(IQ) DATE DATE TIME DATETIME SMALLDATATIME
TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE TIMESTAMP INTERVAL. RAW(size) BINARY(size) VARBINARY(size) max : 2000B(O), 32000(IQ) LONG RAW LONG BINARY max : 2GB(O), 64000B(IQ) ROWID UROWID [(size)] CHAR(size) NCHAR(size) CHAR(size) max : 2000(O), 255B(IQ) CLOB NCLOB LONG BINARY max : 4GB(O), 64000B(IQ) BLOB LONG BINARY max : 4GB(O), 64000B(IQ) BFILE ANY XML SPATIAL MEDIA BIT 1.15 USER-DEFINED DATA TYPE ASIQ) CREATE DOMAIN 명령어를통해서만들수있으나 Oracle에서제공하는것처럼다양한형태의데이터타입은지원하지못하고단순히시스템이제공하는데이터타입의별명정도만제공한다 Oracle) CREATE TYPE 명령어에의해아주다양한형태의데이터타입을제공한다. 1.16 BLANK PADDING ASIQ / Oracle : CHAR로선언된컬럼은실제데이터뒤에선언자릿수만큼을공백문자로채워서저장하고 VARCHAR로선언된컬럼은실제데이터만저장한다. c.f) ASIQ 는실제로데이터를저장할때는 VARCHAR 도 CHAR 처럼저장하며뒤에실제데이터크기를저장하기위해추가적으로 1BYTE 가더필요하며위내용은화면에출력할때를기준으로한다. 1.17 TEMP TABLE ASIQ) 사용용도에따라 LOCAL TEMPORARY TABLE과 GLOBAL TEMPORARY TABLE 이렇게두가지형태의임시테이블을제공한다. DECLARE LOCAL TEMPORARY TABLE..
CREATE GLOBAL TEMPORARY TABLE.. Oracle) global temporary table 형태의임시테이블만제공한다. CREATE GLOBAL TEMPORARY TABLE 1.18 테이블구조보기 ASIQ) sp_iqcolumn table-name; Oracle) desc table-name 1.19 RI ASIQ) Child 테이블에데이터입력시, Parent 테이블에데이터수정 / 삭제시모두 restrict 하며옵션은없다. Oracle) Child 테이블에데이터입력시, Parent 테이블에데이터수정 / 삭제시모두 restrict 하며옵션에따라 cascade 될수있다. 1.20 CURSOR ASIQ / Oracle) DECLARE OPEN FETCH CLOSE 형태로사용할수있으며 FOR 문과연결하여간편하게사용할수도있다. 1.21 USER 생성 ASIQ) GRANT connect TO user-name IDENTIFIED BY password; Oracle) GRANT connect TO user-name IDENTIFIED BY password; CREATE USER..; 1.22 TRANSACTION MODE ASIQ / Oracle : 기본적으로트랜잭션의시작을자동으로처리하는 CHAINED 모드이다 c.f) ASIQ 를 isql 로접속하면 UNCHAINED 모드가기본트랜잭션모드가된다 1.23 EXCEPTION HANDLING ASIQ / Oracle : 3GL이나 4GL이아닌 SQL 상태에서오류가발생하면미리정의된처리루틴으로이동할수있도록 EXCEPTION HANDLING 구조를제공하고있다. SELECT.. IF. EXCEPTION WHEN THEN WHEN.THEN
1.24 IF Oracle ASIQ 비고 IF THEN IF THEN ELSE END IF ELSE END IF ELSIF THEN ELSEIF THEN ELSE IF THEN ELSE IF THEN 1.25 LOOP LOOP Oracle ASIQ 비고 LOOP END LOOP FOR counter IN lower..upper END LOOP FOR IN sub-query END LOOP FOR IN cursor-name END LOOP WHILE LOOP END LOOP 지원하지않음 지원하지않음 FOR for-loop-name AS cursor-name CURSOR FOR cursor-definition DO END FOR ASIQ 의 for loop 는오직커서와같이사용할수만있다. END LOOP EXIT [WHEN ] LEAVE loop exit. <<label-name>> label-name: 루프이름 1.26 변수 ASIQ) Begin 과 End 사이에서 declare 문에의해서만선언가능한 Local 변수와 create variable 문을통해한세션내에서지속적으로사용가능한 Connection level 변수가존재하며 %TYPE 속성, Composite, Reference 형태의변수는지원하지않습니다. Oracle) Declare 섹션내에서선언가능하며스칼라형, %TYPE 속성, Composite 형, Reference 형 LOB 형등과같은다양한형태의변수를지원합니다. 1.27 변수할당 ASIQ) SET variable = value; 문에의해변수에특정한값을할당할수도있고 SELECT column INTO variable 문에의해변수에값을할당할수도있다.
Oracle) variable := value; 문에의해변수에특정한값을할당할수있다. SELECT column INTO :host-variable 문에의해호스트변수에값을할당할수도있다. 1.28 SEQUENCE ASIQ) 실제데이터가입력되는모든일반테이블과임시테이블의각로우는입력되는순서에의해자동으로 1부터순차적으로번호가붙여진다. 이것을 ROWID라고하는데 ROWID(table-name) 라는함수를통해그내용을참조할수있다. Oracle) SEQUENCE 를생성하여특정한테이블의컬럼에순번데이터를입력하기위해서주로만든다. sequence.currval 과 sequence.nextval 을통해데이터를참조할수있다 1.29 Dynamic SQL ASIQ / Oracle : EXECUTE IMMEDIATE 라는명령어를사용하여다이나믹 SQL를구현할수있다 1.30 STORED PROCEDURE/FUNCTION ASIQ / Oracle : CREATE PROCEDURE FUNCTION 문을통해구현가능하다 1.31 TRIGGER ASIQ) 지원하지않음 Oracle) CREATE TRIGGER 명령어에의해생성되며 INSERT, UPDATE, DELETE 이벤트에반응한다. 1.32 SYNONYM ASIQ) 지원하지않으나같은그룹으로사용자를묶어관리하면비슷한효과를누릴수있다 Oracle) CREATE SYNONYM 이라는명령어를통해생성가능하고특정한 Object 에대한별명을만들어편리하게사용한다. 1.33 PACKAGE ASIQ) 지원하지않음 Oracle) 서로연관이있는여러개의 Procedure 나 Function 을그룹으로묶어이름을붙여사용한다. 1.34 SAM FILE LOAD ASIQ) 유틸리티차원에서대량의 SAM 파일데이터를 DB로입력하는방식이아니라 SQL문내에서처리가가능하다. LOAD TABLE 이라는 SQL 명령어를통해사용가능하다. Oracle) SQL*Loader 라는유틸리티를사용해서대량의 SAM 파일을 DB 로입력할수있다.
1.35 UNLOAD ASIQ) 옵션을통해파일이름을지정하면 SELECT 를통한어떠한결과도특정한파일로받아내릴수있으며 ASCII 형태혹은 BINARY 형태로둘다가능하다. Oracle) 자체적으로제공하는유틸리티인 export 는 ASCII 나 BINARY 형태가아닌 Oracle 자체포맷으로구성되어져있으며 ASCII 파일이나 BINARY 파일로받아내리려면 3 rd Party 제품을이용하거나프로그램으로처리해야한다. 1.36 HINT 항목 Oracle ASIQ Optimization Goals and Approaches Access Method Hints Join Order Hints Join Operation Hints Parallel Execution Hints Query Transformation Hints ALL_ROWS and FIRST_ROWS CHOOSE RULE AND_EQUAL CLUSTER FULL HASH INDEX and NO_INDEX INDEX_ASC and INDEX_DESC INDEX_COMBINE INDEX_FFS ROWID ORDERED STAR DRIVING_SITE HASH_SJ, MERGE_SJ, and NL_SJ LEADING USE_HASH and USE_MERGE USE_NL PARALLEL and NOPARALLEL PARALLEL_INDEX PQ_DISTRIBUTE NOPARALLEL_INDEX EXPAND_GSET_TO_UNION FACT and NOFACT MERGE NO_EXPAND NO_MERGE REWRITE and NOREWRITE STAR_TRANSFORMATION USE_CONCAT Index_Preference = -10 ~ 10 * Join_Optimization= On OFF * Join_Preference = -7 ~ 7 * Enable_Pushdown_Joins = On Off * Max_Query_Parallelism = 숫자 * Max_IQ_Threads_Per_Connection* Max_IQ_Threads_Per_Team* IN_Subquery_Preference*
Other Hints APPEND and NOAPPEND CACHE and NOCACHE CURSOR_SHARING_EXACT DYNAMIC_SAMPLING NESTED_TABLE_GET_REFS UNNEST and NO_UNNEST ORDERED_PREDICATES PUSH_PRED and NO_PUSH_PRED PUSH_SUBQ and NO_PUSH_SUBQ Aggregation_Preference = -3 ~ 3 * Parallel_GBH_Enabled = On Off * Parallel_GBH_Units = 숫자 * User-Supplied Selectivity** 참고 ) * 설명 set temporary option Join_Preference = 1; select ; set temporary option Join_ Preference = 0; ** 설명 SELECT * FROM.. WHERE (date_paid > 1-OCT-2002, 99.0) AND date_billed > 16-SEP-2002 1.37 실행계획보기 ASIQ) set temporary option Query_Plan = On ; set temporary option Query_Detail = On ; set temporary option Query_Plan_After_Run = On ; set temporary option Query_Timing = On ; set temporary option Query_Name = HTML로보고싶은이름 ; set temporary option Query_Plan_As_HTML = On ; 위와같은옵션을미리설정한후에 SQL문을실행하면 HTML이나혹은메시지로그파일로실행계획이출력된다. ( 단. 위에서사용한옵션들은경우에따라다일수도있고일부일수도있다 ) Oracle) EXPLAIN PLAN SET STATEMENT_ID = text INTO PLAN_TABLE FOR sql-statement; -- PLAN_TABLE 이라는테이블을스크립트이용미리생성 일단위처럼명령어를사용하면 SQL 에대한실행계획이 PLAN_TABLE 이라는테이블로저장되고그테이블에대한질의를통해조회가가능하다.
Part III : Function
1. Aggregate Functions 1.1 AVG : 평균값을구하는함수 ASIQ / Oracle : SELECT AVG ( [ all distinct ] expression ) 1.2 COUNT : 특정한컬럼의데이터건수를구하는함수 ASIQ / Oracle : SELECT COUNT ( [ all distinct ] expression ) 1.3 COUNT(*) : 전 row의데이터건수를구하는함수 ASIQ / Oracle : SELECT COUNT ( * ) 1.4 MAX : 최대값을구하는함수 ASIQ / Oracle : SELECT MAX ( expression ) 1.5 MIN : 최소값을구하는함수 ASIQ / Oracle : SELECT MIN ( expression ) 1.6 SUM : 합을구하는함수 ASIQ / Oracle : SELECT SUM ( expression ) 1.7 STDDEV : 표준편차를구하는함수 ASIQ / Oracle : SELECT STDDEV ([ all distinct ] expression) 1.8 VARIANCE : 분포도를구하는함수 ASIQ / Oracle : SELECT VARIANCE ( [ all distinct ] expression ) Page: 1
2. Date Functions 2.1 날짜를다양하기표시하기 - 날짜를 yyyy/mm/dd 형태로표시하기 ASIQ) SELECT DATEFORMAT(date('92-06-27'), yyyy/mm/dd ) [ FROM sys.dummy ] Oracle) SELECT TO_CHAR(to_date('92-FEB-16','YY-MON-DD'), 'yyyy/mm/dd') FROM dual; 2.2 날짜에대한반올림 / 반내림값구하기 - 날짜중에일 (dd) 에대한반올림 ASIQ) Oracle) SELECT ROUND(to_date('92-FEB-16','YY-MON-DD'), 'DAY') FROM dual; - 날짜중에월 (mm) 에대한반올림 ASIQ) Oracle) SELECT ROUND (to_date('92-feb-16','yy-mon-dd'), 'MONTH') FROM dual; - 날짜중에년 (yy) 에대한반올림 ASIQ) Oracle) SELECT ROUND (to_date('92-feb-16','yy-mon-dd'), 'YEAR') FROM dual; - 날짜중에일 (dd) 에대한반내림 ASIQ) Oracle) SELECT TRUNC(to_date('92-FEB-16','YY-MON-DD'), 'DAY') FROM dual; - 날짜중에월 (mm) 에대한반내림 ASIQ) Oracle) SELECT TRUNC (to_date('92-feb-16','yy-mon-dd'), 'MONTH') FROM dual; - 날짜중에년 (yy) 에대한반내림 ASIQ) Oracle) SELECT TRUNC (to_date('92-feb-16','yy-mon-dd'), 'YEAR') FROM dual; 2.3 날짜에대한덧셈연산하기 - 날짜중에일 (dd) 를더하기위해서 ASIQ) SELECT DAYS(date('92-JUN-27'), 1) [ FROM sys.dummy ] Oracle) SELECT to_date( 92-JUN-27, YY-MON-DD ) + 1 FROM dual - 날짜중에월 (mm) 을더하기위해서 ASIQ) SELECT MONTHS(date('92-JUN-27'), 1) [ FROM sys.dummy ] Oracle) SELECT ADD_MONTHS(to_date( 92-JUN-27, YY-MON-DD ),1) FROM dual; - 날짜중에년 (yy) 을더하기위해서 ASIQ) SELECT YEARS(date('92-JUN-27'), 1) [ FROM sys.dummy ] Oracle) SELECT ADD_MONTHS(to_date( 92-JUN-27, YY-MON-DD ),12) FROM dual; Page: 2
- 주어진날짜로부터다음번에나오는월요일을구하기위해서 ASIQ) SELECT case dayname(date('92-jun-27')) when 'Sunday' then days(date('92-jun-27'), 1) when 'Monday' then days(date('92-jun-27'), 7) when 'Tuesday' then days(date('92-jun-27'), 6) when 'Wednesday' then days(date('92-jun-27'), 5) when 'Thursday' then days(date('92-jun-27'), 4) when 'Friday' then days(date('92-jun-27'), 3) when 'Saturday' then days(date('92-jun-27'), 2) end [ FROM sys.dummy ] Oracle) SELECT next_day (to_date( 92-JUN-27, YY-MON-DD ), Monday ) FROM dual; 2.4 날짜에대한뺄셈연산하기 - 날짜중에일 (dd) 를빼기위해서 ASIQ) SELECT DAYS(date('92-JUN-27'), -1) [ FROM sys.dummy ] Oracle) SELECT to_date( 92-JUN-27, YY-MON-DD ) - 1 FROM dual - 날짜중에월 (mm) 을빼기위해서 ASIQ) SELECT MONTHS(date('92-JUN-27'), -1) [ FROM sys.dummy ] Oracle) SELECT ADD_MONTHS(to_date( 92-JUN-27, YY-MON-DD ),-1) FROM dual; - 날짜중에년 (yy) 을빼기위해서 ASIQ) SELECT YEARS(date('92-JUN-27'), 1) [ FROM sys.dummy ] Oracle) SELECT ADD_MONTHS(to_date( 92-JUN-27, YY-MON-DD ),-12) FROM dual; - 두날짜사이의일수계산하기 ASIQ) SELECT DAYS(date('92-JUN-26'), date( 92-JUN-29 )) [ FROM sys.dummy ] Oracle) SELECT to_date( 92-JUN-29, YY-MON-DD ) - to_date( 92-JUN-27, YY-MON- DD ) FROM dual; - 두날짜사이의월수계산하기 ASIQ) SELECT MONTHS(date('92-JUN-26'), date( 92-OCT-29 )) [ FROM sys.dummy ] SELECT DAYS(date('92-JUN-26'), date( 92-OCT-29 )) / 31.0 Oracle) SELECT MONTHS_BETWEEN(to_date( 92-JUN-29, YY-MON-DD ), to_date( 92-JUN-27, YY-MON-DD )) FROM dual; - 두날짜사이의년수계산하기 ASIQ) SELECT YEARS(date('92-JUN-26'), date( 95-OCT-29 )) [ FROM sys.dummy ] SELECT days(date('92-jun-26'), date( 92-OCT-29 )) / 365.254 Oracle) SELECT (to_date( 92-JUN-29, YY-MON-DD ) Page: 3
to_date( 92-JUN-27, YY-MON-DD ) ) /365.254 FROM dual; 2.5 날짜에대한요일 / 월이름구하기 - 주어진날짜에서요일구하기 ASIQ) SELECT DAYNAME(date('92-06-27')) [ FROM sys.dummy ] SELECT upper(cast(dayname(date('92-06-27')) as char(3))) [ FROM sys.dummy ] Oracle) SELECT TO_CHAR(to_date('92-06-29','YY-MM-DD'), 'DAY') FROM dual; SELECT TO_CHAR (to_date('92-06-29','yy-mm-dd'), 'DY') FROM dual; - 주어진날짜에서월이름구하기 ASIQ) SELECT MONTHNAME(date('92-06-27')) [ FROM sys.dummy ] SELECT upper(cast(monthname(date('92-06-27')) as char(3)) [ FROM sys.dummy ] Oracle) SELECT TO_CHAR(to_date('92-06-29','YY-MM-DD'), 'MONTH') FROM dual; SELECT TO_CHAR(to_date('92-06-29','YY-MM-DD'), 'MON') FROM dual; 2.6 날짜에대한일 / 월구하기 - 주어진날짜에서일구하기 ASIQ) SELECT DAY(date('92-06-27')) [ FROM sys.dummy ] Oracle) SELECT TO_NUMBER(to_char(to_date('92-06-29','YY-MM-DD'), 'DD')) FROM dual; - 주어진날짜에서요일을수로구하기 ASIQ) SELECT DOW(date('92-06-27')) [ FROM sys.dummy ] Oracle) SELECT TO_NUMBER(to_char(to_date('92-06-29','YY-MM-DD'), 'D')) FROM dual; - 주어진날짜에서월구하기 ASIQ) SELECT MONTH(date('92-06-27')) [ FROM sys.dummy ] Oracle) SELECT TO_NUMBER(to_char(to_date('92-06-29','YY-MM-DD'), 'MM')) FROM dual; 2.7 현재일자구하기 ASIQ) SELECT TODAY() [ FROM sys.dummy ]; SELECT NOW() [ FROM sys.dummy ]; SELECT CURRENT DATE [ FROM sys.dummy ]; Oracle) SELECT SYSDATE FROM dual; SELECT CURRENT_DATE FROM dual; Page: 4
2.8 해당월의마지막날짜구하기 ASIQ) SELECT days(date(cast(dateformat(months(today(),1),'yyyymmdd') as char(6)) '01'), -1) [ FROM sys.dummy ]; Oracle) SELECT LAST_DAY(sysdate) FROM dual; 2.9 NEW_TIME Returns the corresponding date and time for the passed timezone. ASIQ Oracle There is no equivalent for this Oracle function. NEW_TIME ( date-expression, timezone, new timezone ) Page: 5
3. Mathematical Functions 3.1 ABS : 절대값을구하는함수 ASIQ / Oracle : SELECT ABS ( number-expression ) FROM 3.2 ACOS : arc-cosine 값을구하는함수 ASIQ / Oracle : SELECT ACOS ( number-expression ) FROM 3.3 ASIN : arc-sine 값을구하는함수 ASIQ / Oracle : SELECT ASIN ( number-expression ) FROM 3.4 ATAN : arc- tangent 값을구하는함수 ASIQ / Oracle : SELECT ATAN ( number-expression ) FROM 3.5 ATAN2 ASIQ / Oracle : SELECT ATAN2 ( number-expression1, number-expression2 ) FROM 3.6 CEILING : 소수점이하올림을구하는함수 ASIQ) SELECT CEILING (59.2) [ FROM sys.dummy ]; Oracle) SELECT CEIL (59.2) FROM dual; 3.7 COS : cosine 값을구하는함수 ASIQ / Oracle : SELECT COS ( number-expression ) FROM 3.8 COSH : hyperbolic cosine 값을구하는함수 ASIQ) 12.5 까지는지원되지않음 Oracle) SELECT COSH ( number-expression ) FROM dual 3.9 TRUNCATE : 지정된소수점이하수를절삭하는함수 ASIQ) SELECT TRUNCATE (655.1234, 2) [ FROM sys.dummy ]; Oracle) SELECT TRUNC(655.1234, 2) FROM dual; Page: 6
3.10 COT : cotangent 값을구하는함수 ASIQ) SELECT COT( 0.52 ) Oracle) 9i 까지는제공되지않음 3.11 DEGREES : radian을 degree로바꿔주는함수 ASIQ) SELECT DEGREES (0.52) [ FROM sys.dummy ] Oracle) 9i 까지는제공되지않음. 3.12 EXP : exponential 값으로바꿔주는함수 ASIQ / Oracle : SELECT EXP ( number-expression ) FROM 3.13 FLOOR : 소수점이하자리값을절삭하는함수 ASIQ / Oracle : SELECT FLOOR ( number-expression ) FROM 3.14 LOG : log 함수 ASIQ) SELECT LOG (50) [ FROM sys.dummy ] Oracle) SELECT LN(50) FROM dual; 3.15 LOG10 : base10의 log 값을구하는함수 ASIQ) SELECT LOG10 (50) [ FROM sys.dummy ] Oracle) SELECT LOG (10, 50) FROM dual; 3.16 MOD : mod 함수 ASIQ) SELECT MOD(5,2) [ FROM sys.dummy ]; Oracle) SELECT MOD(5,2) FROM dual; 3.17 PI : PI 함수 ASIQ) SELECT PI() [ FROM sys.dummy ]; Oracle) 9i 까지는제공되지않음 3.18 POWER : power 함수 ASIQ / Oracle : SELECT POWER ( number-expression, number-expression (magnitude) ) Page: 7
3.19 RADIANS : degree 를 radian 으로바꾸는함수 ASIQ) SELECT RADIANS(30) [ FROM sys.dummy ] Oracle) 9i 까지는제공되지않음 3.20 RAND : 난수발생함수 ASIQ) SELECT RAND() [ FROM sys.dummy ]; Oracle) 9i 까지는제공되지않음 3.21 ROUND : 반올림함수 ASIQ / Oracle : SELECT ROUND(123.446,1) FROM 3.22 SIGN : 0 이면 0, 양수이면 +1, 음수이면 1을되돌려주는함수 ASIQ / Oracle : SELECT SIGN(-1000) FROM. 3.23 SIN : sine 값을구하는함수 ASIQ / Oracle : SELECT SIN( number-expression ) FROM 3.24 SINH : hyperbolic sine 값을구하는함수 ASIQ) 12.5 까지는지원되지않음 Oracle) SELECT SINH ( number-expression ) FROM dual; 3.25 SQRT : square root 값을구하는함수 ASIQ / Oracle : SELECT SQRT ( number-expression ) FROM. 3.26 TAN : tangent 값을구하는함수 ASIQ / Oracle : SELECT TAN ( number-expression ) FROM. 3.27 TANH : hyperbolic tangent 값을구하는함수 ASIQ) 12.5 까지는지원되지않음 Oracle) SELECT TANH ( number-expression ) FROM dual; Page: 8
4. String Functions 4.1 ASCII : 해당문자에대한 ASCII 코드값을구하는함수 ASIQ / Oracle : SELECT ASCII ( A ) FROM. 4.2 CHAR : 해당 ASCII 코드값에대한문자를구하는함수 ASIQ) SELECT CHAR (55) [ FROM sys.dummy ]; Oracle) SELECT CHR (55) FROM dual; 4.3 CHARINDEX : 주어진문자열에서찾고자하는문자열의색인값을구하는함수 ASIQ) SELECT CHARINDEX ( abc, asfsdfdsdsabcgfdtrgf ) Oracle) SELECT INSTR('asfsdfdsdsabcgfdtrgf', 'abc',1,1) FROM dual; 4.4 CONCAT : 문자열을연결하는함수 ASIQ) SELECT STRING( aaa, bbb, ccc ) [ FROM sys.dummy ]; SELECT aaa bbb ccc [ FROM sys.dummy ]; Oracle) SELECT CONCAT(CONCAT ( aaa, bbb ), ccc ) FROM dual; SELECT aaa bbb ccc FROM dual; 4.5 DATALENGTH : 해당문자열의 byte 길이를구하는함수 ASIQ) SELECT DATALENGTH ( 한글 ) [ FROM sys.dummy ]; SELECT BYTE_LENGTH (' 한글 ') [ FROM sys.dummy ]; Oracle) SELECT LENGTHB( 한글 ) FROM dual; 4.6 DIFFERENCE ASIQ) SELECT DIFFERENCE ( string-expression1, string-expression2 ) Oracle) SELECT SOUNDEX( string-expression1 ) SOUNDEX( string-expression2 ) 4.7 IFNULL : 주어진표현식이 NULL 이면 ~ 하고아니면 ~ 하는함수 ASIQ) SELECT IFNULL(NULL, 0, 1) [ FROM sys.dummy ]; Oracle) SELECT Page: 9
4.8 INITCAP : 영문첫글자만대문자로바꿔주는함수 ASIQ) 12.5 까지지원되지않음 Oracle) SELECT INITCAP ( the english ) FROM dual; 4.9 LEFT : 주어진문자열의왼쪽부터지정된길이만큼의문자열을반환하는함수 ASIQ) SELECT LEFT ( chocolate, 5) [ FROM sys.dummy ]; Oracle) SELECT SUBSTR ( chocolate, 1, 5) FROM dual; 4.10 LENGTH : 해당문자열의길이를구하는함수 (cf. byte_length, char_length, datalength) ASIQ) SELECT LENGTH( abcdefg ) [ FROM sys.dummy ]; Oracle) SELECT LENGTH( abcdefg ) FROM dual; 4.11 LOWER : 주어진문자열을소문자로변경해주는함수 ASIQ) SELECT LOWER ( CHOCOLATE ) [ FROM sys.dummy ]; SELECT LCASE ( CHOCOLATE ) [ FROM sys.dummy ]; Oracle) SELECT LOWER ( CHOCOLATE ) FROM dual; 4.12 LPAD : 주어진문자열의왼쪽에지정된문자열을채우는함수 ASIQ) SELECT REPEAT( =, (20 - length( Page 1 ))) Page 1 [ FROM sys.dummy ]; Oracle) SELECT LPAD('Page 1',20,'=') FROM dual; 4.13 LTRIM : 주어진문자열에서왼쪽에시작되는공백문자를제거하는함수 ASIQ / Oracle SELECT LTRIM ( Test Message ) FROM.; 4.14 NVL : NULL 이면다른값으로변환해주는함수 ASIQ) SELECT COALESCE (NULL, 1) [ FROM sys.dummy ]; Oracle) SELECT NVL (null,1) FROM dual; SELECT COALESCE (NULL, 1) FROM dual; 참고 ) Oracle의 NVL2 함수는 ASIQ의 IFNULL 함수와동일 4.15 NULLIF : 두표현식을비교하여같으면 NULL을다르면첫번째표현식을반환하는함수 ASIQ) SELECT NULLIF('a', 'a') [ FROM sys.dummy ]; Oracle) SELECT NULLIF('a', 'a') FROM dual; Page: 10
4.16 PATINDEX : 주어진문자열에서지정된문자열혹은패턴을찾아그시작인덱스를반환하는함수. ASIQ) SELECT PATINDEX('%hoco%', 'chocolate') [ FROM sys.dummy ]; Oracle) SELECT INSTR('chocolate', 'hoco') FROM dual; 4.17 REPLACE : 주어된문자열중에지정된문자를찾아다른문자로변경해주는함수 ASIQ) SELECT REPLACE( 'abc.def.abc.ghi', 'abc', 'xx' ) [ FROM sys.dummy ]; Oracle) SELECT REPLACE( 'abc.def.abc.ghi', 'abc', 'xx' ) FROM dual; 4.18 REPEAT : 주어진문자열을지정한수만큼반복하는함수 ASIQ) SELECT REPEAT( 'repeat', 3 ) [ FROM sys.dummy ]; Oracle) SELECT RPAD('repeat',length('repeat')*3, 'repeat') FROM dual; 4.19 REVERSE : 주어진문자열의역순의문자열을반환하는함수 ASIQ) 12.5 까지는지원되지않음 Oracle) 9i 까지는지원되지않음 4.20 RIGHT : 주어진문자열의오른쪽에서지정된수만큼의문자열을반환하는함수 ASIQ) SELECT RIGHT( 'chocolate', 5 ) [ FROM sys.dummy ]; Oracle) SELECT SUBSTR('chocolate', -5) FROM dual; 4.21 RPAD : 주어진문자열의오른쪽에지정된문자열을채우는함수 ASIQ) SELECT 'Page 1' REPEAT( =, (20 - length( Page 1 ))) [ FROM sys.dummy ]; Oracle) SELECT RPAD('Page 1',20,'=') FROM dual; 4.22 RTRIM : 주어진문자열에서오른쪽에공백문자를제거하는함수 ASIQ / Oracle SELECT RTRIM ('Test Message ' ) FROM. 4.23 SOUNDEX ASIQ / Oracle SELECT SOUNDEX ( string-expression ) 4.24 SPACE : 주어진수만큼의공백문자를반환하는함수 ASIQ) SELECT SPACE (10) [ FROM sys.dummy ]; Page: 11
Oracle) SELECT LPAD(,10, ) FROM dual; 4.25 STR : 주어진숫자를동일한문자로변환하는함수 ASIQ) SELECT STR(12345, 5) [ FROM sys.dummy ]; Oracle) SELECT TO_CHAR (12345) FROM dual; 4.26 STUFF : 주어진문자열의일부를다른문자열로변환하는함수 ASIQ) SELECT STUFF('chocolate cake', 11, 4, 'pie') [ FROM sys.dummy ]; Oracle) SELECT SUBSTR('chocolate cake', 1, 10) pie SUBSTR('chocolate cake', 11+4) FROM dual; 4.27 SUBSTR ASIQ) SELECT SUBSTR ('back yard',1,4) [ FROM sys.dummy ]; SELECT SUBSTR ('back yard',-1,-4) [ FROM sys.dummy ]; Oracle) SELECT SUBSTR ('back yard',1,4) FROM dual; 4.28 TRANSLATE ASIQ) 12.5 까지지원되지않음 Oracle) SELECT TRANSLATE ( 2KRW229, 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ, 9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX ) FROM dual; 4.29 TRIM : 지정된문자열의앞 / 뒤의공백문자혹은특정한문자를제거하는함수 ASIQ) SELECT TRIM( chocolate ' ) [ FROM sys.dummy ]; SELECT SUBSTR('00098723400089000000', PATINDEX('%[1-9]%', '0009872340008900')) Oracle) SELECT TRIM( chocolate ' ) FROM dual; SELECT TRIM (LEADING '0' FROM '0009872340008900') FROM dual; 4.30 UPPER : 주어진문자열을대문자로변경해주는함수 ASIQ) SELECT UPPER ( chocolate ) [ FROM sys.dummy ]; SELECT UCASE ( chocolate ) [ FROM sys.dummy ]; Oracle) SELECT UPPER ( chocolate ) FROM dual; Page: 12
5. Conversion Functions 5.1 CHARTOROWID : 문자형의타입을 ROWID 타입으로형변환하는함수 ASIQ) Oracle 종속적인함수 Oracle) SELECT CHARTOROWID ( string-expression ) FROM dual; 5.2 CONVERT (Oracle) : 주어진 Character set을지정된 Character set으로변환하는함수 ASIQ) 12.5 까지는지원하지않음 Oracle) SELECT CONVERT ( string-expression, destination-character-set [, source-character-set] ) FROM dual; 5.3 CAST : 형변환함수 ASIQ) SELECT CAST( 1234 as int) FROM [ sys.dummy]; Oracle) SELECT CAST( 1234 as number) FROM dual; SELECT TO_NUMBER( 1234 ) FROM dual; 5.4 HEXTOINT : 16진수의값을정수형으로변환하는함수 ASIQ) SELECT HEXTOINT ( hexidecimal-string ) FROM [ sys.dummy ]; Oracle) 9i 까지는지원되지않음 5.5 HEXTORAW : 16 진수의값을 RAW(ASIQ : binary) 형으로변환하는함수 ASIQ) 12.5 까지는지원하지않음 Oracle) SELECT HEXTORAW ( string-expression ) FROM dual; 5.6 INTTOHEX : 주어진정수값을 16진수로변환하는함수 ASIQ) SELECT INTTOHEX ( integer-expression ) [ FROM sys.dummy ]; Oracle) 9i 까지는지원하지않음 5.7 RAWTOHEX : RAW(ASIQ : binary) 값을 16 진수의값으로변환하는함수 ASIQ) 12.5까지는지원하지않음 Oracle) SELECT RAWTOHEX ( raw-expression ) FROM dual; Page: 13
5.8 ROWIDTOCHAR : ROWID 값을 VARCHAR2 형태로변환하는함수 ASIQ) 12.5 까지는지원하지않음 Oracle) SELECT ROWIDTOCHAR ( rowid-expression ) FROM dual; 5.9 STR : 주어진숫자를문자로변경 ASIQ) SELECT STR(12345, 5) [ FROM sys.dummy ]; Oracle) SELECT TO_CHAR (12345) FROM dual; 5.10 TO_DATE : DATE 형으로변환하는함수 ASIQ) SELECT CAST('1999-01-02 12:20:53' as DATE) [ FROM sys.dummy ]; SELECT CAST('1999-01-02 12:20:53' as DATETIME) [ FROM sys.dummy ]; SELECT DATE('1999-01-02 12:20:53') [ FROM sys.dummy ]; SELECT DATETIME('1999-01-02 12:20:53') [ FROM sys.dummy ]; Oracle) SELECT TO_DATE('1999-01-02 12:20:53','YYYY-MM-DD HH:MI:SS') FROM dual; 5.11 TO_MULTI_BYTE : Single Byte 문자를 Multi Byte 문자로변경하는함수 ASIQ) 12.5 까지는지원하지않음 Oracle) SELECT TO_MULTI_BYTE ( A ) FROM dual; 5.12 TO_NUMBER : 주어진 string-expression 을숫자로변경하는함수 ASIQ) SELECT CAST( 123456 AS INT) [ FROM sys.dummy ]; Oracle) SELECT TO_NUMBER ( 123456 ) FROM dual; 5.13 TO_SINGLE_BYTE : Multi Byte 문자를 Single Byte 문자로변경하는함수 ASIQ) 12.5 까지는지원하지않음 Oracle) SELECT TO_SINGLE_BYTE ( A') FROM dual; Page: 14
6. Analytical Functions 6.1 DENSE_RANK ASIQ) RANK() 함수와동일하게 partition by option은 12.5까지제공되지않음 Oracle) RANK() 참조 6.2 NTILE ASIQ) RANK() 함수와동일하게 partition by option은 12.5까지제공되지않음 Oracle) RANK() 참조 6.3 PERCENT_RANK ASIQ) RANK() 함수와동일하게 partition by option은 12.5까지제공되지않음 Oracle) RANK() 참조 6.4 PERCENTILE_ CONT ASIQ) RANK() 함수와동일하게 partition by option은 12.5까지제공되지않음 Oracle) RANK() 참조 6.5 PERCENTILE_ DISC ASIQ) RANK() 함수와동일하게 partition by option은 12.5까지제공되지않음 Oracle) RANK() 참조 6.6 RANK ASIQ) SELECT district, grade, avg(math_score), rank() over (order by avg(math_score) desc) as rank_d FROM math_report where district = 'essex' GROUP BY district, grade UNION ALL SELECT district, grade, avg(math_score), rank() over (order by avg(math_score) desc) as rank_d FROM math_report where district = 'middlesex' GROUP BY district, grade UNION ALL SELECT district, grade, avg(math_score), rank() over (order by avg(math_score) desc) as rank_d FROM math_report where district = 'suffolk' GROUP BY district, grade ORDER BY 1,2; //partition by option은 12.5까지제공되지않음 Page: 15
Oracle) SELECT district, grade, avg(math_score), rank() over (partition by district order by avg(math_score) desc) as rank_d FROM math_report GROUP BY district, grade ORDER BY district; Page: 16
7. Special Functions and Miscellaneous 7.1 DECODE : CASE 문법이나오기전에사용되던 Oracle 문법으로 CASE 문법으로대체 ASIQ) SELECT year, case qtr when 1 then 0 end q1, case qtr when 2 then 0 end q1, case qtr when 3 then 0 end q1, case qtr when 4 then 0 end q1, FROM sales Oracle) SELECT year, DECODE( qtr. 1, amt. 0 ) q1, DECODE( qtr. 2, amt. 0 ) q2, DECODES qtr. 3, amt. 0 ) q3, DECODE( qtr. 4, amt. 0 ) q4 FROM sales s; SELECT year, case qtr when 1 then 0 end q1, case qtr when 2 then 0 end q1, case qtr when 3 then 0 end q1, case qtr when 4 then 0 end q1, FROM sales 7.2 ROWNUM : 질의결과에각 row를위하여 1 부터순차적으로번호를지정하는함수 ASIQ) SELECT * FROM employees WHERE NUMBER(*) < 10; Oracle) SELECT * FROM employees WHERE ROWNUM < 10; 7.3 ROWID ASIQ) 모든테이블에데이터가입력될때입력되는순으로각 row에는 1부터순차적으로 ROWID 라는번호를지정받는다. SELECT * FROM employees WHERE ROWID(employees) < 10; Page: 17
Oracle) 특정테이블내의특정한 row의유일한주소값 SELECT last_name FROM employees WHERE ROWID = AAAFD1AAFAAAABSAAH ; 7.4 접근가능한테이블목록보기 ASIQ) sp_iqtable; Oracle) SELECT * FROM tab; 7.5 DESC : 테이블의레이아웃보기 ASIQ) sp_iqcolumn table-name; Oracle) DESC table-name; 7.6 MINUS : 차집합구하기 ASIQ) SELECT product_id FROM (SELECT a. product_id, b. product_id as b_product_id FROM inventories a, order_item b WHERE a. product_id *= b. product_id ) tmp WHERE b_product_id is null; Oracle) SELECT product_id FROM inventories MINUS SELECT product_id FROM order_item; 7.7 INTERSECT : 교집합구하기 ASIQ) SELECT a.product_id FROM inventories a, order_item b WHERE a.product_id = b.product_id; Oracle) SELECT product_id FROM inventories INTERSECT SELECT product_id FROM order_item; 7.8 UNION : 합집합구하기 ASIQ) SELECT product_id FROM inventories UNION [ALL] SELECT product_id FROM order_item; Page: 18
Oracle) SELECT product_id FROM inventories UNION [ALL] SELECT product_id FROM order_item; 7.9 (LEFT RIGHT FULL) OUTER JOIN ASIQ) SELECT * FROM customer c, sales_order s WHERE c.id *= s.cust_id; SELECT * FROM customer LEFT OUTER JOIN sales_order ON customer.id = sales_order.cust_id; Oracle) SELECT * FROM customer c, sales_order s WHERE c.id = s.cust_id (+); SELECT * FROM customer LEFT OUTER JOIN sales_order ON customer.id = sales_order.cust_id; Page: 19