티스토리 뷰
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
틀린 사항이 있다면 댓글로 알려주시면 감사하겠습니다.
'SQL > SQLD 이론' 카테고리의 다른 글
| [SQLD] SQL 기본 : 8절 ORDER BY (0) | 2025.03.07 |
|---|---|
| [SQLD] SQL 기본 : 7절 GROUP BY, HAVING (0) | 2025.03.07 |
| [SQLD] SQL 기본 : 5절 WHERE 절 (0) | 2025.03.05 |
| [SQLD] SQL 기본 : 4절 트랜잭션 제어어 (0) | 2025.03.05 |
| [SQLD] SQL 기본 : 3절 데이터 조작어 (0) | 2025.03.05 |
- Total
- Today
- Yesterday
- BufferedWriter
- APS
- 데이터베이스
- BufferedReader
- DB
- Java
- 입출력
- 배열
- dialect
- oracle
- DBMS
- 필드
- 자료구조
- Scanner
- db오브젝트
- 레코드
- SQL이란
- StringBuilder
- SQL
- 테이블
- 알고리즘
- db의 역사
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |