본문 바로가기
데이터아키텍처

[SQLD] 함수의 종류 및 활용(문자함수, 숫자함수, 날짜함수, 분석함수, ALL, ANY)

by 데이널 2023. 11. 20.

SQL을 사용하기 시작했다면, 바로 보게 되는 것이 합니다. 이를 dbms 내장 함수라고 하는데요. 이 부분은 SQLD 시험에 자주 출제되는 부분이기 때문에 잘 이해하고 넘어가야 합니다. SQL을 효율적으로 사용할 수 있는 주요 기능 중 하나가 다양한 함수입니다.

 

 

이글에서는 다양한 SQL 함수를 살펴보고 이를 사용하는 방법을 설명하도록 하겠습니다. 또 함수를 통해 데이터 조작 및 분석에 활용할 수 있는 방법을 같이 알아보시죠. 

 

SQL 함수
SQL 함수

함수의 활용

  • 데이터베이스 데이터들의 계산할 때 수행합니다. → ANY, ALL
  • 개별 데이터 항목, 즉, 컬럼을 수정할 때 사용합니다. 문자 함수
  • 행 그룹에 대한 출력 결과를 조작할 때 사용합니다. → 분석 함수
  • 표시할 날짜 및 숫자 형식 지정하거나 변환할 때 사용합니다.  → 숫자 함수, 날짜 함수
  • 열(컬럼)의 데이터 유형 변환할 때 사용합니다. → 단일행 함수

 

단일행 함수

함수 구분 설명
문자 문자를 입력 값으로 받으며 문자 또는 숫자 값을 반환 합니다.
숫자 숫자를 입력하면 숫자 값을 반환합니다.
날짜 DATE 데이터 유형의 값에 동작합니다. 모든 날짜 함수는 DATE 데이터 유형 값을 반환하며  MONTHS_BETWEEN 함수만 숫자를 반환합니다.
변환 값의 데이터 유형을 변환합니다.
일반 NVL, NVL2, DECODE, CASE

 

문자 함수

 

문자 함수는 문자 데이터를 조작하는 아래의 함수를 제공합니다. 예를 들어, 두 개 이상의 문자열을 연결하는 CONCAT 함수가 있습니다. 

함수 용도 예제
upper 알파벳 값을 대문자로 변환 select *
from   (select 'aBcD' ori_col from dual) t1,
       (select upper('aBcD') upper_col from dual) t2,
       (select lower('aBcD') lower_col from dual) t3
lower 알파벳 값을 소문자로 변환
concat 두 문자열을 하나로 연결.
||
과 동일해서 자주 사용 안함
select concat('aa','bb') from dual;
select 'aa'||'bb' from dual;
substr 문자열중 원하는 부분만 선택
(
문자 수 기준)

(세 번째 인자값이 없을 경우 문자열의 끝까지를 의미)
select ori_col
     , substr(ori_col,1,2)
     , substr(ori_col,3,4)
from   ( select '123456' ori_col from dual );
select ori_col
     , substr(ori_col,1,2)
     , substr(ori_col,3,3)
from   ( select '가나다라마바사' ori_col from dual );
substrb substr과 달리 문자수가 아닌 문자의 byte 기준 select ori_col
     , substrb(ori_col,1,2)
     , substrb(ori_col,3,3)
from   ( select '123456' ori_col from dual );
select ori_col
     , substrb(ori_col,1,2)
     , substrb(ori_col,3,3)
from   ( select '가나다라마바사' ori_col from dual );
replace 첫 번째 인자 값에서 두 번째 인자 값에 해당하는 문자를 세 번째 인자 값으로 바꿈 select replace('Oracle 10g','10g', '11g') from dual;
length 문자열 길이를 구함
(문자 수 기준)
select length('123') from dual;
select length('가나다') from dual;
lengthb 문자열 길이를 구함
(Bytes
기준)
select lengthb('123') from dual;
select lengthb('가나다') from dual;
lpad 첫째 인자에 둘째 인자를 셋째 인자 길이(Byte)가 될 때까지 왼쪽부터 채움. select lpad('123',10,'*') from dual
union all
select lpad('가나다',10,'*') from dual;
rpad lpad와 달리 오른쪽을 채움  
ltrim 왼쪽부터 해당 문자 제거.
인자 값 없을 시 공백 제거
select ltrim(' xxAxBC') from dual;
select ltrim('xxAxBC','x') from dual;
à왼쪽부터 x 아닌 문자를 만날 때까지 x를 제거한 후
 
나머지를 리턴.
select ltrim(' ') from dual; à null과 동일
rtrim ltrim과 달리 오른쪽부터 수행.  
trim 왼쪽과 오른쪽의 공백을 제거 select trim(' xxAxBC ') from dual;
select trim('xxAxBCxx','x') from dual; à 오류
ascii 특정 값의 아스키코드를 리턴 select ascii('A') from dual;
instr 문자열에서 특정 문자의 위치를 리턴.


찾는 값이 없으면 0 리턴.


양쪽 % 사용 like 대체로 사용 가능.
select instr('abcabcabc','c',1,2) from dual;
select instr('abcabcabc','c',4,2) from dual;


select *
from   (
         select 'abcd' col1 from dual union all
         select 'bcd' from dual union all
         select 'xx' from dual
       )
where  instr(col1,'d',1,1) >= 1
;


select *
from   (
         select 'abcd' col1 from dual union all
         select 'bcd' from dual union all
         select 'xx' from dual
       )
where  col1 like '%d%'
;

 

숫자 함수

