Operators in The WHERE Clause

The following operators can be used in the WHERE clause:
OperatorDescription
=Equal
<>Not equal. Note: In some versions of SQL this operator may be written as !=
>Greater than
<Less than
>=Greater than or equal
<=Less than or equal
BETWEENBetween an inclusive range
LIKESearch for a pattern
INTo specify multiple possible values for a column
HOW TO USE 「IN」 OPERATOR
-- When use IN
SELECT
  *
FROM
  TABLE_NAME
WHERE
  COLUMN_NAME  IN ('VALUE1', 'VALUE2');
  
-- When use OR
SELECT 
  * 
FROM 
  TABLE_NAME 
WHERE 
  COLUMN_NAME = 'VALUE1' OR COLUMN_NAME = 'VALUE2';

Posted by JimmyUm
,

실행 계획의 작업 내용 목록

성능 튜닝 가이드 등의 실행 계획 읽기에 기재 되어있는 것은 오타 및 누락이 좀 있었다. 
설명서에 기재되어 이외에도 sql문 자체 운영자 메모리 정렬 및 WINDOW 조작 등 많은 운영자와 옵션이 인터넷에서 조사한 범위에서는 총 약 200개 정도 있다.

성능 튜닝 설명서에 기재되어있는 목록 + 자체 보충

결합 처리에 관한 실행 계획

조작옵션작업 내용ver. (※ 1)
NESTED LOOP

nested 루프 조인 을 사용한 결합 처리

8.0 이전
OUTER중첩 루프를 사용하여 외부 조인 처리
MERGE JOIN2 개의 행 세트 각각 특정 항목으로 정렬하고 결합 된 결과를 리턴 (정렬은 다른 운영자에 나오는) ⇒ 정렬 병합 조인8.0 이전
OUTER병합에 의한 외부 조인
ANTI병합 된 앤티 결합 (반대 결합)
SEMI병합에 의한 세미 결합 (세미 조인)
CARTESIAN병합에 의한 CARTESIAN = 데카르트 (直積)Oracle 9i Release2 (※ 1)
HASH JOIN해시로 2 개의 행 세트의 결합8.0 이전
ANTI해시 앤티 결합 (반대 결합)
SEMI해시 의한 세미 결합 (세미 조인)
RIGHT ANTI해시로 오른쪽 안티 결합Oracle 10g
RIGHT SEMI해시로 오른쪽 세미 조인
OUTER해시로 (왼쪽) 외부 조인
RIGHT OUTER해시로 오른쪽 외부 조인
CUBE SCANINNER JOIN 의한 큐브 액세스Oracle 11g
PARTIAL OUTERINNER JOIN과 OUTER JOIN이 혼성 된 큐브 액세스
OUTEROUTER JOIN 의한 큐브 액세스

인덱싱 실행 계획

조작옵션작업 내용ver. (※ 1)
BITMAPCONVERSIONTO ROWIDS : Bitmap 인덱스의 비트 맵 표현을 ROWID로 변환8.0 이전
FROM ROWIDS : ROWID를 비트 맵으로 표현하기
COUNT : ROWID의 수를 돌린다. 테이블의 값을 필요로하지 않는 경우에 유용 (유용)
INDEXSINGLE VALUE : 임의의 키 값의 비트 맵을 얻을
RANGE SCAN : 범위의 키 값의 비트 맵을 얻을
FULL SCAN : 전체 인덱스 스캔을 수행
MERGE여러 비트 맵을 하나로 병합하기
MINUS2 개의 비트 맵의 ​​비트 빼기
OR비트 맵 OR 연산
AND비트 맵 AND 연산Oracle 9i Release2 (※ 1)
KEY ITERATION

"표"에서 행을 꺼내 색인에서 해당 비트 맵을 검색하는 (이 처리 후에는 BITMAP MERGE 작업이 따른다)

