지지 On Air

2-1-3. 함수(2) 본문

개발/SQL [SQLD&SQLP]

2-1-3. 함수(2)

슈스 지지 2022. 7. 22. 17:48
반응형

 


지난 포스팅에서 마무리 하지 못한 함수의 내용을 마무리 하겠습니다!


 

과목 II. SQL 기본과 활용
  - 제1장 SQL 기본
    > 제3절 함수 

 

4. 날짜형 함수

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

날짜형 함수 함수 설명
SYSDATE/GETDATE() 현재 날짜와 시각 출력
EXTRACT('YEAR'|'MONTH'|'DAY'| from d)
/ DATEPART('YEAR'|'MONTH'|'DAY',d)
날짜 데이터에서 연월일 데이터를 출력할 수 있다.
시분초도 가능
TO_NUMBER(TO_CHAR(d,'YYYY')) / YEAR(d)
TO_NUMBER(TO_CHAR(d,'MM')) / MONTH(d)
TO_NUMBER(TO_CHAR(d,'DD')) / DAY(d).
날짜 데이터에서 연월일 데이터를 출력할 수 있다.
Oracle EXTRACT YEAR/MONTH/DAY 옵션이나 
SQL Server DEPART YEAR/MONTH/DAY 옵션과 같은 기능.
TO_NUMBER 함수 제외 시 문자형으로 출력된다.

 

DATE 변수는 데이터베이스에 저장될때 내부적으로 세기(Century), 년(Year), 월(Month), 일(Day), 시(Hours), 분(Minutes), 초(Seconds)와 같은 숫자 형식으로 변환해 저장한다. 날자는 여러가지 형식으로 출력되고 날짜 계산에도 사용되기 때문에 편리성을 위해 숫자형으로 저장하는 것 이다.

따라서 날짜는 덧셈, 뺄셈 같은 산술 연산자로도 계산이 가능하다.

 

단일행 날짜형 데이터 연산은 다음과 같다.

  • 날짜 + 숫자 = 날짜 (숫자만큼 날수를 날짜에 더한다)
  • 날짜 - 숫자 = 날짜 (숫자만큼 날수를 날짜에서 뺀다)
  • 날짜1 - 날짜2 = 날짜수 (다른 하나의 날짜에서 하나의 날짜를 빼면 일수가 나온다)
  • 날짜 + 숫자/24 = 날짜 (시간을 날짜에 더한다.)

 

5. 변환형 함수

변환형 함수는 특정 데이터타입을 다양한 형식으로 출력하고 싶을 경우에 사용된다. 변환형 함수는 크게 두가지 방식이 있다.

  • 명시적(Explicit) 데이터 유형 변환 : 데이터 변환형 함수를 사용해 데이터 유형을 변환하도록 명시해주는 경우.
  • 암시적(Implicit) 데이터 유형 변환 : 데이터베이스가 자동으로 데이터 유형을 변환해 계산하는 경우

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

 

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

변환형 함수 설명
TO_NUMBER (문자열)
/ CAST (expression AS data_type [(length)])
숫자로 변환 가능한 문자열을 숫자로 변환한다.
expression을 목표 데이터 유형으로 변환한다.
TO_CHAR (숫자|날짜 [, FORMAT])
/ CONVERT (data_type [(length)], expression [, style ])
숫자나 날짜를 주어진 FORMAT 형태인 문자열 타입으로 변환한다.
expression을 주어진 style 형태인 목표 데이터 유형으로 변환한다.
TO_DATE (문자열 [, FORMAT])
/ CONVERT (data_type [(length)], expression [, style ])
문자열을 주어진 FORMAT 형태인 날짜 타입으로 변환한다.
expression을 주어진 style 형태인 목표 데이터 유형으로 변환한다.

 

6. CASE 표현

CASE 표현은 IF-THEN-ELSE 논리와 유사한 방식으로 표현식을 작성해 SQL의 비교 연산 기능을 보완하는 역할을 한다.

ANSI/ISO SQL 표준에는 CASE Expression이라고 표시되어있는데, 함수와 같은 성격을 갖고 있으며 Oracle의 Decode 함수와 같은 기능을 하므로 단일행 내장 함수에서 같이 설명한다.

일반 프로그램 및 PL/SQL의 IF-THEN-ELSE-END 로직은 다음과 같다.

 

IF SAL > 5000
	THEN REVISED_SALARY = SAL
    ELSE REVISED+SALARY = 5000
END IF

 

CASE 표현을 하기 위해서는 조건절을 표현하는 두 가지 방법이 있다.

(Oracle은 DECODE 함수를 사용할 수 있다.)

CASE 표현 함수 설명
CASE
SIMPLE_CASE_EXPRESSION 조건
[ELSE 디폴트값]
END
SIMPLE_CASE_EXPRESSION 조건이 맞으면SIMPLE_CASE_EXPRESSION 조건내의 THEN절을 수행하고, 조건이 맞지 않으면 ELSE 절을 수행함.
CASE
SEARCHED_CASE_EXPRESSION 조건
[ELSE 디폴트값]
END
SEARCHED_CASE_EXPRESSION 조건이 맞으면 SEARCHED_CASE_EXPRESSION 조건 조건내의 THEN 절을 수행하고, 조건이 맞지 않으면 ELSE절을 수행함.
DECODE(표현식, 기준값1, 값1
[, 기준값2, 값2, ..., 디폴트값])
Oracle에서만 사용되는 함수로, 표현식 값이 기준값1이면 값1을 출력하고, 기준값2이면 값2를 출력한다. 기준값이 없으면 디폴트 값을 출력한다.
case표현의 SEMPLE_ CASE_EXPRESSION 조건과 동일하다.

 

7. NULL 관련 함수

(NULL과 관련해서는 지난 포스팅(1과목)에서 한번 다룬적 있기 때문에 한번 보고오셔도 좋을 것 같습니다.)

https://jiiiii.tistory.com/42

 

1-2-4. Null 속성의 이해 [ SQLD / SQLP / SQL 가이드 ]

SQLD 시험에 꼭 하나씩 출제되는 null이 나왔습니다! null의 속성에 대해 한번 이해하고 나면 문제풀이는 어렵지 않으니 꼭 숙지하시기 바랍니다 :) 과목 I. 데이터 모델링의 이해 - 제2장 데이터 모

jiiiii.tistory.com

NVL/ISNULL 함수

NULL의 특성은 다음과 같다.

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

 

NULL을 처리하는 주요 함수는 다음과 같다.

일반형 함수 설명
NVL(표현식1, 표현식2) /
ISNULL(표현식1, 표현식2)
표현식1의 결과 값이 NULL이면 표현식2의 값을 출력한다. 단, 두 표현식의 결과 데이터 타입이 같아야 한다.
NULLIF(표현식1, 표현식2) 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다.
COALESCE(표현식1, 표현식2, ... ) 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 표현식이 NULL 이라면 NULL 을 리턴한다.

 


단일행함수는 그 자체를 묻는 문제보다는, 보통 문제 안에서 활용되어 나오기 때문에 정리해놓은 주요 함수들을 꼭 숙지하고 계셔야 합니다! 

하트와 구독 및 댓글은 큰 힘이 됩니다 💕


 

본 포스팅은 '한국데이터산업진흥원' 에서 발행한 'SQL 전문가 가이드' 를 참고/인용 하였음을 밝힙니다.
반응형

'개발 > SQL [SQLD&SQLP]' 카테고리의 다른 글

2-1-5. GROUP BY, HAVING절  (8) 2022.07.27
2-1-4. WHERE절  (12) 2022.07.23
2-1-3. 함수(1)  (4) 2022.07.21
2-1-2. SELECT문  (6) 2022.07.18
2-1-1. 관계형 데이터베이스 개요 [ SQLD / SQLP / SQL 전문가 가이드 ]  (6) 2022.07.17
Comments