CertHub 예상문제 100문항 가운데 비슷한 개념끼리 보기로 맞붙여 둔 문항을 골라 정리했습니다. 응시자 오답률 통계가 아니라 문항 구성을 보고 고른 목록입니다.
1NULL 비교와 NULL 연산
흔한 실수 — WHERE col = NULL로 NULL 행을 찾거나, COL <> 'A' 조건에 NULL 행도 포함될 거라고 생각해요.
바로잡기 — NULL과의 비교 결과는 참도 거짓도 아닌 UNKNOWN이라 조건을 통과하지 못해요. NULL은 IS NULL·IS NOT NULL로 찾고, NULL이 들어간 산술 연산(100 + NULL)의 결과도 NULL이에요.
2COUNT(*)와 COUNT(컬럼), 집계 함수의 NULL 처리
흔한 실수 — COUNT(컬럼)도 전체 행 수를 세고, AVG는 NULL을 0으로 넣어 계산한다고 생각해요.
바로잡기 — COUNT(*)는 NULL 여부와 관계없이 모든 행을 세고, COUNT(컬럼)은 그 컬럼이 NULL인 행을 빼고 세요. AVG·SUM도 NULL을 계산에서 제외해서 100, 200, NULL의 평균은 150이에요.
3WHERE와 HAVING
흔한 실수 — 집계 결과에 거는 조건을 WHERE 절에 써요.
바로잡기 — WHERE는 그룹으로 묶기 전의 개별 행에 조건을 걸고, HAVING은 GROUP BY로 묶은 뒤 집계 결과에 조건을 걸어요. SUM·COUNT 같은 집계 값이 조건에 들어가면 HAVING이에요.
4RANK와 DENSE_RANK
흔한 실수 — 공동 순위 다음 순위를 두 함수 모두 같은 방식으로 매긴다고 생각해요.
바로잡기 — RANK는 공동 순위가 있으면 그 수만큼 다음 순위를 건너뛰어 1, 2, 2, 4가 되고, DENSE_RANK는 건너뛰지 않아 1, 2, 2, 3이 돼요. ROW_NUMBER는 같은 값에도 서로 다른 번호를 붙여요.
5UNION·UNION ALL·INTERSECT의 중복 처리
흔한 실수 — UNION도 두 결과를 그대로 이어 붙인다고 보고 행 수를 더해요.
바로잡기 — UNION과 INTERSECT는 중복을 제거하고, UNION ALL만 중복을 남긴 채 합쳐요. A·B·C와 B·C·D를 합치면 UNION은 4행, UNION ALL은 6행이에요.
6OUTER JOIN의 결과 행 수
흔한 실수 — LEFT OUTER JOIN 결과가 왼쪽 테이블 행 수와 항상 같다고 계산해요.
바로잡기 — 왼쪽의 한 행이 오른쪽 여러 행과 맞으면 그만큼 늘어나고, 맞는 짝이 없는 행은 NULL을 채운 1행으로 남아요. FULL OUTER JOIN은 양쪽의 짝 없는 행이 모두 결과에 들어가요.
7DELETE와 TRUNCATE
흔한 실수 — 둘 다 행을 지우는 명령이니 같은 분류(DML)라고 생각하고, TRUNCATE도 롤백된다고 답해요.
바로잡기 — DELETE는 DML이라 WHERE로 일부 행만 지울 수 있고 롤백도 돼요. TRUNCATE는 DDL로 전체 행을 지우며 Oracle에서는 자동 COMMIT되어 일반적으로 되돌릴 수 없어요. 테이블 구조는 남아요.
8SAVEPOINT와 ROLLBACK TO
흔한 실수 — ROLLBACK TO SP1을 실행하면 트랜잭션 전체가 취소된다고 생각해요.
바로잡기 — ROLLBACK TO SP1은 SAVEPOINT SP1 이후의 작업만 취소해요. 그 앞의 INSERT는 그대로 남았다가 COMMIT으로 확정되므로, 예상문제처럼 최종 1행이 남아요.
9식별자 관계와 비식별자 관계
흔한 실수 — 부모의 식별자를 물려받기만 하면 모두 식별자 관계라고 봐요.
바로잡기 — 부모 식별자가 자식의 주식별자 구성에 들어가면 식별자 관계(실선), 자식의 일반 속성(외래키)으로만 들어가면 비식별자 관계(점선)예요.
10제2정규형과 제3정규형
흔한 실수 — 부분 함수 종속과 이행 함수 종속을 제거하는 단계를 서로 바꿔 외워요.
바로잡기 — 주식별자의 일부에만 종속된 속성을 떼어 내면 제2정규형, A→B→C처럼 일반 속성끼리 이어진 이행 종속을 없애면 제3정규형이에요. 이행 종속 제거는 정규화이고 반정규화 기법이 아니에요.