BOARD / 함수 / 2026-04-13

SQL 함수 정리

함수는 SQL을 한 단계 더 실전적으로 만드는 도구입니다. 단순 조회를 넘어 문자열을 자르고, 날짜를 계산하고, NULL을 대체하고, 집계 결과를 요약할 때 거의 항상 함수가 함께 들어갑니다.

게시판 목록BLACK SQL 실습SQLD 문제은행

단일행 함수는 한 행을 한 행으로 바꾸고, 집계 함수는 여러 행을 하나의 결과로 요약합니다. 이 차이를 구분하지 않으면 GROUP BY 규칙과 함께 오류가 자주 발생합니다.

핵심 체크포인트

  • 단일행 함수는 한 줄씩 가공하고, 집계 함수는 여러 행을 요약합니다.
  • 문자, 숫자, 날짜, 변환, NULL 처리 함수는 실습에서 반복 출현합니다.
  • 집계 함수는 GROUP BY 규칙과 세트로 기억해야 합니다.

주제별 설명

단일행 함수

한 행을 입력받아 한 행의 값으로 반환하는 함수 묶음입니다.

  • 문자, 숫자, 날짜, 변환, NULL 처리 함수가 대표적입니다.
  • SELECT, WHERE, ORDER BY 어디에서든 자주 사용됩니다.

문자함수

`UPPER`, `LOWER`, `SUBSTR`, `LENGTH`, `CONCAT`처럼 문자열을 다루는 함수입니다.

  • 대소문자 통일, 일부 문자 추출, 길이 계산, 문자열 결합에 사용합니다.
  • 검색 조건이나 표시용 컬럼을 만들 때 특히 많이 쓰입니다.
SELECT UPPER(member_name) AS upper_name,
       SUBSTR(email, 1, 5) AS email_head,
       LENGTH(member_name) AS name_len
FROM members;

숫자함수

`ROUND`, `TRUNC`, `MOD`처럼 수치를 조정하거나 나머지를 계산하는 함수입니다.

  • ROUND는 반올림, TRUNC는 버림, MOD는 나머지 계산입니다.
  • 가격, 점수, 평균 결과를 보기 좋게 다듬을 때 자주 사용합니다.

날짜함수

`SYSDATE`, `ADD_MONTHS`, `MONTHS_BETWEEN`으로 날짜 계산을 수행합니다.

  • 현재 시각을 기준으로 기간 비교나 만료일 계산을 할 수 있습니다.
  • 날짜는 문자처럼 다루면 오류가 생기기 쉬워 함수 사용 습관이 중요합니다.
SELECT order_id,
       ordered_at,
       ADD_MONTHS(ordered_at, 1) AS next_month_date
FROM orders;

변환함수

`TO_CHAR`, `TO_DATE`, `TO_NUMBER`로 데이터 타입을 명시적으로 바꾸는 함수입니다.

  • 날짜와 숫자를 문자열로 바꾸거나 반대로 되돌릴 때 사용합니다.
  • 형 변환을 명확히 적으면 NLS 설정 차이로 생기는 혼란을 줄일 수 있습니다.

NULL 처리 함수

`NVL`, `NVL2`, `COALESCE`, `NULLIF`로 비어 있는 값을 다루는 함수입니다.

  • NVL은 단일 대체값, COALESCE는 여러 후보 중 첫 번째 비NULL 값을 찾는 데 적합합니다.
  • NULLIF는 두 값이 같으면 NULL을 반환해 비교 로직을 간단히 만들 수 있습니다.
SELECT member_name,
       NVL(city, 'UNKNOWN') AS city_name,
       COALESCE(phone_no, mobile_no, 'NO CONTACT') AS contact_no
FROM members;

집계 함수

여러 행을 하나의 요약 값으로 만드는 함수 묶음입니다.

  • 대표적으로 COUNT, SUM, AVG, MIN, MAX가 있습니다.
  • 집계 함수는 GROUP BY, HAVING, 분석 함수와 함께 자주 엮입니다.

COUNT / SUM / AVG / MIN / MAX

행 수, 합계, 평균, 최솟값, 최댓값을 계산하는 기본 집계 함수입니다.

  • COUNT(*)는 행 수 자체, COUNT(컬럼)은 NULL이 아닌 행 수를 셉니다.
  • AVG는 숫자 컬럼에만 적용되고, NULL은 계산에서 자동 제외됩니다.
SELECT grade_code,
       COUNT(*) AS member_cnt,
       AVG(point_score) AS avg_point
FROM members
GROUP BY grade_code;

실습 흐름 추천

  1. 문자함수와 숫자함수를 SELECT 절에서 먼저 테스트합니다.
  2. 날짜와 변환 함수는 출력 포맷과 계산 결과가 맞는지 함께 확인합니다.
  3. 집계 함수는 GROUP BY를 붙이며 결과 행 수가 어떻게 줄어드는지 비교합니다.
바로 이어서 해보려면

이론만 읽지 말고 바로 blacksql.sqld.kr에서 실행해보고, 문제 풀이 감각은 www.sqld.kr에서 이어가면 학습 속도가 훨씬 빨라집니다.

자주 묻는 질문

NVL과 COALESCE 중 무엇을 먼저 익히면 좋나요?

처음에는 NVL로 NULL 대체 감각을 잡고, 이후 여러 후보를 순서대로 검사해야 할 때 COALESCE로 확장하면 이해가 쉽습니다.

COUNT(*)와 COUNT(컬럼)은 왜 결과가 다를 수 있나요?

COUNT(컬럼)은 해당 컬럼이 NULL인 행을 세지 않기 때문입니다. NULL 포함 여부를 항상 함께 봐야 합니다.