반응형

SQL을 사용하다 보면 데이터를 가공하거나 요약해야 할 때가 많습니다.
이럴 때 사용하는 것이 바로 함수(Function)인데요,
함수는 크게 단일행 함수(Single-Row Function)다중행 함수(Multi-Row Function)로 나눌 수 있습니다.


📌 단일행 함수 (Single-Row Function)

✅ 정의

  • 각 행(Row)에 대해 하나의 결과를 반환하는 함수입니다.
  • 입력된 행 수만큼 결과가 출력됩니다.
  • SELECT, WHERE, ORDER BY, HAVING 절 등에서 사용 가능합니다.

🛠️ 종류 및 예시

1. 문자열 함수

  • LOWER(문자열): 문자열을 소문자로 변환
  • UPPER(문자열): 문자열을 대문자로 변환
  • SUBSTR(문자열, 시작위치, 길이): 문자열의 일부를 추출
  • LENGTH(문자열): 문자열의 길이를 반환
SELECT UPPER('sql') AS 대문자변환,
       LOWER('SQL') AS 소문자변환,
       SUBSTR('SQL Tutorial', 5, 8) AS 부분문자열,
       LENGTH('SQL') AS 문자열길이
FROM dual;

2. 숫자 함수

  • ABS(숫자): 절대값 반환
  • ROUND(숫자, 소수점자리수): 반올림
  • TRUNC(숫자, 소수점자리수): 버림
  • MOD(숫자1, 숫자2): 나머지 반환
SELECT ABS(-10) AS 절대값,
       ROUND(123.456, 2) AS 반올림,
       TRUNC(123.456, 2) AS 버림,
       MOD(10, 3) AS 나머지
FROM DUAL;

3. 날짜 함수

  • SYSDATE: 현재 날짜와 시간 반환
  • ADD_MONTHS(날짜, 개월수): 지정한 개월 수만큼 더한 날짜 반환
  • MONTHS_BETWEEN(날짜1, 날짜2): 두 날짜 사이의 개월 수 반환
SELECT SYSDATE AS 현재날짜,
       ADD_MONTHS(SYSDATE, 3) AS 세달후,
       MONTHS_BETWEEN(SYSDATE, TO_DATE('2025-01-01', 'YYYY-MM-DD')) AS 개월차이
FROM DUAL;

4. 변환 함수

  • TO_CHAR(날짜 또는 숫자, 포맷): 날짜 또는 숫자를 문자열로 변환
  • TO_DATE(문자열, 포맷): 문자열을 날짜로 변환
  • TO_NUMBER(문자열): 문자열을 숫자로 변환
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS 문자열날짜,
       TO_DATE('2025-05-17', 'YYYY-MM-DD') AS 날짜형식,
       TO_NUMBER('12345') AS 숫자변환
FROM DUAL;

5. NULL 처리 함수

  • NVL(표현식, 대체값): NULL이면 대체값 반환
  • NULLIF(표현식1, 표현식2): 두 표현식이 같으면 NULL 반환, 다르면 표현식1 반환
  • COALESCE(표현식1, 표현식2, ...): NULL이 아닌 첫 번째 표현식 반환
SELECT NVL(NULL, '대체값') AS NVL_예시,
       NULLIF(10, 10) AS NULLIF_예시,
       COALESCE(NULL, NULL, '첫번째NULL아닌값') AS COALESCE_예시
FROM DUAL;


📌 다중행 함수 (Multi-Row Function)

✅ 정의

  • 여러 행을 그룹화하여 하나의 결과를 반환하는 함수입니다.
  • 주로 집계(Aggregation) 함수라고도 불립니다.
  • SELECT 절에서 사용되며, GROUP BY 절과 함께 자주 사용됩니다.

🛠️ 종류 및 예시

1. 집계 함수

  • SUM(컬럼): 합계
  • AVG(컬럼): 평균
  • MAX(컬럼): 최대값
  • MIN(컬럼): 최소값
  • COUNT(컬럼 또는 *): 개수
SELECT SUM(salary) AS 총급여,
       AVG(salary) AS 평균급여,
       MAX(salary) AS 최고급여,
       MIN(salary) AS 최저급여,
       COUNT(*) AS 직원수
FROM employees;

2. 그룹 함수와 GROUP BY 절

  • 특정 컬럼을 기준으로 그룹화하여 집계함수를 적용할 수 있습니다.
SELECT department_id,
       AVG(salary) AS 부서별평균급여
FROM employees
GROUP BY department_id;

3. HAVING 절

  • GROUP BY로 그룹화한 결과에 조건을 걸 때 사용합니다.
SELECT department_id,
       AVG(salary) AS 부서별평균급여
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 5000;

🔍 단일행 함수 vs 다중행 함수 비교

구분 단일행 함수 다중행 함수
처리 대상 각 행(Row) 여러 행(Row)
반환 결과 행마다 하나의 결과 그룹마다 하나의 결과
사용 위치 SELECT, WHERE, ORDER BY, HAVING 등 SELECT (주로 GROUP BY와 함께 사용)
반응형

+ Recent posts