검수요청.png검수요청.png

"널"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
12번째 줄: 12번째 줄:
  
 
==특징==
 
==특징==
 +
===널 보급===
 +
;수학적 연산
 +
널은 데이터 값이 아니라, 미지의 값에 대한 표시일 뿐이기 때문에, 널에 수학적 연산을 사용하는 것은 미지의 값으로 나타난다. 아래의 예에서, 10을 널에 곱하면 결과값은 널이 된다.
 +
10 * NULL          -- 결과는 NULL
 +
이것은 예기치 않은 결과를 야기한다. 예를 들어, 널을 0으로 나누려 한다면, 플랫폼은 ‘0으로 나눈’ 예상된 데이터 예외 값을 던지는 대신, 널 값을 반환한다. 비록 이러한 행위가 ISO SQL 표준으로 정의되어 있지는 않지만, 많은 DBMS 벤더들이 이러한 연산을 유사하게 다룬다. 예를 들어, 오라클, PostgreSQL, MySQL 서버, 그리고 마이크로소프트 SQL 서버 플랫폼은 모두 널 값을 아래와 같이 반환한다.
 +
NULL / 0
 +
;문자열 연속
 +
SQL에서 흔히 볼 수 있는 문자열 연속 연산 또한 연산자 중 하나가 널 값일 때 널 값으로 나타난다. 아래의 예제는 SQL || 문자열 연속 연산자에 널을 사용함으로써 널 값이 리턴되는 것을 보여준다.
 +
'생선' || NULL || '김치'  -- 결과는 NULL
 +
모든 데이터베이스에서 이러한 것은 아니다. 오라클 RDBMS를 예로 들면, 널 과 빈 문자열은 동일한 것으로 취급되어, '생선' || NULL || '김치'는 ‘생선 김치’로 나타난다.<ref name="이름"></ref>
  
 
{{각주}}
 
{{각주}}

2020년 8월 3일 (월) 11:11 판

(NULL)이란 어떠한 값도 가지지 않고 있다는 뜻이다. 널값이라고도 한다. 널은 빈칸과 같은 개념으로서, 이용할 수 없는, 할당되지 않은, 적용 불가능하다는 의미이다. 널값을 포함한 어떠한 산술식의 결과 역시 널(NULL)이 된다.

개요

널(null, 간단히 NUL)은 사전적인 뜻으로 '값이 없음'을 나타내는 영단어이며 값이 없다는 것은 그 값이 0조차 아니라는 뜻이다. 독일어에선 숫자 0이란 뜻으로 쓰인다. 독일식으로는 눌, 영미식으로는 널이라고 발음한다. 구조적 질의 언어 (SQL)에서는 데이터베이스 내의 데이터 값이 존재하지 않다는 것을 지시하는데 사용되는 특별한 표시어이다. 데이터베이스 관계 모델의 창시자인 E. F. 콧(E. F. Codd)에 만들어진 개념으로, SQL NULL은 모든 true RDBMS가 빠진 정보와 적용할 수 없는 정보를 지원해야 한다는 요구 사항을 충족시키는 역할을 한다. 콧은 또한 데이터베이스 이론에서 널을 표현하기 위해 그리스어의 오메가의 소문자(ω)를 이용할 것을 도입했다. 널은 SQL에서 널 특수 표시를 구분하기 위해 사용되는 유보된 키워드이다.
널은 SQL 조인에서 사용하기 위해 필수적인 3치 자궁로 인해 논란의 중심이 되어 왔다. 컴퓨터 과학자인 론 밴 더 메이든 교수는 그러한 여러 문제를 다음과 같이 요약했다. SQL 표준에서 비일관성은 SQL에서 널의 취급 문제를 직관적인 논리 어휘 탓으로 돌리는 것은 가능하지 않다는 것을 의미하는 것이다. 이 문제를 해결하기 위해 여러 해법들이 제시되었지만, 대안의 복잡성은 폭넓은 이론 확산의 걸림돌이 되었다.
데이터베이스 비전문가들에게, 널이 뜻하는 바가 무엇인지 이해하는 좋은 방법은 정보적 측면을 기억하는 것이다. “값의 부족”은 0값과 동일한 의미가 아니며, 유사하게 ‘정답의 부족’이라는 말도 정답이 없다는 말과 같은 의미가 아니다. 예를 들어, 다음과 같은 질문을 예로 들어보자. “철수가 책을 몇 권 가지고 있지?” 답은 0(하나도 가지고 있지 않다는 것을 안다면) 또는 null(그가 가지고 있는지, 아닌지 또는 얼마나 가지고 있는지 모름)일 것이다. 데이터베이스 테이블에서, 이러한 답을 가진 컬럼은 null 값으로 시작할 것이다. 그리고 철수가 책을 가지고 있다는 것이 확인되기 전까지는 0으로 수정되지 않을 것이다. 유사하게, 질문이 “철수가 차를 가지고 있어?”라는 질문에도 “모르겠는데”라는 정답은 “아니!(No)”라는 것과 같은 의미가 아니다. 전자는 데이터베이스의 Null 목록을 생성하며, 후자는 데이터베이스 엔트리에서 No를 생성한다.
아스키(ASCII)코드에서는 0번(0x00)에 해당하는 제어 문자이다. 화면상에는 표시되지 않고 오직 바이트 상으로만 존재한다. 단, 윈도우 한정으로 일반적인 텍스트 편집기에서는 고정폭 글꼴을 쓰는 경우에 한해서 공백 비슷하게 표시되는 경우가 있다. 텍스트를 입력하는 필드 같은 데서 바이트 수가 정해져 있는 데, 그 바이트 수를 채우지 못하고 끝내버리면 오류가 발생할 수도 있다. 이런 경우에 바이트 수를 임의로 채우기 위해 나머지 자리에 널 문자를 넣는다. 예를 들면 MP3 파일에 사용되는 ID3 태그 같은 것들이 있다. 일부 프로그램은 널 문자가 아닌 공백 문자(0x20)를 대신 입력하는 경우도 있다. FAT 파일 시스템에서도 공백으로 채운다. 예를 들면, ABCDEFG.TXT라는 파일은 ABCDEFG .TXT와 같이 기록된다. 이외에도 ISO/IEC 646 (아스키), C0 제어 코드, 국제 문자 집합 (유니코드의 U+0000), 확장 이진화 십진법 교환 부호(EBCDIC)와 같은 수많은 문자 집합에 존재한다. 주로 쓰이는 거의 모든 프로그래밍 언어에서 사용할 수 있다.[1][2]

