> FUNCTION
- 함수는 다양한 기준으로 분류할 수 있는데, 벤더에서 제공하는 함수인 내장함수와 사용자가 정의할 수 있는 함수로도 나눌 수 있다.
- 내장 함수는 벤더별로 가장 큰 차이를 보이는 부분이지만, 핵심적인 기능들은 이름이나 사용법이 다르더라도 대부분의 데이터베이스가 공통적으로 제공하고 있다.
- 일반적으로 함수는 입력되는 값이 많아도 출력은 하나만 된다는 M:1 관계
- 단일 행 함수의 경우 단일 행 내에 있는 하나의 값 또는 여러 값이 입력 인수로 표현될 수 있다.
- 단일 행 함수의 경우 각 행들에 대해 개별적으로 작용하여 데이터 값들을 조작하고, 각각의 행에 대한 조작 결과를 리턴한다.
- 단일 행 함수의 경우 SELECT, WHERE, ORDER BY 절에 사용 가능하다.
- 특별한 제약이 없다면 함수의 인자로 함수를 사용하는 함수의 중첩이 가능하다.
종류 | 내용 | 함수의 예 |
문자형 함수 | 문자를 입력하면 문자나 숫자 값을 반환 | LOWER UPPER CONCAT SUBSTR LENGTH ... |
숫자형 함수 | 숫자를 입력하면 숫자 값을 반환 | ABS MOD ROUND TRUNC SIGN ... |
날짜형 함수 | DATE 타입의 값을 연산 | SYSDATE EXTRACT ... |
변환형 함수 | 문자나 숫자 날짜형 값의 데이터 타입을 변환 | TO_CHAR TO_NUMBER TO_DATE |
NULL 함수 | NULL을 처리하기 위한 함수 | NVL/ISNULL NULLIF COALESCE |
> 날짜형 함수
- 날짜 데이터는 시스템 구성에 따라 다양하게 표현될 수 있다.
연산 | 결과 | 설명 |
날짜 + 숫자 | 날짜 | 숫자만큼의 날수를 날짜에 더한다 |
날짜 - 숫자 | 날짜 | 숫자만큼의 날수를 날짜에서 뺀다 |
날짜1 - 날짜2 | 날짜수 | 다른 하나의 날짜에서 하나의 날짜를 빼면 일수가 나온다. |
날짜 + 숫자/24 | 날짜 | 시간을 날짜에 더한다. |
> 변환형 함수
- 변환형 함수는 특정 데이터 타입을 다양한 형식으로 출력하고 싶을 경우에 사용되는 함수.
- 암시적 데이터 유형 변환의 경우 인덱스 미사용으로 인한 성능 저하가 발생 할 수 있으며, 자동적으로 데이터베이스가 알아서 계산하지 않는 경우가 있어 에러를 발생할 수 있으므로 명시적 데이터 유형 변환 방법을 사용하는 것이 바람직하다.
명시적 데이터 유형 변환 | 데이터 변환형 함수로 데이터 유형을 변환하도록 명시해주는 경우 |
암시적 데이터 유형 변환 | 데이터베이스가 자동으로 데이터 유형을 변환하여 계산하는 경우 |
> CASE 표현
- CASE 표현은 IF-THEN-ELSE 논리와 유사한 방식으로 표현식을 작성해서 SQL의 비교 연산 기능을 보완하는 역할
- CASE 표현은 함수의 성질을 가지고 있으므로, 다른 함수처럼 중첩해서 사용할 수 있다.
CASE 표현 | 함수 설명 |
CASE SIMPLE_CASE_EXPRESSION 조건 ELSE 표현절 END |
- SIMPLE_CASE_EXPRESSION은 CASE 다음에 바로 조건에 사용되는 칼럼이나 표현식을 표현하고 다음 WHEN 절에서 정의한 칼럼이나 표현식이 같은지 아닌지 판단하는 문장으로 EQUI(=) 조건 사용해서 씀 - ORACLE의 DECODE 함수와 기능면에서 동일 |
CASE SEARCHED_CASE_EXPRESSION 조건 ELSE 표현절 END |
- SEARCHED_CASE_EXPRESSION은 CASE 다음에는 칼럼이나 표현식을 표시하지 않고 다음 WHEN 절에서 EQUI(=) 조건 포함 여러 조건(>, >= , <, <=)을 이용한 조건 절을 사용할 수 있기 때문에 윗 경우보다 좀 더 다양한 조건을 적용할 수 있다는 장점 |
DECODE(표현식, 기준값1, 값1, [, 기준값2, 값2, ....... , 디폴트값) |
- 오라클에서만 사용되는 함수로, 표현식의 값이 기준값1과 같으면 값 1을 출력하고, 기준값2이면 값 2를 출력한다. 그리고 기준값이 없으면 디폴트 값을 출력한다. |
> NULL
- 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.
- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않는 모든 데이터 유형은 널 값을 포함할 수 있다.
- 널 값을 포함하는 연산의 경우 결과 값도 널 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인것 과 같다.
- 결과값이 널이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우에는 주로 0으로, 문자 유형 데이터인 경우는 블랭크보다는 'X' 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.
일반형 함수 | 함수 설명 |
NVL/ISNULL (표현식 1, 표현식 2) |
표현식 1의 결과값이 NULL이면 표현식 2의 값을 출력한다. 단, 표현식 1과 표현식 2의 결과 데이터 타입이 같아야 한다. NULL 관련 가장 많이 사용되는 함수 |
NULLIF (표현식 1, 표현식 2) |
표현식1이 표현식2와 같으면 NULL, 같지 않으면 표현식1을 리턴 |
COALESCE (표현식 1, 표현식 2) |
임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 표현식이 NULL이라면 NULL을 리턴 |
> NULL과 공집합
- SELECT 1 FROM DUAL WHERE 1 = 2; 같은 조건이 대표적인 공집합을 발생시키는 쿼리이며, 위와 같이 조건에 맞는 데이터가 한 건도 없는 경우를 공집합이라고 하고, NULL 데이터와는 또 다르게 이해해야 한다.
출처 : 한국데이터산업진흥원 게시자료