DOMAIN INDEX도메인 인덱스에서 ROWID를 얻을8.1
INDEXUNIQUE SCANB-Tree 인덱스 에서 고유 키를 사용하여 하나의 ROWID를 얻을8.0 이전
RANGE SCAN인덱스에서 범위 (시작 키, 정지 키)를 키로 해 1 이상의 ROWID의 취득
RANGE SCAN DESCENDINGINDEX RANGE SCAN을 색인 값의 내림차순으로 검색
FULL SCAN색인에서 모든 ROWID의 취득Oracle 9i Release2 (※ 1)
FULL SCAN DESCENDINGINDEX FULL SCAN을 인덱스의 내림차순으로 행하는
FAST FULL SCANINDEX FULL SCAN의 고속 버전 : 다중 블록 읽기를 사용하기 위해 취득 순서는 부정. 인덱스에 모든 컬럼이 포함되어있는 경우 TABLE FULL SCAN과 같은 의미가된다 (※ 즉 ROWID뿐만 아니라 컬럼 값도 얻을)Oracle 9i Release2(※ 1) 
CBO 만
SKIP SCANINDEX SKIP SCAN 을 사용하여 ROWID의 취득

테이블 액세스 / 구체화 된 뷰 액세스에 대한 실행 계획

조작옵션작업 내용ver. (※ 1)
TABLE ACCESSFULL테이블의 모든 행을 반환8.0 이전
CLUSTER"인덱스 클러스터 키 값"을 사용하여 테이블에서 행을 검색하는
HASH"해시 클러스터 키 값"을 사용하여 테이블에서 행을 검색하는
BY ROWIDROWID 를 사용하여 테이블에서 행을 검색하는 
Oracle 9iR2에서 소멸
BY USER ROWIDROWID를 사용하여 테이블에서 행을 검색하는 (ROWID를 조건으로 지정한 경우)8.1
BY INDEX ROWID색인을 사용하여 행을 검색하기 (인덱스는 분할하지 않은 것)
BY GLOBAL INDEX ROWID글로벌 인덱스만을 사용하여 행을 검색하기
BY LOCAL INDEX ROWID로컬 색인과 0 개 이상의 글로벌 색인을 사용하여 행을 검색하기
SAMPLE표에서 행의 샘플 채취 ( 테이블 데이터를 랜덤 샘플링한다 )Oracle 9i Release2 (※ 1)
BY ROWID RANGEROWID 범위를 사용하여 테이블에서 행을 검색하는
SAMPLE BY ROWID RANGEROWID 범위를 사용하여 테이블에서 행의 샘플 채취
MAT_VIEW ACCESSFULLTABLE ACCESS "FULL"의 실현 전망 판Oracle 10g
CLUSTER이 CLUSTER 옵션 조작
HASH이 HASH 조작
BY USER ROWID동 BY USER ROWID 옵션 조작
BY INDEX ROWID동 BY INDEX ROWID 옵션 조작
BY GLOBAL INDEX ROWID동 BY GLOBAL INDEX ROWID 옵션 조작
BY LOCAL INDEX ROWID동 BY LOCAL INDEX ROWID 옵션 조작
SAMPLE이 SAMPLE 옵션 조작
BY ROWID RANGE동 BY ROWID RANGE 옵션 조작
SAMPLE BY ROWID RANGE이 SAMPLE BY ROWID RANGE 옵션 조작
MAT_VIEW REWRITE ACCESSFULL 
... 
etc
TABLE ACCESS "FULL"의 실현 전망 재 작성 버전 
아마 MAT_VIEW ACCESS와 같은 옵션 군이있는 것으로 보인다.
Oracle 10g
VIEW 의 쿼리를 실행하고 행을 반환8.0 이전

행 작업에 대한 실행 계획, 기타

조작옵션작업 내용ver. (※ 1)
AND-EQUAL여러 ROWID 집합을 사용 중복을 없애고 공통 ROWID를 다시8.0 이전
CONNECT BYCONNECT BY 쿼리에 대해 계층 순서로 행을 반환8.0 이전
CONCATENATION여러 행 세트의 UNION ALL을 수행 ⇒ UNION8.0 이전
COUNT선택된 행 수를 계산하는8.0 이전
STOPKEYWHERE에서 ROWNUM 조건에 의해 리턴되는 행 수를 제한 한 계산 처리
FILTER행 세트에서 조건에 부합되는 것만을 얻을8.0 이전
FIRST ROW질의 결과의 첫 번째 행만 가져 오기8.0 이전
FOR UPDATEFOR UPDATE 절 에 의한 행 잠금 처리8.0 이전
HASHGROUP BY해시하여 행 집합을 그룹화하는 
HASH JOIN과는 별개
Oracle 10g Release2
HASHUNIQUE해시하여 행 세트의 중복을 제거 처리 
※ 문서 없음 Oracle 11g R1 현재
INLIST ITERATORIN 목록 조건 의 각각의 값에 대한 후속 작업을 반복하는8.0 이전
CONNECT BYCONNECT BY 쿼리에 대해 계층 순서로 행을 반환8.0 이전
REMOTE원격 데이터베이스에서 데이터를 검색하는8.0 이전
SEQUENCE순서 값 의 액세스를 따른 처리8.0 이전
SORTAGGREGATE선택한 행 집합으로 그룹화하고 집계 된 행 세트에 그룹 함수를 적용한 결과의 취득 (결과는 한 줄로된다)8.0 이전
UNIQUE행 집합을 정렬하고 중복을 제거
GROUP BYGROUP BY 절에 의한 것. 행 세트의 그룹화를위한 전처리로 정렬 ⇒ HASH GROUP BYOracle 10g Release2
JOIN병합 전처리 정렬 작업
ORDER BYORDER BY 절에 의한 행 집합의 정렬
UNION2 개의 행 집합의 합집합에서 중복을 없애고 얻을 
UNION ALL 처리 ⇒ CONCATENATION
8.0 이전

