NULL 처리함수(IS[NOT] NULL, NVL(c,val), NVL2(C, VALL, VAL2))
1) IS[NOT] NULL
- 특정 컬럼의 값이 NULL인지 판단
- NULL은 '='기호로 판단될 수 없음
(사용 형식)
컬럼명 IS [NOT] NULL
사용 예) 사원테이블에서 영업실적코드(COMMISION_PCT)가 NULL이 아닌 사원정보를 조회하시오
SELECT A.EMPLOYEE_ID AS 사원번호,
A.EMP_NAME AS 사원명,
B.DEPARTMENT_NAME AS 부서명,
A.COMMISSION_PCT AS 영업실적,
A.SALARY AS 급여
FROM EMPLOYEES A, DEPARTMENTS B
WHERE A.DEPARTMENT_ID =B.DEPARTMENT_ID
AND A.COMMISSION_PCT IS NOT NULL;
2) NVL(c,val)
- NULL 처리 함수 중 가장 널리 사용
- c 컬럼에 값이 NULL이면 val값을 반환하고, NULL이 아니면 자신의 값을 반환
- 주로 연산식에 사용됨
- c와 val의 데이터 타입이 같아야 한다
사용 예) 사원테이블에서 영업실적에 따른 보너스를 계산하고 이번달 지급액을 조회하시오
보너스 = 급여 * 영업실적
지급액 = 급여 + 보너스
Alias는 사원번호,이름,부서명,본봉,영업실적,보너스,지급액이다
SELECT A.EMPLOYEE_ID AS 사원번호,
A.EMP_NAME AS 이름,
B.DEPARTMENT_NAME AS 부서명,
A.SALARY AS 본봉,
-- NVL(TO_CHAR(A.COMMISSION_PCT,'0.00'),'없음') AS 영업실적,
-- TO_CHAR(NVL(A.COMMISSION_PCT,0.0),'0.00') AS 영업실적,
NVL(TO_CHAR(A.COMMISSION_PCT,'0.00'),'없음') AS 영업실적,
NVL(ROUND(A.SALARY*A.COMMISSION_PCT,1),0) AS 보너스,
A.SALARY+NVL( ROUND(A.SALARY*A.COMMISSION_PCT,1),0) AS 지급액
FROM EMPLOYEES A, DEPARTMENTS B
WHERE A.DEPARTMENT_ID= B.DEPARTMENT_ID;
--연산에 NULL이 들어갈 수 있는 경우 테이블 생성할 때 컬럼지정에 DEFAULT 0을 지정해주면 됨 컬럼 제약사항 설정
3)NVL2(C, VALL, VAL2)
-C의 값이 NULL이 아니면 VALL을 NULL이면 VAL2를 각각 반환
-VALL과 VAL2는 갗은 데이터 타입이어야함
테이블 변경
UPDATE MEMBER
SET MEM_HP=NULL
WHERE MEM_ID IN('d001','f001','r001','p001','s001');
COMMIT;
사용예) 회원테이블에서 회원들의 핸드폰번호를 조회하시오
핸드폰 번호가 없으면 '연락처 없음'을 출력하시오(NVL2사용)
ALIAS는 회원번호, 회원명, 연락처
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
NVL2(MEM_HP,MEM_HP,'연락처 없음') AS 연락처
FROM MEMBER;
UPDATE MEMBER
SET MEM_MILEAGE=NULL
WHERE MEM_ID IN('d001','f001','r001','p001','s001');
사용예) 회원테이블에서 회원의 마일리지를 검사하여 NULL이 아니면
'정상회원' NULL이면, '비활동 회원'을 비고난에 출력하시오
ALIAS는 회원번호, 회원명, 직업, 마일리지, 비고
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_JOB AS 직업,
MEM_MILEAGE AS 마일리지,
NVL2(MEM_MILEAGE,'정상회원','비활동 회원') AS 비고
FROM MEMBER;
'DB > SQL(오라클)' 카테고리의 다른 글
오라클(SQL)NULL을 만들어주는 방법(NULLIF) (0) | 2021.03.16 |
---|---|
오라클(SQL)집계함수(ROLLUP, CUBE) (0) | 2021.03.15 |
오라클(SQL)테이블 조인(내부조인 : INNER JOIN, CARTESIAN PRODUCT, EQUI JOIN) (0) | 2021.03.15 |
오라클(SQL)그룹합수/집계함수(SUM, AVG, COUNT) (0) | 2021.03.15 |
오라클(SQL)날짜변환 함수(TO_DATE(C[,FMT])) (0) | 2021.03.15 |