일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- putty
- Oracle
- 파이썬
- it 용어
- Python DataFrame
- 리눅스
- it용어
- tibero
- linux
- csharp
- Python 라이브러리
- Algorithm
- 리눅스 명령어
- PYTHON
- 파이썬 알고리즘
- 파이썬 데이터프레임
- dbeaver
- sql
- MariaDB
- 알고리즘
- 오라클
- VirtualBox
- 파이썬 전처리
- 데이터베이스
- HTML
- 코딩테스트
- python algorithm
- RFP
- Oracle VM VirtualBox
- C#
- Today
- Total
오경석의 개발노트
Oracle_NULL 함수 본문
■ NULL 관련 함수
- NULL 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.
- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL 값을 포함할 수 있다.
- NULL 값을 포함하는 연산의 경우 결과 값도 NULL 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다.
- 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우는 블랭크보다는 ‘x’ 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.
NVL/ISNULL 함수를 유용하게 사용하는 예는 산술적인 계산에서 데이터 값이 NULL일 경우이다. 칼럼 간 계산을 수행하는 경우 NULL 값이 존재하면 해당 연산 결과가 NULL 값이 되므로 원하는 결과를 얻을 수 없는 경우가 발생한다. 이런 경우는 NVL 함수를 사용해서 원하는 데이터를 얻는다. 관계형 데이터베이스의 중요한 데이터인 NULL을 처리하는 주요 함수는 다음과 같다.
[예제]
SELECT NVL (NULL, 'NVL-OK') AS NVL_TEST
FROM DUAL;
[예제]
SELECT NVL ('NOT-NULL', 'NVL-OK') AS NVL_TEST
FROM DUAL;
[예제] 선수 테이블에서 성남 일화천마(K08) 소속 선수의 이름과 포지션을 출력하는데, 포지션이 없는 경우는 '없음'으로 표시한다.
SELECT PLAYER_NAME AS 선수명,
NVL(POSITION, '없음') AS 포지션
FROM PLAYER
WHERE TEAM_ID = 'K08';
SELECT PLAYER_NAME AS 선수명,
CASE WHEN POSITION IS NULL THEN '없음'
ELSE POSITION
END AS 포지션
FROM PLAYER
WHERE TEAM_ID = 'K08';
[예제] 급여와 커미션을 포함한 연봉을 계산하면서 NVL 함수의 필요성을 알아본다.
SELECT
ENAME AS 사원명,
SAL AS 월급,
COMM AS 커미션,
(SAL * 12) + COMM AS 연봉A,
(SAL * 12) + NVL(COMM, 0) AS 연봉B
FROM EMP;
실행 결과에서 월급에 커미션을 더해서 연봉을 계산하는 산술식이 있을 때 커미션에 NULL 값이 있는 경우 커미션 값에 NVL() 함수를 사용하지 않으면 연봉A의 계산 결과가 NULL이 되어서 잘못 계산한 결과를 확인할 수 있다. 따라서 연봉B 결과와 같이 NVL(COMM,0)처럼 NULL 값을 0으로 변환하여 연봉을 계산해야 하는 것이다. 물론 곱셈을 사용해야 하는 경우에는 NVL(COMM,1)을 해야 한다. 그러나 NVL 함수를 다중행 함수의 인자로 사용하는 경우는 오히려 불필요한 부하를 발생할 수 있으므로 굳이 NVL 함수를 사용할 필요가 없다. 다중행 함수는 입력 값으로 전체 건수가 NULL 값인 경우만 함수의 결과가 NULL이 나오고 전체 건수 중에서 일부만 NULL인 경우는 다중행 함수의 대상에서 제외한다. 예를 들면 100명 중 10명의 성적이 NULL 값일 때 평균을 구하는 다중행 함수 AVG를 사용하면 NULL 값이 아닌 90명의 성적에 대해서 평균값을 구하게 된다.
■ NULL과 공집합
- 일반적인 NVL/ISNULL 함수 사용
[예제] 정상적으로 매니저 정보를 가지고 있는 SCOTT의 매니저를 출력한다.
SELECT MGR FROM EMP WHERE ENAME = 'SCOTT';
■ NULLIF
- NULLIF 함수는 EXPR1이 EXPR2와 같으면 NULL을, 같지 않으면 EXPR1을 리턴한다. 특정 값을 NULL로 대체하는 경우에 유용하게 사용할 수 있다.
NULLIF (EXPR1, EXPR2)
[예제] 사원 테이블에서 MGR와 7698이 같으면 NULL을 표시하고, 같지 않으면 MGR를 표시한다.
SELECT
ENAME,
EMPNO,
MGR,
NULLIF(MGR, 7698) AS NUIF
FROM EMP;
SELECT
ENAME,
EMPNO,
MGR,
CASE
WHEN MGR = 7698 THEN NULL
ELSE MGR
END NUIF
FROM EMP;
■ 기타 NULL 관련 함수(COALESCE)
- COALESCE 함수는 인수의 숫자가 한정되어 있지 않으며, 임의의 개수 EXPR에서 NULL이 아닌 최초의 EXPR을 나타낸다. 만일 모든 EXPR이 NULL이라면 NULL을 리턴한다.
COALESCE (EXPR1, EXPR2, …)
[예제] 사원 테이블에서 커미션을 1차 선택값으로, 급여를 2차 선택값으로 선택하되 두 칼럼 모두 NULL인 경우는 NULL로 표시한다.
SELECT
ENAME,
COMM,
SAL,
COALESCE(COMM, SAL) AS COAL
FROM EMP;
SELECT
ENAME,
COMM,
SAL,
CASE
WHEN COMM IS NOT NULL THEN COMM
ELSE (CASE
WHEN SAL IS NOT NULL THEN SAL
ELSE NULL
END)
END AS COAL
FROM EMP;
출처 : SQL 전문가 가이드
'프로그래밍 언어 > Oracle' 카테고리의 다른 글
Oracle_집계함수 (0) | 2023.11.10 |
---|---|
Oracle_WHERE 절 (0) | 2023.11.10 |
Oracle_CASE 표현 (0) | 2023.11.09 |
Oracle_변환형 함수 (0) | 2023.11.09 |
Oracle_날짜형 함수 (0) | 2023.11.09 |