2013년 2월 7일 목요일

SQL 전문가 가이드(2과목 6절)

6절 함수(FUNCTION)

1. 내장함수 개요
- 함수는 다양한  기준으로 분류할 수 있는데, 벤더에서 제공하는 함수인 내장함수와 사용자가 정의할 수 있는 함수로 나눌 수 있다. 내장함수는 SQL을 더욱 강력하게 해주고 데이터 값을 간편하게 조작하는데 사용된다. 내장함수는 다시 함수의 입력 값이 단일행 값이 입력되는 단일행 함수와 여러 행의 값이 입력되는 다중행 함수로 나눌 수 있다. 다중행 함수는 다시 집계 함수, 그룹함수, 윈도우 함수로 나눌수 있다. 함수는 입력되는 값이 아무리 많아도 출력은 하나만 된다는 M:1 관계라는 중요한 특징을 가지고 있다.

함수명    (칼럼이나 표현식    [, Arg1, Arg2, ...])


단일행 함수의 종류

















단일행 함수의 중요한 특징
- select, where, order by절에 사용 가능
- 각 행들에 대해 개별적으로 자굥ㅇ하여 데이터 값들을 조작하고, 각각의 행에 대한 조작 결과를 리턴한다.
- 여러 인자를 입력해도 단 하나의 결과만 리턴한다.
- 함수의 인자로 상수, 변수, 표현식이 사용 가능하고, 하나의 인수를 가지는 경우도 있지만 여러 개의 인수를 가질 수도 있다.
- 특별한 경우가 아니면 함수의 인자로 함수를 사용하는 함수의 중첩이 가능하다.



2. 문자형 함수
- 문자형 함수는 문자 데이터를 매개 변수로 받아들여서 문자나 숫자 값의 결과를 돌려주는 함수이다. 몇몇 문자형 함수의 경우는 결과를 숫자로 리턴하는 함수도 있다.

단일행 문자형 함수의 종류



























 문자형 함수들이 적용되었을 때 리턴되는 값





















 3. 숫자형 함수
 - 숫자형 함수는 숫자 데이터를 입력받아 처리하고 숫자를 리턴하는 함수이다

























 4. 날짜형함수
- 날짜형 함수는 DATE 타입의 값을 연산하는 함수이다.












데이터베이스는 날짜를 숫자로 저장하기 때문에 덧셈, 뺄셈 같은 산술 연산자로도 계산이 가능하다.







 5. 변환형 함수
- 변환형 함수는 특정 데이터 타입을 다양한 형식으로 출력하고 싶을 경우에 사용되는 함수이다.








암시적 데이터 유형 변환의 경우 성능 저하가 발생할 수 있으며, 자동적으로 데이터베이스가 알아서 계산하지 않는 경우가 있어 에러를 발생할 수 있으므로 명시적인 데이터 유형 변환 방법을 사용하는 것이 바람직하다.


명시적 데이터 유형 변환에 사용되는 대표적인 변환형 함수는 다음과 같다.














 6. CASE 표현
 case 표현은 if-then-else 논리와 유사한 방식으로 표현식을 작성해서 sql의 비교 연산기능을 보완하는 역할을 한다.

문법




CASE
    SIMPLE_CASE_EXPRESSION 조건 or SEARCHED_CASE_EXPRESSION 조건
    ELSE 표현절
 END




CASE
     EXPR WHEN COMPARISON_EXPR
     THEN RETURN_EXPR
     ELSE 표현절
 END 



CASE
     WHEN CONDITION THEN RETURN_EXPR
     ELSE 표현절
 END 



단일행 CASE표현의 종류














7. NULL 관련 함수

가. NVL/ISNULL 함수
NULL 특성정리
- 널 값은 아직 정의 되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.
- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.
- 널 값을 포함하는 연산의 경우 결과 값도 널 값이다. 모르는 데이터에 숫자를 더하거나 배도 결과는 마찬가지로 모르는 데이터인 것과 같다.
- 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우는 블랭크보다는 'x' 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.






























댓글 없음:

댓글 쓰기