-- CHAR[VARCHAR2] : column > chr(0) [ or column > ' ']
-- DATE : column > to_date('19000101','yyyymmdd')
-- NUMBER : column >= 0 OR column <
-- char(varchar2) 타입의 컬럼의 IS NOTNULL
-- 기본적으로 is not null 은 인덱스를 사용하지 못함으로 다음과 같은 문자 타입은
가장 작은 보다 큰값 조회 하는 방식으로 인덱스를 탈수있다.
SQL> WITH not_null_t AS ( SELECT 'a' AS c1 FROM DUAL
2 UNION ALL
3 SELECT null FROM DUAL
4 UNION ALL
5 SELECT 'b' FROM DUAL
6 UNION ALL
7 SELECT '0' FROM DUAL )
8 SELECT *
9 FROM not_null_t
10 WHERE c1 IS NOT NULL ;
C
-
a
b
0
SQL> WITH not_null_t AS ( SELECT 'a' AS c1 FROM DUAL
2 UNION ALL
3 SELECT null FROM DUAL
4 UNION ALL
5 SELECT 'b' FROM DUAL
6 UNION ALL
7 SELECT '0' FROM DUAL )SELECT *
8 FROM not_null_t
9 --WHERE c1 IS NOT NULL
10 WHERE c1 > CHR(0) ;
C
-
a
b
0
-- DATE 타입의 컬럼의 IS NOTNULL
SQL> ALTER SESSION SET nls_date_format = 'yyyy-mm-dd';
Session altered.
Elapsed: 00:00:00.00
SQL> WITH not_null_t AS ( SELECT TO_DATE('20110101','yyyymmdd') AS c1 FROM DUAL
2 UNION ALL
3 SELECT NULL FROM DUAL
4 UNION ALL
5 SELECT TO_DATE('20111111','yyyymmdd') FROM DUAL )
6 SELECT *
7 FROM not_null_t
8 WHERE c1 IS NOT NULL ;
C1
----------
2011-01-01
2011-11-11
Elapsed: 00:00:00.00
SQL> WITH not_null_t AS ( SELECT TO_DATE('20110101','yyyymmdd') as c1 FROM DUAL
2 UNION ALL
3 SELECT null FROM DUAL
4 UNION ALL
5 SELECT TO_DATE('20111111','yyyymmdd') FROM DUAL)
6 SELECT *
7 FROM not_null_t
8 WHERE c1 > TO_DATE('19000101','yyyymmdd'); -- C1 컬럼에 존재할 수 없는 이전 값
-- Number 타입의 컬럼에 IS NOT NULL
-- NUMBER 타입인 컬럼의 IS NOT NULL 조회는 0 을 기점으로 하여 모든 데이터를 추출하도록 조건을 변경하면 된다.
SQL> WITH t1 AS ( SELECT -1 AS c1 FROM DUAL
2 UNION ALL
3 SELECT NULL FROM DUAL
4 UNION ALL
5 SELECT 1 FROM DUAL
6 UNION ALL
7 SELECT 1.2 FROM DUAL
8 UNION ALL
9 SELECT 0 FROM DUAL)
10 SELECT *
11 FROM t1
12 WHERE c1 IS NOT NULL
13 ;
C1
----------
-1
1
1.2
0
SQL> WITH t1 AS ( SELECT -1 AS c1 FROM DUAL
2 UNION ALL
3 SELECT NULL FROM DUAL
4 UNION ALL
5 SELECT 1 FROM DUAL
6 UNION ALL
7 SELECT 1.2 FROM DUAL
8 UNION ALL
9 SELECT 0 FROM DUAL )
10 SELECT *
11 FROM t1
12 WHERE c1 >= 0 OR c1 < 0 ;
C1
----------
-1
1
1.2
0
- 강좌 URL : http://www.gurubee.net/lecture/3809
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.