데이터베이스

데이터베이스_SQL기본(함수_null)_22.06.23(day04)

양빵빵 2022. 6. 23. 10:41

 

 


-- # 널 관련 함수
-- NVL(expr1, expr2)
-- expr1: Null을 가질 수 있는 값이나 표현식
-- expr2: expr1이 Null일 경우 대체할 값
SELECT 
    emp_no
   ,emp_nm
   --,direct_manager_emp_no
   ,NVL(direct_manager_emp_no, '최상위관리자') AS 관리자
FROM tb_emp;

SELECT 
    NVL(emp_nm, '존재안함') AS emp_nm
FROM tb_emp
WHERE emp_nm = '이정직';

SELECT 
    direct_manager_emp_no
FROM tb_emp
WHERE emp_nm = '김회장'
;


SELECT
 -- MAX는 최대값을 찾는 함수
    -- MAX(emp_nm) -- 맥스에 없는 애들을 조회하면 null이 나온다.
    NVL(MAX(emp_nm), '존재안함') AS emp_nm
    
FROM tb_emp
WHERE emp_nm = '박찬호'; -- 없는 사람을 조회하면 null이 나오는 것이 아님.
                        -- null인 값을 가진 것을 조회할때 null이 나오는 것이다.
                        
                        -- ** 공집합이 출력 되면 max로 null 로 만들고 NAL을 활용해 NULL의 메시지를 출력.

-- NVL2(expr1, expr2, expr3)
-- expr1의 값이 Null이 아니면 expr2를 반환, Null이면 expr3를 반환
SELECT 
    emp_nm,
    NVL2(direct_manager_emp_no, '일반사원', '회장님') AS 직위
FROM tb_emp;

-- NULLIF(expr1, expr2)
-- 두 값이 같으면 NULL리턴, 다르면 expr1 리턴
SELECT
   NULLIF('박찬호', '박찬호')
   -- NV2L(NULLIF('박찬호', '박찬호'),'일치합니다','다릅니다')
FROM dual;

SELECT
    NV2L(NULLIF('박찬호', '박지성'),'일치합니다','다릅니다')
FROM dual;

-- COALESCE(expr1, ...)
-- 많은 표현식 중 Null이 아닌 값이 최초로 발견되면 해당 값을 리턴
SELECT 
    COALESCE(NULL, NULL, 3000, 4000)
FROM dual;

SELECT 
    COALESCE(NULL, 5000, NULL, 2000)
FROM dual;

SELECT 
    COALESCE(7000, NULL, NULL, 8000)
FROM dual;