제 6절 함수

1. 내장함수(Built-in Function)

벤더에서 제공하는 함수, 데이터베이스를 설치하면 기본적으로 제공되는 SQL 내장함수

  • 종류
    • 단일행 함수(Signle-Roow Function) : 함수의 입력값이 단일행
      • 특징
      1. SELECT, WHERE, ORDER BY 절에서 사용 가능
      2. 각 행들에 대해 개별적으로 작용하여 데이터 값을 조작하고 각각의 행에 대한 조작 결과를 반환
      3. 여러 인자를 입력해도 하나의 결과만 반환됨
      4. 함수의 인자로 상수, 변수, 표현식이 사용 가능
      5. 특별한 경우가 아니면 함수의 인자로 함수를 사용하는 함수의 중첩이 가능
    • 다중행 함수(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 변수는 내부적으로 세기/년/월/일/시/분/초와 같은 숫자형식으로 변환하여 저장된다. 날짜를 숫자로 저장하기 때문에 덧셈, 뺄셈 같은 산술 연산자로도 계산이 가능하다.

  • Oracle 함수
SELECT MYDATE, EXTRACT(YEAR FROM MYDATE) 년도
FROM MYTABLE
  • SQL Server 함수
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 특성
      1. 널값은 아직 정의되지 않은 값으로 0또는 공백과는 전혀 다르다.
      2. 테이블 생성시 NOT NULL또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL을 가질 수 있다.
      3. 널값을 포함하는 연산의 경우 결과값도 널이다.
      4. 결과값이 널이 아닌 다른값을 얻으려면 NVL/ISNULL함수를 사용한다. 널값의 대상이 숫자 유형 데이터인 경우 주로 0으로 문자 유형 데이터인 경우 공백보다는 'x' 같이 해당 시스템에서 정한 문자로 바꾸는 경우가 많다.
  • 공집합
    데이터가 한 건도 없는 경우, NULL과는 다름
    공집합을 대상으로 NVL/ISNULL 함수를 사용하더라도 인수의 값이 공집합인 경우 공집합이 반환된다.
    집계함수와 같은 Scala Subquery인 경우는 인수의 결과 같이 공집합인 경우에도 NULL을 출력

좋은 웹페이지 즐겨찾기