SQL-DML FUNCTION

Sejin·2025년 5월 26일
0

Data, DB공부

목록 보기
22/26

함수

예제 데이터

함수(Function)

특정 작업을 수행하는 명령어

함수의 유형

생성 주체

내장 함수

  • SUM
  • COUNT
  • AVG
  • MIN
  • MAX 등등

사용자 정의 함수

수행 범위

단일 행 함수
Single-Row Functions

  • 문자형 함수, 숫자형 함수, 날짜형 함수
  • 제어 함수, 변환 함수, NULL 관련함수
  • UPPER, LOWER, CONCAT, SUBSTRING 등

다중 행 함수
Multi-Row Functions

  • 보통 GROUP BY 절과 함께 사용
  • SUM, AVG, COUNT, MIN, MAX, ROW_NUMBER, RANK 등

단일 행 함수 특징

각 행(Row)에 대해 개별적으로 작용하고 그 결과를 반환함

  • 단일 행 내에 있는 하나 또는 복수의 값을 인수로 사용함
  • 여러 행에 걸친 값을 사용할 수 없음

함수 중첩이 가능함

SELECT, WHERE, ORDER BY 절에 사용 가능함


Oracle의 단일 행 내장 함수

종류개요주요 함수
문자형 함수문자열 처리LOWER, UPPER, ASCII, CHR, CONCAT, SUBSTR, LENGTH, LTRIM, RTRIM, TRIM
숫자형 함수숫자형 값 처리ABS, SIGN, MOD, CEIL, FLOOR, ROUND, TRUNC, SIN, COS, TAN, EXP, POWER, SQRT, LOG, LN
변환형 함수문자, 숫자, DATE형 값으로의 타입 변환TO_CHAR, TO_NUMBER, TO_DATE
날짜형 함수날짜(Date) 처리SYSDATE, EXTRACT, TO_DATE, ADD_MONTHS
제어 함수조건/논리에 따른 처리CASE, DECODE
NULL 관련 함수NULL 값 처리NVL, NULLIF, COALESCE

데이터 처리 함수

문자형 함수

SELECT FUNCTION_NAME FROM DUAL;

ASCII 코드 표

문자형 함수 종류

LTRIM(문자열) / LTRIM(문자열, 지정문자)

  • 문자열의 왼쪽부터 시작해서, 다른 문자를 만나기 전까지 지정 문자를 제거
  • 지정 문자가 생략되면 공백(' ') 이 디폴트 값으로 처리됨
  • 예) LTRIM(' aaabaaa')'aaabaaa'
  • 예) LTRIM('aaaabaaa', 'a')'baaa'

RTRIM(문자열) / RTRIM(문자열, 지정문자)

  • 문자열의 오른쪽부터 시작해서, 다른 문자를 만나기 전까지 지정 문자를 제거
  • 지정 문자가 생략되면 공백이 디폴트 값
  • 예) RTRIM('aaabaaa ')'aaabaaa'
  • 예) RTRIM('aaabaaa', 'a')'aaab'

TRIM(문자열) / TRIM(지정문자 FROM 문자열)

  • 문자열의 양쪽에서 지정 문자를 제거함
  • 지정 문자가 생략되면 공백을 제거
  • 예) TRIM(' aaaaabaa ')'aaaaabaa'
  • 예) TRIM('a' FROM 'aaabaaa')'b'


숫자형 함수

종류

함수 구분함수 사용 예
ABS(숫자)ABS(-7), ABS(7)
SIGN(숫자)SIGN(-20), SIGN(0), SIGN(10)
MOD(숫자1, 숫자2)MOD(17, 3)
CEIL(숫자)CEIL(18.123), CEIL(-18.123)
FLOOR(숫자)FLOOR(18.123), FLOOR(-18.123)
ROUND(숫자, m)ROUND(18.5235, 3)
ROUND(숫자)ROUND(18.5235)
ROUND(숫자, m)ROUND(18.5235, -1)
TRUNC(숫자, m)TRUNC(18.5235, 3)
TRUNC(숫자)TRUNC(18.5235)


변환형 함수

데이터 타입 변환

명시적(Explicit) 데이터 타입 변환

  • 함수를 사용하여 명시적으로 데이터 타입을 변환

암시적(Implicit) 데이터 타입 변환

  • 시스템이 자동으로 데이터 타입 변환
  • 예) 문자열을 숫자로 변환
  • 성능 저하 및 에러 발생의 가능성 존재