파티션 처리에 관한 실행 계획

조작옵션작업 내용ver. (※ 1)
PARTITIONPARTITION_START 열 및 PARTITION_STOP 라인에 의해 지정된 범위의 파티션에 대해 후속 작업을 반복하는8.0 이전
SINGLE하나의 파티션에 액세스8.1
ITERATOR여러 파티션에 액세스
ALL모든 파티션에 액세스
INLISTIN 목록을 바탕으로 한 파티션에 반복자
INVALID액세스 할 파티션 세트가 하늘

병렬 처리에 대한 실행 계획

조작옵션작업 내용ver. (※ 1)
PX ITERATORBLOCK(Parallel eXecution iterator) 병렬 슬레이브 세트 사이의 블록 또는 청크 범위에 객체 분할Oracle 10g
CHUNK
PX COORDINATOR병렬 실행 조정자 (Query Coordinator)Oracle 10g
PX PARTITION병렬 실행을위한 PARTITION 조작Oracle 10g
PX RECEIVEPX SEND 노드에서 전송되는 분할 된 데이터를 읽을 수신기 (이전 DISTRIBUTION 열에 표시되어 있던 것)Oracle 10g
PX SENDQC (RANDOM)병렬 세트 간의 배분 방법의 구현. 랜덤 해시 레인지에 의한 분할 (이전 DISTRIBUTION 열에 표시되어 있던 것)Oracle 10g
HASH
RANGE

집합 연산에 관한 실행 계획

조작옵션작업 내용ver. (※ 1)
MINUS2 개의 행 세트에서 첫 번째 세트에 있고 두 번째 세트에없는 행을 검색하며 중복 제거 처리8.0 이전
INTERSECTION2 개의 행 집합에서 중복을 없애고 공통 부분을 다시8.0 이전
UNION-ALL2 개의 행 세트를 합을 반환 (중복 행 삭제하지)8.0 이전

(※ 1) 설명서에 기재되기 시작한 문서의 버전을 기재하고있다. 따라서 Oracle 9i R2라고 써 있어도 Oracle 9i R1과 그 이전부터 구현되는 기능이 몇 가지있다. 즉 기재된 버전의 기능은 없다.

본문은 일본 사이트를 인용 하였습니다.


Posted by JimmyUm
,
SQL Statement Syntax
AND / OR SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
ALTER TABLE ALTER TABLE table_name
ADD column_name datatype

or

ALTER TABLE table_name
DROP COLUMN column_name

AS (alias) SELECT column_name AS column_alias
FROM table_name

or

SELECT column_name
FROM table_name  AS table_alias

BETWEEN SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database_name
CREATE TABLE CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
...
)
CREATE INDEX CREATE INDEX index_name
ON table_name (column_name)

or

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

CREATE VIEW CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
DELETE DELETE FROM table_name
WHERE some_column=some_value

or

DELETE FROM table_name
(Note: Deletes the entire table!!)

DELETE * FROM table_name
(Note: Deletes the entire table!!)

DROP DATABASE DROP DATABASE database_name
DROP INDEX DROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)
DROP TABLE DROP TABLE table_name
EXISTS IF EXISTS (SELECT * FROM table_name WHERE id = ?)
BEGIN
--do what needs to be done if exists
END
ELSE
BEGIN
--do what needs to be done if not
END
GROUP BY SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
IN SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
INSERT INTO INSERT INTO table_name
VALUES (value1, value2, value3,....)

