반응형
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
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 : 그룹화하기 전 먼저 검색 조건 실행 ( 더 효율적 )
반응형
'KDT > TIL' 카테고리의 다른 글
2022-08-10 (Wed) (0) | 2022.08.14 |
---|---|
2022-08-09 (Tue) (0) | 2022.08.14 |
2022-08-05 (Fri) (0) | 2022.08.13 |
2022-08-04 (Thu) (0) | 2022.08.07 |
2022-08-03 (Wed) (0) | 2022.08.03 |