ORACLE 11.2.0.1.0 NULL
12.08.11 |
|
|
|
|
|
|
|
|
1. NULL
NULL 값에 대해 ORACLE 의 동작 결과를 살펴본다.
2. Creating sample data
OGG@ONE >create table test(id int, dt int default 1);
Table created.
OGG@ONE >insert into test(id) 2 select level from dual connect by level < 4;
3 rows created.
OGG@ONE >insert into test(id) values(null);
1 row created.
OGG@ONE >commit;
Commit complete. |
위 과정을 통해 3개의 ID IS NOT NULL 인 Rows 를 입력했고,
하나의 ID IS NULL 인 ROW 를 입력했다.
.
3. Practice
A. NULL 의 크기
OGG@ONE >select * from test order by id desc;
ID DT ---------- ---------- 1 3 1 2 1 1 1 |
NULL DATA 는 가장 큰 값으로 취급된다.
B. COUNT(*) vs COUNT(ID)
OGG@ONE >select count(*), count(id) from test;
COUNT(*) COUNT(ID) ---------- ---------- 4 3 |
Asterisk 를 이용하여 count 하면 null 값을 포함한다.
하지만 count(column_name) 을 이용하는 경우에는 값이 null 이 아닌 값만 count 한다.
C. DISTINCT and GROUP BY
OGG@ONE >select distinct id, dt from test;
ID DT ---------- ---------- 1 2 1 3 1 1 1
OGG@ONE >insert into test(id) values(null);
1 row created.
OGG@ONE >commit;
Commit complete.
OGG@ONE >select distinct id, dt from test;
ID DT ---------- ---------- 1 2 1 3 1 1 1
OGG@ONE >select count(*) from test;
COUNT(*) ---------- 5
OGG@ONE >select distinct id, max(dt) from test 2 group by id;
ID MAX(DT) ---------- ---------- 1 1 1 2 1 3 1 |
Distinct 를 사용한 경우 null 간에는 같은 값으로 간주된다.
이는 group by 를 사용한 경우에도 마찬가지이다.
때문에 null 값을 두 개 입력했지만 결과에서는 하나만 나왔다.
D. SUM, AVG
OGG@ONE >select SUM(ID), AVG(ID), COUNT(*), COUNT(ID) FROM TEST;
SUM(ID) AVG(ID) COUNT(*) COUNT(ID) ---------- ---------- ---------- ---------- 6 2 5 3 |
SUM 에 대해서는 실제 값끼리 연산된다.
AVG 의 경우 SUM(ID) / COUNT(ID) 값을 가진다.
여기서 주의할 점은 SUM(ID) / COUNT(*) 값이 아니라는 점이다.