인덱스가 사용되지 않는 경우
SELECT dept, ename
FROM emp
WHERE SUBSTR(job, 1, 4)='SALE'
SELECT dept, ename
FROM emp
WHERE job LIKE 'SALE%'
SELECT dept, ename
FROM emp
WHERE sal*12 = 100000
SELECT dept, ename
FROM emp
WHERE sal = 100000/12
SELECT dept, ename
FROM emp
WHERE NVL(job, 'X') = 'SALE'
SELECT dept, ename
FROM emp
WHERE job = 'SALE'
SELECT custno, chuldate
FROM chulgot
WHERE custno = 'DN01'
AND status = '90'
SELECT custno, chuldate
FROM chulgot
WHERE custno = 'DN01'
AND RTRIM(status) = '90'
SELECT x.ordno, x.ord_date, y.item, y.ordqty
FROM ORDER1T x, ORDER2T y
WHERE x.ordno = y.ordno
AND x.ord_date LIKE '9502%'
AND y.orddept = '12345'
ORDER BY ord_date
SELECT x.ordno, x.ord_date, y.item, y.ordqty
FROM ORDER1T x, ORDER2T y
WHERE x.ordno = y.ordno
AND x.ord_date LIKE '9502%'
AND RTRIM(y.orddept = '12345')
ORDER BY ord_date
SELECT sal_no, sale_date, sale_dept, saleqty
FROM mechult
WHERE sale_date LIKE '95%'
ORDER BY sale_dept
SELECT sal_no, sale_date, sale_dept, saleqty
FROM mechult
WHERE RTRIM(sale_date) LIKE '95%'
AND sale_dept > ''
SELECT chr,num,var,dat
FROM samplet
WHERE chr = 10
SELECT chr,num,var,dat
FROM samplet
WHERE chr = '10'
SELECT 'Not found'
FROM EMP
WHERE EMPNO <> 7369
SELECT 'NOT FOUND'
FROM DUAL
WHERE NOT EXISTS
( SELECT 'X' FROM EMP
WHERE EMPNO = 7369 )
SELECT 'Not found'
FROM emp a
WHERE NOT EXISTS
(SELECT empno FROM emp b
WHERE b.empno = 7369
AND a.empno = b.empno)
1)
SELECT *
FROM TAB1
WHERE YYYYMM = '199910'
FROM TAB2AND NOT EXISTS ( SELECT *
WHERE COL2 = COL1
AND YYYYMM = '199910')
2)
SELECT *
FROM TAB1
WHERE YYYYMM ='199910'
AND COL1 NOT IN (SELECT COL2
FROM TAB2
WHERE YYYYMM = '199910')
3)
SELECT *
FROM TAB1
WHERE (YYYYMM, COL1) IN (SELECT '199910', COL1
FROM TAB1
WHERE YYYYMM = '199910'
MINUS
SELECT '199910', COL2
FROM TAB2
WHERE YYYYMM = '199910')
SELECT *
FROM emp
WHERE ename IS NOT NULL
SELECT *
FROM emp
WHERE ename > ''
SELECT *
FROM emp
WHERE empno IS NOT NULL
SELECT *
FROM emp
WHERE empno > 0
SELECT *
FROM emp
WHERE ename IS NULL
CREATE TABLE emp(
ename VARCHAR2(20) DEFAULT '00'
......
)
SELECT ord_dept, SUM(ordqty), AVG(ordqty+asnqty), AVG(ordqty)
FROM ORDER
WHERE status < 'C'
GROUP BY ord_dept
NULL 공포증의 해소 방안
'확정은 되었으나 값이 없다' 경우에는 문자 타입일 때는 ' '(Space)나 기타 문자를 필요에 따라 지정하고, 숫자 타입일 때는 0 을 지정한다.
'미확정'인 값도 하나의 의미를 지닌 값이라고 보아야 한다는 것이 NULL 값이 만들어진 이유이다.
테이블을 생성시 DEFAULT 제약조건을 이용해서 기본값을 지정하여 처리 할 수도 있다.
NVL함수의 사용으로 인한 불필요한 연산 보다는 NULL값에 대한 일관성을 유지하는 것이 필요하다.
SELECT ord_dept, ordqty
FROM ORDER1T
WHERE status = 'C'
AND ord_date like '9502%'
SELECT ord_dept, ordqty
FROM ORDER1T
WHERE status = 'C'
AND ord_date = '950201'
SELECT ord_dept, ordqty
FROM ORDER1T
WHERE ord_dept like '12%'
AND ord_date like '9502%'
범위 처리가 넓다고 할 수 있는 'LIKE', 'BETWEEN', '<', '>'등과 같이 사용될 경우 결코 인덱스 머지를 하지 않고 어느 하나의 인덱스만 사용하고 나머지는 포기한다.
SELECT *
FROM emp
WHERE ename > 'A'
힌트의 사용 방법
/*\+ \*/ : 힌트의 내용을 여러 라인에 걸쳐서 기술할 수 있음.
\--\+ : 오직 한 라인에만 기술해야 하며, 컬럼은 반드시 다음 라인에 기술해야 함.
ORACLE_Hint 정리