숫자 함수는 계산을 수행하는 데 필수적으로 사용됩니다. 예를 들어 'SUM' 함수는 지정된 열의 값을 더합니다.

함수 용도 예제
round 지정된 소수점 자리로 값을 반올림. SELECT ROUND(45.923,2)
      ,ROUND(45.923,0)
      ,ROUND(45.923,-1)  
FROM   DUAL
;
trunc 지정된 소수점 자리까지 남기고 값    버리기 SELECT TRUNC(45.923 , 2)
      ,TRUNC(45.923 )
      ,TRUNC(45.923 , -2)  
FROM   DUAL
;
mod 나머지 값 SELECT mod(10,3)
FROM   DUAL
;

 

날짜 함수

날짜 작업은 데이터베이스에서 흔하게 일어나는 일입니다. 날짜 함수를 사용하면 필요에 따라 날짜 값의 형식을 지정할 수 있습니다.

함수 용도 예제
add_months 날짜에 달 수 더하기,
빼기
select add_months( to_date('20130105','yyyymmdd') ,1 ) from dual;
select add_months( to_date('20130105','yyyymmdd') ,-1 ) from dual;
months_between 두 날짜 간의 달 수 select months_between( col2, col1 )
from   (
         select to_date('20130105','yyyymmdd') col1
              , to_date('20130315','yyyymmdd') col2
         from dual
       )
last_day 해당 달의 마지막 날 select last_day( to_date('20130105','yyyymmdd') )
from   dual
;
next_day 입력일 이후에 해당 요일이
처음 돌아오는 일자
select next_day( to_date('20130101','yyyymmdd'), 1 )
from   dual
;
--> 1(일요일)부터 7(토요일)까지 가능

 

분석 함수

오라클 분석 함수는 데이터 집합 내에서 행 단위로 계산을 수행하여 결과를 반환하는 함수입니다. 즉, 각 행의 값을 기준으로 주변 행들의 값과 비교하거나, 특정 조건에 맞는 행들을 그룹화하여 계산을 수행할 수 있습니다.

1. SQL문

분석함수명(argument) OVER (partition by column_name order by column_name)

 

2. 사용법

  • 분석함수명 : 사용할 분석 함수의 이름 (예: ROW_NUMBER, RANK, DENSE_RANK, AVG, SUM 등)
  • argument: 함수에 전달할 인수
  • OVER 절
    • PARTITION BY: 분석을 수행할 그룹을 지정합니다.
    • ORDER BY: 데이터를 정렬하는 기준을 지정합니다.
분석 함수 설명
ROW_NUMBER() 각 행에 순번을 부여합니다.
RANK(), DENSE_RANK() 순위를 부여하는데, RANK는 동일한 값에 대해 동일한 순위를 부여하지 않고 건너뛰며, DENSE_RANK는 동일한 값에 대해 동일한 순위를 부여합니다.
PERCENT_RANK() 각 행이 전체 데이터에서 차지하는 백분율 순위를 계산합니다.
NTILE() 데이터를 동일한 크기의 그룹으로 나누어 각 행이 속한 그룹 번호를 반환합니다.
LAG(), LEAD() 현재 행에서 앞 또는 뒤의 행의 값을 가져옵니다.
AVG, SUM, COUNT, MIN, MAX 집계 함수와 유사하게 사용되지만, OVER 절을 사용하여 더욱 유연하게 계산을 수행할 수 있습니다.

 

ANY 함수

ANY 함수는 만족하는 값이 하나라도 있으면 결과가 'TRUE'를 출력합니다. 

조건 결과 설명
 1000 > ANY (500, 1000, 2000) TRUE  ANY 값에 1000 보다 작은 500이 있으므로 TRUE
 1000 = ANY (500, 1000, 2000) TRUE  ANY 값에 같은 값 1000이 있으므로 TRUE
 2000 < ANY (500, 1000, 2000) FALSE  ANY 값에 2000 보다 큰 값이 없으므로 FALSE

 

ALL 함수

ALL 함수는 모든 값이 만족해야 결과가 'TRUE'를 출력합니다. 

조건 결과 설명
 1000 > ALL (500, 1000, 2000) FALSE  1000이 ALL의 모든 값 보다 커야하므로 FALSE
 1000 = ALL (500, 1000, 2000) FALSE  1000이 ALL의 모든 값과 동일해야 하므로 FALSE
 3000 > ALL (500, 1000, 2000) TRUE  3000은 ALL의 모든 값 보다 크므로 TRUE

 

마무리

SQL 함수는 관계형 데이터베이스의 데이터를 조작하고 분석하는 데 없어서는 안될 기능입니다. 이번 글에서는 단일행, 문자, 숫자, 날짜 함수를 이용하여 SQL 함수의 어떻게 활용하는지 간략하게 설명하였습니다. 함수들을 익혀 놓으면 SQL 활용하여 데이터를 분석에 좀 더 효과적일 수 있습니다.

 

마지막으로 ANY, ALL 함수는 WHER조건의 비교 연산자에서 사용하게 되는데요. 비교연산자 관련 내용은 아래 글을 참고하시기 바랍니다. 

 

SQL 비교연산자(관계, 논리), IN, OR, AND, NOT, Exists

 

[SQLD] SQL 비교연산자(관계, 논리), IN, OR, AND, NOT, Exists

이번 포스팅에서는 SQL의 연사자들에 대해 알아보도록 하겠습니다. SQL은 관계, 논리, IN, OR, AND, NOT, Exists 등 연산자를 사용할 수 있는데요. 아래 연산자를 통해 WHERE절에서 반환되는 데이터 행을

bommbom.tistory.com