티스토리 뷰

SQL/SQLD 이론

[SQLD] SQL 기본 : 6절 함수

개발자 김챠챠 2025. 3. 6. 18:00

6절 함수


함수 (Function)

SQL을 더욱 강력하게 해주고 데이터 값을 간편하게 조작하는데 사용

입력값이 아무리 많아도 출력값은 하나라는 M:1 관계라는 중요한 특징

핵심적인 기능들은 이름/표기법이 벤더별로 다르지만, 기능은 비슷함

함수는 다양한 기준으로 분류 가능

  • 벤더에서 제공하는 함수인 내장 함수 (Built-In Function)
  • 사용자가 정의할 수 있는 함수 (User Defined Function)

내장함수 (Built-In Function)

내장함수는 함수의 입력 값에 따라 단일행 함수와 다중행 함수로 나뉨

  • 단일행 함수 : 단일행 내에 있는 하나의 값 또는 여러 값이 입력 인수로 사용
  • 다중행 함수 : 여러 레코드의 값들을 입력 인수로 사용 

단일행 함수

Oracle 함수 / SQL Server 함수로 표시

 

문자형 함수

  • LOWER(문자열) - 문자열의 알파벳 문자를 소문자로 변경
  • UPPER(문자열) - 문자열의 알파벳 문자를 대문자로 변경
  • ASCII(문자) - 문자나 숫자를 ASCII 코드 번호로 출력
  • CHR/CHAR(ASCII번호) - ASCII 코드 번호를 문자나 숫자로 출력
  • CONCAT(문자열1, 문자열2) - 문자열은 연결 ( || or + 와 동일 기능 )
  • SUBSTR/SUBSTRING(문자열, m[, n]) - 문자열 중 m 위치부터 n개의 문자 반환 ( n 생략 시 마지막 문자까지 )
  • LENGTH/LEN(문자열) - 문자열의 개수(길이)를 숫자값으로 반환
  • LTRIM(문자열[, 지정문자]) - 문자열 앞쪽부터 확인해 지정 문자들을 제거(기본값 공백)
  • RTRIM(문자열[, 지정문자]) - 문자열 뒤부터 확인해 지정 문자들을 제거(기본값 공백)
  • TRIM([ leading | trailing | both ] 지정문자 FROM 문자열) - 머리말, 꼬리말, 양쪽 지정문자 제거 기본값 both
    SQL Server에서는 TRIM 함수에 지정문자 사용 불가 (공백만 제거 가능)

숫자형 함수

  • ABS(숫자) - 절대값 반환
  • SIGN(숫자) - 양수, 0, 음수 판별, 1/0/-1로 출력 (부호)
  • MOD(숫자1, 숫자2) - 숫자1을 숫자2로 나누어 나머지 값 반환 ( % 연산자와 동일 ), Oracle에만 존재
  • CEIL/CEILING(숫자) - 크거나 같은 최소 정수 반환 (정수 값으로 올림)
  • FLOOR(숫자) - 작거나 같은 최대 정수 반환 (정수 값으로 버림)
  • ROUND(숫자[, m]) - 소수점 m자리에서 반올림 (생략시 0)
  • TRUNC(숫자[, m]) - 소수 m자리 뒤로 잘라서 버림 (생략시 0), Oracle에만 존재
  • EXP(), POWER(), SQRT(), LOG(), LN(), SIN(), COS(), TAN() ... - 수학 (단, SQL Server에서는 LOG()가 자연로그)

날짜형 함수

  • SYSDATE/GETDATE() - 현재 날짜와 시각 반환
  • EXTRACT('YEAR'|'MONTH'|'DAY' from d) / DATEPART('YEAR'|'MONTH'|'DAY', d) -  - 년/월/일 데이터를 추출 /  (SQL Server는 시간/분/초도 가능함)
  • TO_NUMBER(TO_CHAR(d,'YYYY')) / YEAR(d) - 위와 같은 기능 (TO_NUMBER 제외시 문자형 출력)

