KDT/TIL

2022-08-08 (Mon)

imname1am 2022. 8. 13. 21:16
반응형

Contents

    6장. SQL 함수 이어서


     명시적 데이터 타입 변환 함수

    종류 의미 사용예 결과
    TO_CHAR 숫자/날짜    → 문자 TO_CHAR(‘05/03’, ‘YYYY-MM’) 2005-03
    TO_NUMBER 문자열         → 숫자 TO_NUMBER(1000, ‘9,999’) 1,000
    TO_DATE 문자열         → 날짜 TO_DATE(‘05/03’, ‘YYYY-MM’),
    2005-03

     ex1) TO_CHAR(ROUND(hiredate, 'mm'), 'YY/MM/DD')

    SELECT TO_CHAR(ROUND(hiredate, 'mm'), 'YY/MM/DD') round_mm

     

     

     ex2) 12PM 넘으면 일자 기준 round 했을 때 바뀜

     

     ex3) TO_DATE(TO_DATE(SUBSTR(idnum, 1, 6), 'YYMMDD'), 'YY/MM/DD')

     

     NVL 변환 함수 : NVL

     NULL을 0 또는 다른 값으로 변환
    NVL(null 포함 칼럼/표현식, null 대체값)

    ex) 보너스가 NULL 인 경우, 보너스 0으로 계산

    NVL(comm, 0) = NVL(sal+comm, sal)

     

     NVL 확장 함수

    ① NVL2 

    NVL2(null 포함 칼럼/표현식, not_null_val , null_val)
    첫 번째 인수 값이 null 이 아니면 두 번째 인수값 출력.
    첫 번째 인수 값이 null 이면         세 번째 인수값 출력

     ex) 보너스 받는 사람은       급여와 보너스 더한 값을 급여 총액으로,

              보너스 안 받는 사람은    급여만 급여 총액으로 출력

    NVL2(comm , comm + sal , sal)

     

    ② COALESCE 

    COALESCE(exp-1, exp-2, . . . . . , exp-n)
    인수 중 NULL이 아닌 첫 번째 인수 반환

     

     DECODE 함수

    ✔ = if문 / case문

    ✔ '=' 비교만 가능

    DECODE(표현식/칼럼 , search1, result1,
                                          [search2 , result2 . . . .]
                                          [, DEFAULT])

    ⇨ 표현식/칼럼 값이 search1 값과 일치하면 result1 값 반환

                                     search2 값과 일치하면 result2 값 반환

    ⇨ 일치하는 값이 없거나, NULL인 경우 : default 값 반환

    ⇨ 기본값 없는 경우                                : NULL 반환

     

     ex) 학과 번호가 101이면 ‘컴퓨터공학과’,  102면   ‘화학공학과’ 나머지는 ‘기계공학과’ (default)로 변환

    DECODE(deptno, 101, '컴퓨터공학과',
    		102, '화학공학과',
    			‘기계공학과')

     

     CASE 함수

    ✔ = switch case문

    위에 DECODE 함수 확장 (산술, 관계, 논리 연산 다 가능)

    CASE 표현식  WHEN  비교문1 THEN exp1
                         [WHEN 비교문2 THEN exp2
                         [WHEN 비교문3 THEN exp3
                         ELSE   else_exp
    END

    표현식은 맨 처음 WHEN 앞에 와도 되고, END 뒤에 와도 됨

     

     ex)

     

     

     ⚠ DECODE vs CASE

    左 DECODE / 右 CASE

     


    7장. 그룹함수

     GROUP BY절

    특정 칼럼 값을 기준으로 테이블의 전체 행을 그룹별로 나누기 위한 절

     

    사용 시 규칙

    > 그룹핑 전 WHERE절을 사용해 그룹 대상 집합 먼저 선택해야
    > GROUP BY 절에 반드시 칼럼명 포함해야 (alias명X)
    > 그룹별 출력 순서 : 오름차순
    > SELECT절에서 나열된 칼럼명/표현식은 GROUP BY 절에서 반드시 명시해야
    SELECT     컬럼명, 그룹함수(컬럼)
    FROM         테이블명
    WHERE      조건
    GROUP BY [ROLLUP|CUBE] group_by_expression
    HAVING       group_condition
    ORDER BY 컬럼명

     

     

     다중 칼럼을 이용한 그룹핑

    칼럼 한 개 이상을 사용해 그룹을 나누고, 그룹별로 다시 서브 그룹을 나눔

     

     1] ROLLUP 연산자 (→)

    GROUP BY절의 그룹 조건에 따라 전체 행을 그룹화하고,
    각 그룹에 대해 부분합을 구하는 연산자

     

     

     2] CUBE 연산자 (→, )

    ROLLUP에 의한 그룹 결과와
    GROUP BY 절에 기술된 조건에 따라 그룹 조합을 만드는 연산자

     

     

     HAVING절

    GROUP BY 절에 의해 생성된 그룹 대상으로 조건 적용

     

     과정

    1) WHERE 절에 의해 조건을 만족하는 행 선택
    2) GROUP BY 절에 의해 그룹핑
    3) HAVING 절을 만족하는 그룹 선택
    SELECT     컬럼명, 그룹함수(컬럼)
    FROM         테이블명
    WHERE      조건
    GROUP BY [ROLLUP|CUBE] group_by_expression
    HAVING       group_condition
    ORDER BY 컬럼명

     

     ⚠ HAVING vs WHERE

    • HAVING : 내부 정렬 과정에 의해 그룹화된 결과 집합에 대해 검색 조건 실행
    • WHERE : 그룹화하기 전 먼저 검색 조건 실행 ( 더 효율적 )

     

    반응형