SQL 내장 함수는 데이터 조작 및 분석에 필수적이며, SQLD 시험에 자주 출제되는 핵심 개념입니다. 함수별로 어떤 역할을 하는지, 그리고 어떤 함정이 있는지 정확히 파악하는 것이 중요합니다.
| 함수 | 설명 | 시험 핵심 포인트 |
|---|---|---|
ROUND(n, m) | 반올림 | 소수점 m번째 자리에서 반올림 |
TRUNC(n, m) | 버림 | 소수점 m번째 자리에서 무조건 버림 |
CEIL(n) | 올림 | 소수점 무조건 올림 |
FLOOR(n) | 내림 | 소수점 무조건 내림 |
ABS(n) | 절댓값 | 음수도 양수로 변환 |
MOD(a, b) | 나머지 | a를 b로 나눈 나머지 |
SIGN(n) | 부호 | 양수: 1, 음수: -1, 0: 0 |
| 함수 | 설명 | 시험 핵심 포인트 |
|---|---|---|
SUBSTR(str, s, len) | 부분 문자열 | str에서 s번째부터 len개 추출 |
LENGTH(str) | 바이트 길이 | 바이트 수 반환 (한글 2~3바이트) |
CHAR_LENGTH(str) | 문자 개수 | 글자 수 반환 (한글 1자=1개) |
TRIM | 공백/문자 제거 | LTRIM (왼쪽), RTRIM (오른쪽), TRIM (양쪽) |
REPLACE | 문자열 치환 | 특정 문자열을 다른 문자열로 바꿈 |
CONCAT | 문자열 연결 | 두 문자열을 합침 (` |
| 함수 | 설명 | 시험 핵심 포인트 |
|---|---|---|
SYSDATE | 현재 날짜 | Oracle에서 사용 (MySQL은 NOW()) |
ADD_MONTHS(d, n) | 개월 추가 | 특정 날짜에 n개월을 더함 |
MONTHS_BETWEEN(d1, d2) | 월 차이 | 두 날짜 간의 개월 수 차이 |
LAST_DAY(d) | 마지막 날 | 해당 달의 마지막 날짜를 반환 |
NEXT_DAY(d, 요일) | 다음 요일 | 특정 날짜 이후의 첫 요일 날짜 |
| 함수 | 설명 | 시험 핵심 포인트 |
|---|---|---|
TO_CHAR(d, fmt) | 날짜/숫자 → 문자 | 날짜나 숫자를 원하는 형식의 문자로 변환 |
TO_DATE(str, fmt) | 문자 → 날짜 | 문자를 날짜 타입으로 변환 |
CAST(expr AS type) | 형 변환 | ANSI 표준으로 형 변환 |
| 함수 | 설명 | 시험 핵심 포인트 |
|---|---|---|
NVL(expr, val) | NULL 대체 | expr이 NULL이면 val 반환 (Oracle 전용) |
IFNULL(expr, val) | NULL 대체 | expr이 NULL이면 val 반환 (MySQL 전용) |
COALESCE(...) | NULL 아닌 첫 값 | 여러 값 중 첫 번째로 NULL이 아닌 값 반환 (ANSI 표준) |
| 함수 분류 | 주요 역할 | 시험 단골 키워드 |
|---|---|---|
| 숫자 | 반올림, 버림, 부호 | ROUND vs TRUNC, SIGN |
| 문자 | 길이, 부분 추출, 치환 | LENGTH vs CHAR_LENGTH |
| 날짜 | 날짜 계산 | ADD_MONTHS, LAST_DAY, MONTHS_BETWEEN |
| 변환 | 데이터 타입 변경 | TO_CHAR, TO_DATE |
| NULL | NULL 값 처리 | NVL, IFNULL, COALESCE |
1. 다음 중 TRUNC(123.987, 1)의 결과는 무엇인가?
① 124.0
② 123.9
③ 123.99
④ 123.98
2. 아래 SQL 실행 결과로 맞는 것은?
SELECT SIGN(-15), SIGN(0), SIGN(20) FROM DUAL;
① (-1, 0, 1)
② (-15, 0, 20)
③ (0, -1, 1)
④ (1, 0, -1)
3. 다음 쿼리 실행 결과는? (Oracle 기준, 한글은 2바이트)
SELECT LENGTH('한글'), CHAR_LENGTH('한글') FROM DUAL;
① (4, 2)
② (2, 2)
③ (2, 4)
④ (3, 3)
4. 아래 SQL 실행 결과는?
SELECT COUNT(*), COUNT(access_password)
FROM Novels;
(단, Novels 테이블의 access_password 컬럼에는 NULL 값이 2개 존재하며, 전체 행은 10개이다.)
① 10, 8
② 10, 10
③ 8, 8
④ 8, 10
5. 날짜 함수 관련 설명 중 옳은 것은?
① NEXT_DAY는 두 날짜 사이의 차이를 구한다.
② LAST_DAY는 해당 달의 마지막 날짜를 반환한다.
③ ADD_MONTHS는 특정 날짜의 다음 월요일을 찾는다.
④ MONTHS_BETWEEN은 특정 날짜에 개월을 더한다.
6. NULL 처리 함수 관련 설명으로 틀린 것은?
① NVL은 Oracle에서 NULL을 다른 값으로 대체한다.
② IFNULL은 MySQL에서 NULL을 다른 값으로 대체한다.
③ COALESCE는 ANSI 표준으로, NULL이 아닌 첫 번째 값을 반환한다.
④ NVL과 IFNULL은 여러 개의 값을 인자로 받을 수 있다.
TRUNC는 소수점 이하를 m번째 자리까지만 남기고 나머지는 버리는 함수입니다.SIGN 함수의 규칙은 양수: 1, 음수: -1, 0: 0입니다.LENGTH는 바이트 단위로 길이를 계산하므로 한글 '한'은 2바이트, '글'은 2바이트로 총 4바이트가 됩니다. CHAR_LENGTH는 글자 단위로 계산하여 2가 됩니다.COUNT(*)는 전체 행인 10개를 셉니다. COUNT(컬럼)은 NULL을 제외하고 세므로, 10 - 2 = 8이 됩니다.LAST_DAY는 해당 달의 마지막 날짜를 반환하는 함수입니다.NVL과 IFNULL은 두 개의 인자(컬럼, 대체값)만 받습니다. 여러 개의 인자를 받아 NULL이 아닌 첫 번째 값을 반환하는 함수는 COALESCE입니다.