1. 함수
(여기선 vender에서 제공하는 함수인 내장 함수에 대해)
내장 함수는 아래와 같이 나뉨
- 단일행 함수
- 다중행 함수
- 집계 함수
- 그룹 함수
- 윈도우 함수
함수는 입력값이 아무리 많아도 출력은 하나만 된다는 특징 가짐.
=> M:1 관계
| 종류 | 내용 | 함수의 예 |
| 문자형 함수 | 문자 입력 시 문자나 숫자 값 반환 | LOWER, UPPER, SUBSTR/SUBSTRING, LENGTH/LEN, LTRIM, RTRIM, TRIM,ASCII |
| 숫자형 함수 | 숫자 입력 시 숫자 값 반환 | ABS, MOD, ROUND/TRUNC, SIGN/CHR/CHAR, CEIL/CEILING,FLOOR, EXP, LOG, LN, POWER,SIN, COS, TAN |
| 날짜형 함수 | DATE 타입의 값반환 | SYSDATE/GETDATE, EXTRACT/DATEPART, TO_NUMBER(TO_CHAR(d,'YYYY'|'MM'|'DD'))/YEAR|MONTH|DAY |
| 반환형 함수 | 문자, 숫자, 날짜형 값의 데이터 타입 변환 | TO_NUMBER, TO_CHAR, TO_DATE/CAST, CONVERT |
NULL 관련함수 | NULL을처리하기 위한 함수 | NVL/ISNULL, NULLIF, COALESCE, SIGN/CHR |
단일행 함수의 중요한 특징
SELECT,WHERE,ORDER BY절에 사용 가능함.- 각 row들에 대해 개별적으로 작용하여 데이터 값들 조작하고,
각각의 row에 대한 조작 결과를 리턴함. - 여러 인자argument를 입력해도
단 하나의 결과만 리턴함. - 함수의 인자로 상수, 변수, 표현식 사용 가능함.
- 하나의 인수 가질 수도, 여러 개의 인수를 가질 수도 있음.
- 특별한 경우 아니면,
함수의 인자로 함수 사용하는 함수의 중첩이 가능함.
2. 문자형 함수
| 문자형 함수 | 함수 설명 |
LOWER(문자열) | 문자열의 알파벳 -> 소문자 |
UPPER(문자열) | 문자열의 알파벳 -> 대문자 |
ASCII(문자) | 문자나 숫자 -> ASCII 코드 번호 |
CHR/CHAR(ASCII번호) | ASCII 코드 번호 -> 문자나 숫자 |
CONCAT(문자열1, 문자열2) | |
SUBSTR/SUBSTRING(문자열, m[, n ]) | 문자열 중 위치 m에서n개의 문자 길이에 해당하는 문자 반환.n 생략 시 마지막까지. |
LENGTH/LEN(문자열) | 문자열 개수를 숫자값으로 반환 |
LTRIM(문자열 [, 지정문자) | 지정 문자 있을 시 해당 문자 제거 (생략 시, 공백 값이 디폴트) (Server에선 공백만 제거가능) |
RTRIM(문자열 [, 지정문자) | 문자열 마지막 문자부터 시작 |
TRIM([leading|trailing|both]지정문자 FROM 문자열) | 머리말, 꼬리말 또는 양쪽의 지정 문자 제거 (Server에선 공백만 제거가능) |
1
2
SELECT LENGTH('THIS IS SQL')
FROM DUAL;
cf) DUAL 테이블의 특성
- 사용자
SYS가 소유함. 모든 사용자가 액세스 가능. SELECT ~ FROM ~의 형식을 갖추기 위한 일종의DUMMY테이블.DUMMY라는 문자열 유형 column에'X'라는 값 있는 row를 1건 포함함.
1
SELECT LENGTH('THIS IS SQL') AS ColumnLength;
3. 숫자형 함수
| 문자형 함수 | 함수 설명 |
ABS(숫자) | 절댓값 반환 |
SIGN(숫자) | |
MOD(숫자1, 숫자2) | |
CEIL/CEILING(숫자) | |
FLOOR(숫자, [, m ]) | |
SIN, COS, TAN | |
EXP(), POWER(), SQRT(), LOG() |
4. 날짜형 함수
| 문자형 함수 | 함수 설명 |
SYSDATE/GETDATE() | 현재 날짜, 시각 출력 |
EXTRACT('YEAR'|'MONTH'|'DAY' from d)/DATEPART('YEAR'|'MONTH'|'DAY', d) | 년/월/일 데이터 시간/분/초도 가능. |
1
SELECT SYSDATE() FROM DUAL;
5. 변환형 함수
특정 데이터 타입을 다양한 형식으로 출력.
크게
- 명시적Explicit 데이터 유형 변환 : 데이터 변환형 함수로 데이터 유형을 변환하도록 명시
- 암시적Implicit 데이터 유형 변환 : DB가 자동으로 데이터 유형 변환하여 계산
| 문자형 함수 | 함수 설명 |
TO_NUMBER(문자열) | alphanumeric 문자열을 숫자로 변환 |
TO_CHAR(숫자|날짜 [, FORMAT]) | |
TO_DATE(숫자|날짜 [, FORMAT]) |
6. CASE 표현
IF-THEN-ELSE 논리와 유사.
SQL의 비교 연산 기능 보완하는 역할.
1
2
3
4
IF SAL > 2000
THEN REVISED_SALARY = SAL
ELSE REVISED_SALARY = 2000
END-IF;
CASE 표현 | 함수 설명 |
CASESIMPLE_CASE_EXPRESSION 조건ELSE 표현절END | |
CASESEARCHED_CASE_EXPRESSION 조건ELSE 표현절END | |
DECODE(표현식, 기준값1, 값1, 기준값2, 값2, ..., 디폴트값 |
CASE 표현은 함수 성질 가지므로,
다른 함수처럼 중첩 사용 가능.
1
2
3
4
5
6
7
8
9
SELECT ENAME SAL,
CASE WHEN SAL >= 2000
THEN 1000
ELSE (CASE WHEN SAL >= 1000
THEN 500
ELSE 0
END)
END as BONUS
FROM EMP;