데이터베이스/데이터베이스 공부

NULL과 공집합(NULL의 특성, 집계함수, 공집합)

아밍나 2022. 8. 18. 23:48
728x90

NULL의 특성

1) 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다.
→ 0은 숫자이고 공백은 하나의 문자이다.
2) 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.
3) 널 값을 포함하는 연산의 경우 결과 값도 널 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다.
4) 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우는 블랭크보다는 'x' 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.
5)  AVG, SUM, COUNT와 같은 집계함수에서 NULL인 행은 제외 후 집계된다.

공집합 

조건에 맞는 데이터가 한 건도 없는 경우로, 집계함수로 처리해야 한다.

→ 일반적인 NULL 데이터와 다르다.

   ex) SELECT COL2 FROM TAB1 WHERE COL1 = 'z';

   WHERE COL1 = 'z'가 공집합이므로 결과는 공집합.

   ex) SELECT COUNT(COL2) FROM TAB1 WHERE COL1 = 'z';

   → WHERE COL1 = 'z'가 공집합이므로 COUNT 결과는 0.

   ex) SELECT SUM(COL2) FROM TAB1 WHERE COL1 = 'z';

   SUM은 입력 값의 전체 건수가 NULL 일 경우 함수의 결과가 NULL 이 되며 공집합도 동일한 결과.

  결과는 NULL.


관련 문제를 살펴보자.

Q. 다음 중 아래 TAB1을 보고 각 SQL 실행 결과를 가장 올바르게 설명한 것을 고르시오.

① SELECT COL2 FROM TAB1 WHERE COL1 = 'b';

→ 실행 결과가 없다.(공집합)

② SELECT ISNULL(COL2, 'X') FROM TAB1 WHERE COL1 = 'a';

→ 실행 결과로 'X'를 반환한다.

③ SELECT COUNT(COL1) FROM TAB1 WHERE COL2 = NULL;

→ 실행 결과는 1이다.

④ SELECT COUNT(COL2) FROM TAB1 WHERE COL1 IN ('b', 'c');

→ 실행 결과는 1이다.

더보기

정답: 

해설:

① 공집합은 조건에 맞는 데이터가 한 건도 없는 경우이다. COL1이 'b'일 때의 COL2는 ''(공백)으로, 조건에 맞는 값이 있기 때문에 ''(공백)이 출력된다.

→ 실행 결과는 ''(공백)이다.

③ COUNT는 NULL인 행은 제외하고 집계된다.

→ 실행 결과는 0이다.

④ b와 c의 COL2는 각각 ''(공백), 3이다. 공백도 하나의 문자이므로 COUNT에 포함된다.

→ 실행 결과는 2이다.


참고 사이트) https://hoing.io/archives/287#i-2

 

728x90
반응형