본문 바로가기

카테고리 없음

ORACLE 11.2.0.1.0 NULL v1.0

ORACLE 11.2.0.1.0 NULL

 

Date

Ver

Etc.

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(*) 값이 아니라는 점이다.