※ 날짜+숫자 = 날짜 / 날짜-숫자 = 날짜 / 날짜-날짜 = 날짜 수 / 날짜+숫자/24 = 날짜+시간

 

변환형 함수

명시적(Explicit) 변환 : 데이터 변환형 함수로 변환하도록 명시

암시적(Implicit) 변환 : 데이터베이스가 자동으로 변환하여 계산

[ Oracle ]

  • TO_NUMBER(문자열) -문자열을 숫자로 변환
  • TO_CHAR(숫자|날짜[, FORMAT]) - 숫자/날짜를 주어진 FORMAT으로 문자열 타입 변환
  • TO_DATE(문자열[,FORMAT]) - 문자열을 주어진 FORMAT으로 날짜 타입 변환

[ SQL Server ]

  • CAST (expression AS data_type [(length)]) - expression을 목표 타입으로 변환
  • CONVERT (data_type [(length)] expression[, style]) - expression 목표 타입 변환

CASE 표현

IF-THEN-ELSE 논리와 유사한 방식으로 표현식을 작성, SQL의 비교 연산 기능을 보완

ANSI/ISO 표준에는 CASE Expression이라고 표시하며, 단일값을 반환하는 점에서 함수처럼 동작

CASE 표현에는 조건절 표현 방법이 두 가지이며, Oracle의 경우 DECODE 함수 사용도 가능

SIMPLE_CASE_EXPRESSION 조건

SELECT [컬럼명,]
	CASE 표현식
		WHEN 값 THEN 반환값 -- WHEN은 여러개 가능 
		.
		.
		ELSE 반환값
	END [AS 컬럼명]
FROM 테이블명;

 

 

EQUI(=) 조건만 사용할 경우 간단하게 사용

SEARCHED_CASE_EXPRESSION 조건

SELECT [컬럼명,]
	CASE 
		WHEN 조건1 THEN 반환값 -- WHEN은 여러개 가능 
		.
		.
		ELSE 반환값
	END [AS 컬럼명]
FROM 테이블명;

= 뿐만 아니라 부등호 등을 이용한 여러 조건절 사용하여 다양한 조건 적용 가능

 DECODE 함수

SELECT
	DECODE(표현식, 기준값1, 값1 기준값2 값2, ... , DEFAULT값)
	[AS 컬럼명]
FROM 테이블명;

3Oracle에서만 사용가능한 함수로, simple_case_expression 조건과 같은 기능

DEFAULT 생략시 NULL


NVL / ISNULL

Oracle 함수 / SQL Server 함수로 표시

테이블 생성시 NOT NULL, PK로 지정하지 않은 모든 데이터 유형은 NULL값을 가질 수 있음

NULL 값을 포함하는 연산의 경우 결과 값도 NULL

  • NVL / ISNULL(판단대상, 대체값) : 판단대상의 값이 NULL이면 대체값 출력 ( 판단대상과 대체값 데이터 타입 같아야 함 )
  • NULLIF(판단대상, 비교대상) : 판단대상 = 비교대상 이면 NULL, 아닐 경우 판단대상 리턴
  • COALESCE(표현식1, 표현식2, ...) NULL이 아닌 최초의 표현식 리턴. 없으면 NULL 리턴

NVL/ISNULL → 널 값을 대체값으로 표현하고 싶을 때 이용

NULLIF → 특정 값을 NULL로 대체하는 경우에 유용하게 이용

COALESCE 함수는 두 개의 중첩된 CASE 문장으로 표현이 가능


공집합

SELECT 1 FROM DUAL WHERE 1=2;

건에 맞는 데이터가 한 건도 없는 경우를 공집합(empty set)이라고 하며, NULL과는 다름

인수 값이 공집합인 경우, NVL/ISNULL 사용해도 공집합이 출력

 

 

최종 수정일 : 2025/03/06

틀린 사항이 있다면 댓글로 알려주시면 감사하겠습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함