TO_CHAR(숫자 | 날짜) / TO_CHAR(숫자 | 날짜, FORMAT)

  • 숫자나 날짜를 문자열로 변환
  • 날짜일 경우 FORMAT 지정으로 다양한 형태로 출력 가능
  • 예)
SELECT 
  S_BIRTH,
  TO_CHAR(S_BIRTH, 'YYYY/MM/DD') AS 타입1,
  TO_CHAR(S_BIRTH, 'YYYY.MM.DD.HH24.MI.SS') AS 타입2,
  TO_CHAR(S_BIRTH) AS 타입3
FROM STUDENT;

TO_NUMBER(문자열)

  • 문자열을 숫자로 변환
  • 문자열끼리 연산할 때 자동 변환이 일어날 수도 있지만, 명시적으로 TO_NUMBER() 사용 권장
  • 예)
SELECT 
  '1' + '1' AS TEST1,  -- 자동 형변환
  TO_NUMBER('1') + TO_NUMBER('1') AS TEST2  -- 명시적 형변환
FROM DUAL;

TO_DATE(문자열) / TO_DATE(문자열, FORMAT)

  • 문자열을 날짜(DATE) 형식으로 변환함
  • 날짜 연산(EXTRACT, MONTHS_BETWEEN 등)을 하려면 반드시 날짜형으로 변환해야 함
  • FORMAT은 문자열의 날짜 형식과 정확히 일치해야 함
  • 예):
SELECT TO_DATE('2025-12-31', 'YYYY-MM-DD') FROM DUAL;


날짜형 함수

종류

EXTRACT('YEAR' | 'MONTH' | 'DAY' FROM 날짜)
날짜 데이터에서 년/월/일 정보 추출

  • 예)
SELECT 
  S_BIRTH,
  EXTRACT(YEAR FROM S_BIRTH) AS,
  EXTRACT(MONTH FROM S_BIRTH) AS,
  EXTRACT(DAY FROM S_BIRTH) ASFROM STUDENT;

TRUNC(날짜, 옵션)
날짜를 특정 기준에 따라 잘라내는 함수
옵션은 'DD'(일), 'MM'(월), 'YY'(연) 등이 있음

  • 예)
SELECT 
  S_BIRTH,
  TRUNC(S_BIRTH, 'DD') AS 일기준,
  TRUNC(S_BIRTH, 'MM') AS 월기준,
  TRUNC(S_BIRTH, 'YY') AS 년기준
FROM STUDENT;


제어 함수

CASE Expression

표현식이지만 함수의 성격을 갖고 있음

예) S_SCORE 가 90 이상이면 'BEST' 표시, 그 외에는 '***' 표시

CASE 표현식의 중첩


DECODE

Oracle 에서만 사용되는 함수

DECOE(표현식, 기준값1, 출력값1 [기준값2, 출력값2 ... 디폴트 값]

  • 표현식의 값이 기준값1이면 값1을 출력, 기준값2이면 값2를 출력
  • 기준값이 없으면 디폴트 값을 출력


NULL 관련 함수

NULL
비어있는 값

  • 공백과는 다른 의미
  • NULL을 포함하는 모든 산술 연산의 값은 NULL

NULL과 공집합은 다른 의미

종류

NVL(인수1, 인수2)
인수 1이 NULL일 경우 인수 2의 값을 반환, NULL이 아니면 인수1을 반환

  • NULL값을 특정 값으로 변환할 때 사용
  • S_ENGNAME이 없는 경우는 '없음으로 출력하는 예

NULLIF(인수1, 인수2)
인수1과 인수2가 같으면 NULL을, 같지않으면 인수 1의 값을 반환

  • 특정 값을 NULL로 변환할 때 사용
  • S_NAME과 S_ENGNAME을 출력하되, S_ENGNAME이 'RUBY'인 경우는 NULL로 출력하는 예

COALESCE(인수1, 인수2, ..)

  • 인수들에서 NULL이 아닌 최초의 표현식을 반환
  • 모든 표현식이 NULL이라면 NULL을 반환
  • 임의의 개수의 표현식에서 NULL이 아닌 최초의 표현식을 반환할 때 사용


사용자 정의 함수

profile
Sejin's Journey for Developers

0개의 댓글