반응형
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와 함께 사용) |
반응형
'자격증 > SQLD' 카테고리의 다른 글
ROW_NUMBER() 함수 완벽 정복 (0) | 2025.05.19 |
---|---|
SQL 정규화 완전정복 (0) | 2025.05.17 |
윈도우 함수 완전정복 : 순위 / 집계 / 행순서 / 비율 함수 (0) | 2025.05.12 |
ROLLUP / CUBE / GROUPING SETS / GROUPING 완전정복 (0) | 2025.05.12 |
SQL 집합 연산자 완벽 가이드: UNION / UNION ALL / INTERSECT / MINUS(EXCEPT) (0) | 2025.05.12 |