or

INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)

INNER JOIN SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LEFT JOIN SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOIN SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOIN SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LIKE SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
ORDER BY SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECT SELECT column_name(s)
FROM table_name
SELECT * SELECT *
FROM table_name
SELECT DISTINCT SELECT DISTINCT column_name(s)
FROM table_name
SELECT INTO SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_table_name

or

SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name

SELECT TOP SELECT TOP number|percent column_name(s)
FROM table_name
TRUNCATE TABLE TRUNCATE TABLE table_name
UNION SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
UPDATE UPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value
WHERE SELECT column_name(s)
FROM table_name
WHERE column_name operator value

'※ Jimmy's > DB' 카테고리의 다른 글

[DB ORACLE] 오라클 실행 계획의 작업 내용 목록  (0) 2016.11.22
[MySQL] MySQL에서 sql 파일 실행방법  (0) 2016.11.17
[Oracle] Oracle SQL 에러코드 와 종류  (0) 2016.11.15
[Erwin] oracle table import  (0) 2014.08.05
INTO  (0) 2014.05.15
Posted by JimmyUm
,

 

Oracle SQL 에러코드 (ERROR CODE) 와 종류

 

ORA-00000: Normal, successful completion
ORA-00001: Unique constraint (string.string) violated
ORA-00017: Session requested to set trace event
ORA-00018: Maximum number of sessions exceeded
ORA-00019: Maximum number of session licenses exceeded
ORA-00020: Maximum number of processes (string) exceeded
ORA-00021: Session attached to some other process; cannot ...
ORA-00022: Invalid session ID; access denied
ORA-00023: Session references process private memory; cann...
ORA-00024: Logins from more than one process not allowed i...
ORA-00025: Failed to allocate string
ORA-00026: Missing or invalid session ID
ORA-00027: Cannot kill current session
ORA-00028: Your session has been killed
ORA-00029: Session is not a user session
ORA-00030: User session ID does not exist.
ORA-00031: Session marked for kill
ORA-00032: Invalid session migration password
ORA-00033: Current session has empty migration password
ORA-00034: Cannot string in current PL/SQL session
ORA-00036: Maximum number of recursive SQL levels (string)...
ORA-00037: Cannot switch to a session belonging to a diffe...
ORA-00038: Cannot create session: server group belongs to ...
ORA-00040: Active time limit exceeded - call aborted
ORA-00041: Active time limit exceeded - session terminated
ORA-00042: Unknown Service name string
ORA-00050: Operating system error occurred while obtaining...
ORA-00051: Timeout occurred while waiting for a resource
ORA-00052: Maximum number of enqueue resources (string) ex...
ORA-00053: Maximum number of enqueues exceeded
ORA-00054: Resource busy and acquire with NOWAIT specified
ORA-00055: Maximum number of DML locks exceeded
ORA-00056: DDL lock on object "string.string" is already h...
ORA-00057: Maximum number of temporary table locks exceeded
ORA-00058: DB_BLOCK_SIZE must be string to mount this data...
ORA-00059: Maximum number of DB_FILES exceeded
ORA-00060: Deadlock detected while waiting for resource
ORA-00061: Another instance has a different DML_LOCKS setting
ORA-00062: DML full-table lock cannot be acquired; DML_LOC...
ORA-00063: Maximum number of log files exceeded string
ORA-00064: Object is too large to allocate on this O/S (st...
ORA-00065: Initialization of FIXED_DATE failed
ORA-00067: Invalid value string for parameter string; must...
ORA-00068: Invalid value string for parameter string, must...
ORA-00069: Cannot acquire lock -- table locks disabled for...
ORA-00070: Command string is not valid
ORA-00071: Process number must be between 1 and string
ORA-00072: Process "string" is not active
ORA-00073: Command string takes between string and string ...
ORA-00074: No process has been specified

'※ Jimmy's > DB' 카테고리의 다른 글

[MySQL] MySQL에서 sql 파일 실행방법  (0) 2016.11.17
[SQL] DB SQL Statement 함수정리  (0) 2016.11.16
[Erwin] oracle table import  (0) 2014.08.05
INTO  (0) 2014.05.15
INNER, (LEFT, RIGHT) OUTER JOIN, UNION (ALL)  (0) 2014.05.14
Posted by JimmyUm
,