1. 내장함수(Built-in Function)
벤더에서 제공하는 함수, 데이터베이스를 설치하면 기본적으로 제공되는 SQL 내장함수
- 종류
- 단일행 함수(Signle-Roow Function) : 함수의 입력값이 단일행
- SELECT, WHERE, ORDER BY 절에서 사용 가능
- 각 행들에 대해 개별적으로 작용하여 데이터 값을 조작하고 각각의 행에 대한 조작 결과를 반환
- 여러 인자를 입력해도 하나의 결과만 반환됨
- 함수의 인자로 상수, 변수, 표현식이 사용 가능
- 특별한 경우가 아니면 함수의 인자로 함수를 사용하는 함수의 중첩이 가능
- 다중행 함수(Multi-Row Function) : 함수의 입력값이 여러행
함수는 입력되는 값이 아무리 많아도 출력은 하나만 됨(M:1 관계)
2. 문자형 함수
- CONCAT 함수와 동일한 기능을 하는 연산자
- Oracle : ||
- SQL Server : +
특별한 제약조건이 없다면 함수는 여러개 중첩하여 사용할 수 있다. 함수 내부에 다른 함수를 사용하며 안쪽에 있는 함수부터 실행되어 그 결과가 다시 바깥쪽의 함수의 인자로 사용된다.
DUAL 테이블
- 데이터 딕셔너리와 함께 Oracle에 의해 자동으로 생성되는 테이블
- 사용자
SYS
의 스키마에 있지만 모든 사용자는 DUAL이라는 이름으로 접근할 수 있음
- VARCHAR2(1)으로 정의된 DUMMY라는 하나의 열이 있으며 값을 가지는 하나의 행이 포함
- 사용자가 계산이나 사용자 함수 등을 실행하고자 할 경우에 유용
- 특성
- 사용자
SYS
가 소유하며 모든 사용자가 접근 가능한 테이블
- SELECT ~ FROM의 형식을 갖추기 위한 일종의 DUMMY 테이블
- DUMMY라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함
3. 숫자형 함수
4. 날짜형 함수
데이터베이스에 DATE 변수는 내부적으로 세기/년/월/일/시/분/초와 같은 숫자형식으로 변환하여 저장된다. 날짜를 숫자로 저장하기 때문에 덧셈, 뺄셈 같은 산술 연산자로도 계산이 가능하다.
SELECT MYDATE, EXTRACT(YEAR FROM MYDATE) 년도
FROM MYTABLE
SELECT MYDATE, TO_NUMBER(TO_CHAR(MYDATE, 'YYYY')) 년도
FROM MYTABLE
5. 변환형 함수
특정 데이터 타입을 다양한 형식으로 출력하고 싶을때 사용하는 함수
- 명시적(Explicit) 데이터 유형 반환: 데이터 변환형 함수로 데이터 유형을 변환하도록 명시해주는 경우
- 암시적(Implicit) 데이터 유형 반환: 데이터베이스가 자동으로 데이터 유형을 변환하여 계산하는 경우
성능저하가 발생할 수 있으며 자동적으로 데이터베이스가 알아서 계산하지 않는 경우가 있어 에러를 발생시킬 수 있으므로 명시적인 데이터 유형 변환 방법을 사용하는 것이 좋다.
6. CASE 표현
IF-THEN-ELSE 논리와 유사한 방식으로 표현식을 작성해서 SQL의 비교 연산 기능을 보완하는 역할을 한다.
7. NULL 과 관련된 함수
- NVL/ISNULL 함수
- SQL Server: ISNULL
- Oracle: NVL
- NULL 특성
- 널값은 아직 정의되지 않은 값으로 0또는 공백과는 전혀 다르다.
- 테이블 생성시 NOT NULL또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL을 가질 수 있다.
- 널값을 포함하는 연산의 경우 결과값도 널이다.
- 결과값이 널이 아닌 다른값을 얻으려면 NVL/ISNULL함수를 사용한다. 널값의 대상이 숫자 유형 데이터인 경우 주로 0으로 문자 유형 데이터인 경우 공백보다는 'x' 같이 해당 시스템에서 정한 문자로 바꾸는 경우가 많다.
- 공집합
데이터가 한 건도 없는 경우, NULL과는 다름
공집합을 대상으로 NVL/ISNULL 함수를 사용하더라도 인수의 값이 공집합인 경우 공집합이 반환된다.
집계함수와 같은 Scala Subquery인 경우는 인수의 결과 같이 공집합인 경우에도 NULL을 출력