역사

E. F. 콧(E. F. Codd)은 1975년 그의 논문 'FDT Bulletin of ACM-SIGMOD'에서 널을 빠진 데이터를 나타내는 수단으로서 언급했다. SQL에서 채택된 널을 설명하기 위해 가장 보편적으로 인용되는 콧의 논문은 1979년 논문이었던 'ACM Transactions on Database Systems'으로 비록 이후의 논문에서 많은 제안들 대부분이 모호한 채로 남아있지만, 여기에서 그는 또는 관계 모델/태즈매니아를 소개했다. 1979년 논문 2.3장에는 수학적 연산에서의 널 보급의 세부적인 사항과 널 값을 비교할 때, 3가 논리를 이용하는 비교도 소개를 했다. 여기에는 또한 다른 연산자 셋과 Null을 취급하는 것도 소개를 했으며, 후자의 이슈는 오늘날에도 여전히 논란이 많은 문제이다. 데이터베이 이론계에서는, 1975년과 1979년 제안한 콧의 원래 이론들이 지금은 ‘콧의 테이블’로 언급되고 있다. 콧은 이후에 모든 관계형 데이터베이스 관리 시스템이 빠진 데이터를 지시하기 위해 널에 지원해야할 그의 요구사항을 1985년 '컴퓨터월드 매거진'에 기고한 2개의 글을 통해 보강했다. 1986년 SQL 표준은 근본적으로 IBM 시스템 R에서 수행 프로토타입 이후 콧의 제안을 채택했다. 비록 돈 챔벌린은 널 값을 SQL에서 가장 논쟁적인 특징으로 규정했지만, 그는 빠진 정보를 설명하는 가장 비용이 적게 드는 시스템 지원이라는 실용적인 측면을 들어 SQL에서 널의 설계를 옹호했다.[2]

특징

널 보급

수학적 연산

널은 데이터 값이 아니라, 미지의 값에 대한 표시일 뿐이기 때문에, 널에 수학적 연산을 사용하는 것은 미지의 값으로 나타난다. 아래의 예에서, 10을 널에 곱하면 결과값은 널이 된다.

10 * NULL          -- 결과는 NULL

이것은 예기치 않은 결과를 야기한다. 예를 들어, 널을 0으로 나누려 한다면, 플랫폼은 ‘0으로 나눈’ 예상된 데이터 예외 값을 던지는 대신, 널 값을 반환한다. 비록 이러한 행위가 ISO SQL 표준으로 정의되어 있지는 않지만, 많은 DBMS 벤더들이 이러한 연산을 유사하게 다룬다. 예를 들어, 오라클, PostgreSQL, MySQL 서버, 그리고 마이크로소프트 SQL 서버 플랫폼은 모두 널 값을 아래와 같이 반환한다.

NULL / 0
문자열 연속

SQL에서 흔히 볼 수 있는 문자열 연속 연산 또한 연산자 중 하나가 널 값일 때 널 값으로 나타난다. 아래의 예제는 SQL || 문자열 연속 연산자에 널을 사용함으로써 널 값이 리턴되는 것을 보여준다.

'생선' || NULL || '김치'   -- 결과는 NULL

모든 데이터베이스에서 이러한 것은 아니다. 오라클 RDBMS를 예로 들면, 널 과 빈 문자열은 동일한 것으로 취급되어, '생선' || NULL || '김치'는 ‘생선 김치’로 나타난다.[2]

각주

참고자료

같이 보기

  검수요청.png검수요청.png 이 널 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.