SQLD 시험 합격 전략 요약
SQL 함수와 집계 파트는 SQLD 시험에서 매우 높은 비중을 차지합니다. 특히 NVL/ISNULL, NULLIF, COALESCE 같은 NULL 관련 함수와 GROUP BY/HAVING의 사용 규칙, ORDER BY에서의 NULL 처리 방식(Oracle vs SQL Server)은 단골 출제 영역입니다.
1. WHERE절과 연산자
초압축 암기 요약
주요 연산자: BETWEEN a AND b, IN (list), LIKE, IS NULL, NOT IN, IS NOT NULL.
연산자 우선순위: () → NOT → 비교연산자 → AND → OR.
NULL과의 수치연산은 NULL 반환, 비교연산은 FALSE 반환.
행 제한: Oracle은 ROWNUM, SQL Server는 TOP을 사용합니다.
초보자 이해용 상세 설명
연산자 활용 예시:
- WHERE TEAM_ID = ‘K2’; → 팀ID가 K2인 데이터 조회
- WHERE TEAM_ID IN (‘K2′,’K7’); → K2 또는 K7인 데이터 조회
- WHERE HEIGHT BETWEEN 170 AND 180; → 키가 170~180인 데이터
- WHERE POSITION IS NULL; → 포지션이 없는(NULL) 데이터
NULL 값의 특성: NULL은 ‘값이 없음’을 의미합니다. NULL과 어떤 숫자를 더하면 결과도 NULL이고, NULL과 비교하면 항상 FALSE가 됩니다. 따라서 NULL 여부를 확인할 때는 = NULL이 아니라 반드시 IS NULL을 사용해야 합니다.
행 제한:
- Oracle: WHERE ROWNUM = 1;
- SQL Server: SELECT TOP(1) PLAYER_NAME FROM PLAYER;
시험 출제 포인트: 연산자 우선순위에서 AND가 OR보다 먼저 수행된다는 점을 이용한 함정 문제가 자주 출제됩니다. 괄호 없이 AND와 OR를 혼합하면 결과가 달라질 수 있습니다.
2. 주요 SQL 함수
초압축 암기 요약
문자함수: LOWER, UPPER, SUBSTR/SUBSTRING, LENGTH/LEN, LTRIM, RTRIM, TRIM.
숫자함수: ROUND(반올림), TRUNC(버림), MOD(나머지), CEIL/CEILING(올림), FLOOR(내림).
날짜함수: SYSDATE/GETDATE().
CASE WHEN ~ THEN ~ ELSE ~ END 구문도 필수 암기입니다.
초보자 이해용 상세 설명
문자형 함수 핵심:
| 함수 | 기능 | 예시 |
|---|---|---|
| CONCAT | 문자열 연결 | CONCAT(‘RDBMS’,’ SQL’) → ‘RDBMS SQL’ |
| SUBSTR | 문자열 추출 | SUBSTR(‘SQL Expert’,5,3) → ‘Exp’ |
| LTRIM | 왼쪽 문자 제거 | LTRIM(‘xxxYYZZxYZ’,’x’) → ‘YYZZxYZ’ |
| RTRIM | 오른쪽 문자 제거 | RTRIM(‘XXYYzzXYzz’,’z’) → ‘XXYYzzXY’ |
| TRIM | 양쪽 문자 제거 | TRIM(‘x’ FROM ‘xxYYZZxYZxx’) → ‘YYZZxYZ’ |
숫자형 함수 핵심:
| 함수 | 예시 | 결과 |
|---|---|---|
| ROUND | ROUND(38.5235, 3) / ROUND(38.5235, 1) / ROUND(38.5235) | 38.524 / 38.5 / 39 |
| TRUNC | TRUNC(38.5235, 3) / TRUNC(38.5235, 1) / TRUNC(38.5235) | 38.523 / 38.5 / 38 |
| SIGN | SIGN(-5) / SIGN(0) / SIGN(3) | -1 / 0 / 1 |
| CEIL/CEILING | CEIL(3.2) | 4 (크거나 같은 최소 정수) |
| FLOOR | FLOOR(3.8) | 3 (작거나 같은 최대 정수) |
CASE 표현식: 두 가지 형태가 있으며 동일한 의미입니다.
- SEARCHED: CASE WHEN LOC = ‘a’ THEN ‘b’
- SIMPLE: CASE LOC WHEN ‘a’ THEN ‘b’
시험 출제 포인트: ROUND와 TRUNC의 차이(반올림 vs 버림), SUBSTR의 시작 위치와 길이 인수 계산 문제가 자주 나옵니다.
3. NULL 관련 함수
초압축 암기 요약
NVL(식1,식2)/ISNULL(식1,식2): 식1이 NULL이면 식2 출력.
NULLIF(식1,식2): 식1=식2이면 NULL, 다르면 식1.
COALESCE(식1,식2,…): NULL이 아닌 최초의 표현식 반환, 모두 NULL이면 NULL. COALESCE(NULL,NULL,’abc’) → ‘abc’.
초보자 이해용 상세 설명
NVL/ISNULL: 가장 많이 사용되는 NULL 처리 함수입니다. 값이 NULL일 때 대체값을 지정합니다. Oracle에서는 NVL, SQL Server에서는 ISNULL을 사용합니다.
NULLIF: 두 값이 같으면 NULL을 반환하고, 다르면 첫 번째 값을 반환합니다. 특정 값을 NULL로 변환하고 싶을 때 유용합니다.
COALESCE: 여러 표현식 중에서 NULL이 아닌 첫 번째 값을 찾아 반환합니다. 여러 칼럼 중 하나라도 값이 있으면 그 값을 사용하고 싶을 때 활용합니다.
시험 출제 포인트: COALESCE 함수의 동작 원리를 묻는 문제와, NULLIF에서 두 값이 같을 때 NULL을 반환한다는 점이 함정으로 자주 출제됩니다.
4. 집계 함수와 GROUP BY / ORDER BY
초압축 암기 요약
COUNT(*) = NULL 포함, COUNT(표현식) = NULL 제외.
GROUP BY에서 ALIAS 사용 불가.
집계 함수는 WHERE절에 올 수 없고 HAVING절에서 조건 사용.
ORDER BY: 기본값 ASC(오름차순), DESC(내림차순).
NULL 처리: Oracle = 가장 큰 값, SQL Server = 가장 작은 값.
SELECT 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
초보자 이해용 상세 설명
집계 함수: 여러 행을 그룹화하여 하나의 결과를 반환합니다. COUNT, SUM, AVG, MAX, MIN, STDDEV, VARIAN 등이 있으며, NULL 값을 가진 행은 제외하고 수행합니다(COUNT(*) 제외).
GROUP BY / HAVING 핵심 규칙:
- GROUP BY로 소그룹 기준을 정한 후 SELECT에서 집계 함수를 사용합니다.
- GROUP BY에서는 ALIAS를 사용할 수 없습니다.
- 집계 함수는 WHERE절에 올 수 없습니다.
- HAVING절에서 집계 함수를 이용한 조건을 표시합니다.
ORDER BY 핵심 규칙:
- 기본값은 오름차순(ASC)입니다.
- ALIAS나 칼럼 순서 정수 사용이 가능합니다.
- SQL 문장의 가장 마지막에 위치합니다.
- SELECT절에서 정의하지 않은 칼럼도 사용 가능합니다.
- Oracle에서 NULL은 가장 큰 값, SQL Server에서 NULL은 가장 작은 값으로 취급합니다.
SELECT 문장 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. 이 순서 때문에 WHERE절에서는 ALIAS를 사용할 수 없고, ORDER BY에서는 사용할 수 있습니다.
WITH TIES: SQL Server에서 TOP(N) WITH TIES를 사용하면, 상위 N건과 동일한 값을 가진 행도 함께 출력합니다.
시험 출제 포인트: SELECT 실행 순서는 거의 매 시험 출제됩니다. GROUP BY에서 ALIAS 사용 불가, 집계함수는 WHERE절 사용 불가, ORDER BY에서 NULL 처리 차이(Oracle vs SQL Server)도 핵심입니다.
시험 핵심 포인트 정리
- 연산자 우선순위: () → NOT → 비교연산자 → AND → OR
- NULL 연산: 수치연산 = NULL, 비교연산 = FALSE
- ROUND = 반올림, TRUNC = 버림 (소수점 자리 지정 가능)
- NVL/ISNULL(NULL이면 대체), NULLIF(같으면 NULL), COALESCE(첫 번째 非NULL)
- COUNT(*) = NULL 포함, COUNT(식) = NULL 제외
- SELECT 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- ORDER BY NULL: Oracle = 가장 큰 값, SQL Server = 가장 작은 값
기본 확인문제
문제 1. NULL 값과 100을 더한 결과는?
① 100 ② 0 ③ NULL ④ 에러
문제 2. COALESCE(NULL, NULL, ‘abc’, ‘def’)의 결과는?
① NULL ② ‘abc’ ③ ‘def’ ④ ‘abcdef’
문제 3. SELECT 문의 실행 순서로 올바른 것은?
① SELECT → FROM → WHERE → ORDER BY
② FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
③ FROM → SELECT → WHERE → ORDER BY
④ WHERE → FROM → GROUP BY → SELECT → ORDER BY
문제 4. GROUP BY절에서 사용할 수 없는 것은?
① 칼럼명 ② 표현식 ③ ALIAS ④ 칼럼 순서 번호
문제 5. Oracle에서 ORDER BY로 정렬할 때 NULL 값은 어디에 위치하는가?
① 가장 앞 ② 가장 뒤 ③ 중간 ④ 제외됨
기본문제 해설
1. 정답: ③ — NULL과의 수치연산은 항상 NULL을 반환합니다. NULL은 ‘알 수 없는 값’이므로 어떤 연산을 해도 결과를 알 수 없습니다.
2. 정답: ② — COALESCE는 NULL이 아닌 최초의 표현식을 반환합니다. 첫 번째와 두 번째가 NULL이므로 세 번째인 ‘abc’가 반환됩니다.
3. 정답: ② — SELECT 실행 순서는 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY입니다. 이 순서를 기억해야 ALIAS 사용 가능 여부를 판단할 수 있습니다.
4. 정답: ③ — GROUP BY절에서는 ALIAS를 사용할 수 없습니다. ALIAS는 SELECT절에서 정의되는데, SELECT는 GROUP BY보다 나중에 실행되기 때문입니다.
5. 정답: ② — Oracle에서는 NULL을 가장 큰 값으로 취급하므로, 오름차순 정렬 시 NULL은 가장 뒤에 위치합니다. SQL Server에서는 반대로 가장 작은 값으로 취급합니다.
고난도 확인문제
문제 1. 다음 SQL의 결과로 올바른 것은?
SELECT NULLIF('A', 'A') FROM DUAL;
① ‘A’ ② ‘AA’ ③ NULL ④ 에러
문제 2. 다음 중 WHERE절에 올 수 있는 것은?
① COUNT(*) > 5 ② SUM(SAL) > 1000 ③ SAL > 1000 ④ AVG(SAL) > 500
문제 3. 다음 SQL에서 WITH TIES의 역할을 올바르게 설명한 것은?
SELECT TOP(2) WITH TIES ENAME, SAL FROM EMP ORDER BY SAL DESC;
① 상위 2명만 정확히 출력한다
② 상위 2명과 동일한 급여를 받는 사원도 함께 출력한다
③ 하위 2명을 출력한다
④ 급여가 같은 사원은 제외한다
고난도 해설
1. 정답: ③
NULLIF(식1, 식2)는 식1과 식2가 같으면 NULL을 반환합니다. ‘A’와 ‘A’는 같으므로 NULL이 반환됩니다. 만약 NULLIF(‘A’, ‘B’)였다면 ‘A’가 반환됩니다.
2. 정답: ③
집계 함수(COUNT, SUM, AVG 등)는 WHERE절에 올 수 없습니다. 집계 함수를 사용한 조건은 HAVING절에서 사용해야 합니다. SAL > 1000은 일반 비교 조건이므로 WHERE절에서 사용 가능합니다.
3. 정답: ②
WITH TIES는 TOP(N)과 함께 사용되어, 상위 N건을 추출할 때 마지막 순위와 동일한 값을 가진 행도 함께 출력합니다. 예를 들어 상위 2명의 급여가 5000, 3000이고 3000을 받는 사원이 2명이라면, 총 3명이 출력됩니다. ORDER BY절이 반드시 있어야 합니다.
다음 편 예고
다음 5편에서는 ‘SQL 활용 – JOIN·집합연산자·서브쿼리’를 다룹니다. EQUI JOIN부터 OUTER JOIN까지 다양한 조인 유형, UNION/INTERSECT/EXCEPT 집합 연산자, 스칼라 서브쿼리와 인라인 뷰까지 SQLD 합격에 필수적인 내용을 정리합니다.
