Programming/SQL

[Oracle] SELECT문 함수(9) NULL 처리 함수/ NVL / NVL2 /NULLIF/DECODE/ CASE WHEN THEN구문 / 그룹함수(SUM/AVG/MIN/MAX/COUNT)

Jayna. 2024. 2. 6. 15:16
728x90
 

[Oracle] SELECT문 함수(8) 형변환 함수 TO_CHAR(NUM/DATE) / TO_DATE(NUM,CHAR)/ TO_NUMBER(CHAR)

[Oracle] SELECT문 함수(7) - SYSDATE/MONTHS BETWEEN(DATE1,DATE2)/ADD_MONTHS(DATE,NUM)/LAST_DAY/EXTRACT /NEXT_DAY [Oracle] SELECT문 함수(5) - 문자열 합치기(CONCAT) / 문자 바꾸기 (REPLACE) / 제거(REGEXP_REPLACE) [Oracle] SELECT문 함수(4)

jaynarecord.tistory.com

 

NULL 처리함수

해당 컬림에서 NULL이 반환할 결과값을 넣어줄 수 있음

NVL(컬럼명, 반환할 결과값)

NUL2(컬럼명, 반환할 값1, 값2)

SELECT EMP_NAME 이름
     , BONUS 보너스
     , (SALARY + SALARY*NVL(BONUS, 0)) * 12 "연봉"
  FROM EMPLOYEE;
  
SELECT EMP_NAME
     , NVL(DEPT_CODE, '없음')
  FROM EMPLOYEE;

-- 사원명, 부서코드 (부서코드가 있는 경우 '부서배치완료', 없는 경우 '없음)
SELECT EMP_NAME
     , DEPT_CODE, NVL2(DEPT_CODE, '부서배치완료', '없음')
  FROM DUAL;
728x90

NULLIF(비교대상1, 비교대상2)

두 개의 값이 동일할 경우 NULL 반환

두 개의 값이 동일하지 않을 경우 비교대상 1을 반환

SELECT NULLIF('123','123')
  FROM DUAL;
-- NULL
  
SELECT NULLIF('123','213')
  FROM DUAL;
-- 123

 

 

DECODE(비교대상(컬럼명/산술연산/함수), 조건, 결과)

-- 사번, 사원명, 주민번호, 성별자리 추출(3,4 도 있지만,,, 1,2만 있다고 가정...)
SELECT EMP_ID 사번
     , EMP_NAME 이름
     , DECODE(SUBSTR(EMP_NO,8,1),1,'남',2,'여') 성별
  FROM EMPLOYEE;

CASE WHEN THEN 구문

CASE WHEN 조건식1 THEN 결과값1
     WHEN 조건식2 THEN 결과값2
     ...
     ELSE 결과값
 END

 

-- 사번, 사원명, 주민번호, 성별 자리추출 
SELECT EMP_ID 사원
     , EMP_NAME 이름
     , CASE WHEN SUBSTR(EMP_NO, 8, 1) = '1' THEN '남'
            ELSE '여'
        END "성별"
  FROM EMPLOYEE;

 

그룹함수

1. SUM(컬럼) : 해당 컬럼값들의 총 합계를 반환해주는 함수

2. AVG(컬럼) : 해당 컬럼값들의 평균을 구해서 반환

3. MIN(컬럼) : 해당 컬럼값들에서 가장 작은 값을 반환

4. MAX(컬럼) : 해당 컬럼값들에서 가장 큰 값을 반환

5. COUNT : 조회된 행 개수를 세서 반환

 COUNT(*) : 조회 결과에 해당하는 모든 행 개수를 다 세서 반환

 COUNT(컬럼명) : NULL 이 아닌 행 개수만 세서 반환

 COUNT(DISTINCT 컬럼명) : 중복값이 있을 경우 하나로만 COUNT, NULL 포함 X

 

 

 

[Oracle] SELECT문 함수(1) - LENGTH / LENGTHB / INSTR / SUBSTR

더보기 1. 단일행 함수 N개의 값을 읽어서 N개의 값을 리턴 LENGTH(str) : 해당 전달된 문자열의 글자 수 반환 LENGTHB(str) : 해당 전달된 문자열의 바이트 수 반환 => 결과값은 NUMBER타입으로 반환 INSTR INS

jaynarecord.tistory.com

 

728x90