모두의 SQL - 함수

-·2022년 6월 18일
0

함수의 종류

단일 행 함수

한번에 하나의 데이터를 처리

데이터의 타입에 맞는 함수를 사용해야 합니다.(return type)

함수를 중첩으로 사용가능

엄청 많이 있으니 찾아보고 쓸것

오라클에서 날짜 연산규칙

날짜 연산설명반환값
Date + Number날짜에 일수를 더한다.Date
Date - Number날짜에서 일수를 뺀다.Date
Date - Date날짜에서 날짜를 뺀다.일수
Date + Number / 24날짜에 시간을 더할 때는 시간을 24로 나누어서 날짜에 더한다.Date

형변환함수

CHAR, VARCHAR, NUMBER, DATE, CLOB, BLOB ... 이 정도만 알아도 될듯

자동 형변환 유형

FROMTO
VARCHAR2 or CHARNUMBER
VARCHAR2 or CHARDATE
NUMBERVARCHAR2
DATEVARVHAR2

ex) SELECT 1 + '2' FROM dual; >> 이건 숫자로 치환되서 알아서 3이라고 출력

성능과 안정성을 위해서 수동형변환을 하는걸 권장합니다.

함수설명
TO_CHAR지정형식에 따라서 숫자(ex. HH24MISS), 문자, 날짜(ex. YYYYMMDD) 값을 VARCHAR2 타입으로 변환한다.
TO_NUMBER문자를 숫자 타입으로 변환한다.
TO_DATE날짜를 나타내는 문자열을 지정 형식(ex. YYYYMMDDHH24MISS)의 날짜 타입으로 변환한다.

그외

  • NVL(열이름, 치환값)

    not null 처리

  • DECODE(열이름, 조건, 치환값, 기본값)

  • CASE WHEN ELSE

    CASE

    ​ WHEN 조건1 THEN 출력1

    ​ ...

    ​ ELSE 출력

    END

DECODE를 많이 쓴다는데

CASE로 표현을 제일 많이 하지않나?

c, java를 하다보니 CASE가 젤 보기 편한듯?

  • 순위매기기

    함수설명
    RANK동일한 값이면 중복 순위를 부여하고, 다음 순위는 해당 개수만큼 건너뛰고 반환한다.
    RANK() OVER([PARTITION BY 열이름] ORDER BY 열이름)
    DENSE_RANK동일한 값이면 중복 순위를 부여하고, 다음 순위는 중복 순위와 상관없이 순차적으로 반환한다.
    ROW_NUMBER중복 관계없이 순차적으로 순위를 반환한다.

그룹함수

다건을 동시처리 -> 결과는 하나임

GROUP BY 로 묶기 그룹에 조건이 필요하다면 HAVING절을 이용

SELECT 그룹함수(열 이름) FROM ~

  • 종류

COUNT, SUM, AVG, MAX, MIN ...

COUNT는 NULL값도 개수로 쳐서 계산 나머지는 NULL은 제외하고 계산

  • GROUP BY

    그룹화하지않고 그룹함수를 쓰면 무조건 전체건수를 기준으로 계산한다

    그룹화를 하면 그룹별로 계산이 가능

    ex) type이라는 열이 있으면 GROUP BY type으로 하면

    typecnt
    113
    254
    332
    425

    이런식으로 구분지어서 집계가 가능

  • HAVING

    그룹화된 값에 조건식을 적용

    GROUP BY 절 다음에 기술

모든 요소가 있다면 SELECT ~ FROM ~ WHRE ~ GROUP BY ~ HAVING ~ ORDER BY ~

이런식으로 쿼리가 펼쳐진다.

WHERE랑 HAVING을 헷갈리는 경우가 많은데 WHERE는 그룹화 하기 전이고, HAVING은 그룹화 후에 조건입니다.

profile
거북이는 오늘도 걷는다

0개의 댓글