[22.12.26] 45일차 [데이터베이스]

W·2022년 12월 26일
0

국비

목록 보기
65/119

변환 함수

  • TO_CHAR (D -> C, N -> C)
  • TO_NUMBER

[emp]

emp_id
(num)
name
(char)
salary
(char)
100AAA$17,000
101BBB$12,000
102CCC$9,000

(문제) emp 테이블로부터 사원들의 연봉을 출력하시오.
select emp_id, name, 12*salary as annsal from emp;
→ ERROR!! [salary가 char형이라 연산 불가]

to_num(salary, '$999,999') -> 9만 뽑아서 반환해줌

[수정]
select emp_id, name, 12*to_num(salary, '$999,999') as annsal from emp;

  • TO_DATE
    ex)to_date('2002-08-10', 'YYYY-MM-DD'포맷)

일반 함수

  • NVL (expr1, expr2)
    expr2 null일때 대체하고 싶은 값
    데이터 유형 같아야 함
    사용 가능 데이터 유형 : 날짜, 문자, 숫자

  • NVL2 (expr1, expr2, expr3)
    expr1 null이 아니면 expr2 반환
    expr1 null이면 expr3 반환

  • NULLIF (expr1, expr2)
    expr1 = expr2 -> null 반환
    expr1 <> expr2 -> expr1 반환

  • COALESCE (expr1, expr2, ..., exprn)
    expr1 null아니면 expr1 반환
    expr1 null이면 expr2 expr2 null이면 expr3
    처음 null이 아닌값 반환하는 함수...

단일행 함수 정리

  1. 문자 함수
  • 대소문자 변환함수
    • LOWER
    • UPPER
    • INITCAP
  • 문자 조작함수
    • CONCAT(expr1,expr2)
    • SUBSTR(expr1, expr2, expr3)
    • LENGTH(expr1)
    • INSTR(expr1, expr2)
    • LPAD(expr1, expr2, expr3)
    • RPAD(expr1, expr2, expr3)
    • REPLACE(expr1, expr2, expr3)
    • TRIM(expr1 from expr2)
  1. 숫자 함수
  • ROUND
  • TRUNC
  • MOD
  1. 날짜 함수
  • SYSDATE
  • 날짜 조작 함수
    • MONTH_BETWEEN
    • ADD_MONTHS
    • NEXT_DAY
    • LAST_DAY
    • ROUND
      • ROUND(SYSDATE,'MONTH')
      • ROUND(SYSDATE,'YEAR')
    • TRUNC
      • TRUNC(SYSDATE,'MONTH')
      • TRUNC(SYSDATE,'YEAR')
  1. 변환 함수
  • TO_CHAR (D -> C, N -> C)
  • TO_NUMBER
  • TO_DATE
  1. 일반 함수
  • NVL (expr1, expr2)
  • NVL2 (expr1, expr2, expr3)
  • NULLIF (expr1, expr2)
  • COALESCE (expr1, expr2, ..., exprn)

연습문제

1번

2번

3번

4번

(==)
SELECT last_name, NVL2(commission_pct, TO_CHAR(commission_pct), 'No Commission') COMM
FROM employees;

그룹함수

null 값 제외 작업

  • AVG
  • COUNT
    • COUNT(*) NULL O, 중복값 O
    • COUNT(expr) NULL X, 중복값 O
    • COUNT(distinct expr) NULL X, 중복값 X
  • MAX
  • MIN
  • STDDEV
  • SUM
  • VARIANCE

문제) employees 테이블로부터 전 직원의 커미션 평균을 출력하는 구문을 작성하시오

nvl 함수 활용하지 않으면 null값 빼고 평균 계산됨.

문제) 80번 부서에 소속된 사원 중 커미션을 받는 사원의 수를 출력하시오.

select count(department_id)
from employees;
=> 부서에 소속된 사원의 수

select count(distinct department_id)
from employees;
=> 부서의 수

GROUP BY절

  • 그룹함수와 group by절 사용 시 규칙(문법)
    select절의 컬럼리스트들 중 그룹함수에 포함된 컬럼과 그룹함수에 포함되지 않은 컬럼이 같이 출력
    되려면 그룹함수에 포함되지 않은 컬럼은 반드시 group by절에 포함되어 있어야 함!!!

having 절

조건절
1) where : 행 제한 조건문을 작성하는 곳
2) having : 행그룹 제한 조건문을 작성하는 곳
(그룹 함수가 포함된 조건문을 작성하는 곳)

연습문제

1번

2번

QUIZ

1번

3번

4번

7번

8번

0개의 댓글