Skip to Content
자격증SQLD29. SQLD 예상 모의고사 4회

이 모의고사는 실제 기출문제를 그대로 옮긴 것이 아닙니다. 공개된 회차의 출제 범위·문항 형식·오답 구성 방식을 분석해, 테이블·컬럼명·숫자를 모두 새로 바꿔 재구성한 문항입니다. 권장 풀이 시간은 90분입니다(실제 SQLD 시험 시간과 동일하게 맞췄습니다). 이 회차는 SQL 실행 결과 예측형 문항 비중을 높였고, 특히 NULL이 섞인 집계, NOT IN, OUTER JOIN의 행 수, RANK와 DENSE_RANK의 혼동, ROWNUM 필터, UNION과 UNION ALL의 행 수 차이, HAVING과 WHERE의 혼동이라는 여섯 가지 함정 패턴을 오답 선택지에 의도적으로 재현했습니다. 각 오답이 어떤 착각의 결과인지 해설에서 반드시 확인하십시오.

실제 SQLD는 1과목 데이터 모델링 10문항(20점), 2과목 SQL 기본 및 활용 40문항(80점), 총 100점 만점이며 과목별 40퍼센트(40%) 미만이면 과락으로 총점과 무관하게 불합격합니다. 이 회차는 온라인 쇼핑몰(고객·주문·상품·리뷰)을 소재로 삼아, 테이블과 SQL을 먼저 코드블록으로 제시하고 바로 아래에 문제를 배치하는 방식으로 구성했습니다. 표와 SQL을 직접 손으로 따라가며 결과를 먼저 예측한 뒤 보기를 확인하십시오.

문항 배분

영역문항 수문항 번호배점
데이터 모델링(엔터티·식별자·정규화·NULL·DCL)101–1020점
SQL 기본과 HAVING·WHERE 함정1011–2020점
조인과 NULL 관련 함정(NOT IN·OUTER JOIN)1021–3020점
집합연산자·윈도우 함수·ROWNUM·GROUPING SETS·계층형 질의·DCL1031–4020점
DBMS 차이와 복합 실행 결과 예측1041–5020점
합계501–50100점

데이터 모델링 (1–10번)

문제 14지선다
쇼핑몰이 상품 정산을 위해 정산 엔터티를 두고, 각 정산의 매출액·수수료율·정산기간·정산금액을 관리하며 정산유형마다 코드를 부여한다. 속성 분류에 대한 설명으로 옳지 않은 것은?
문제 24지선다
도메인(Domain)과 제약조건(Constraint)의 관계에 대한 설명으로 가장 적절한 것은?
문제 34지선다
엔터티(Entity)에 대한 설명으로 옳지 않은 것은?
문제 44지선다
한 상품에는 여러 개의 리뷰가 달릴 수 있고, 하나의 리뷰는 반드시 하나의 상품에만 속한다. 상품과 리뷰 사이 관계의 카디널리티로 옳은 것은?
문제 54지선다
[장바구니항목] 엔터티의 기본키가 (고객번호, 상품번호) 복합키로 구성되고, 고객번호는 [고객] 엔터티의 기본키를 그대로 물려받은 것이다. 이 관계에 대한 설명으로 가장 적절한 것은?
문제 64지선다
[주문상세] 테이블의 기본키는 (주문번호, 상품번호) 복합키이다. 이 테이블의 상품명 컬럼은 상품번호만으로 결정되고 주문번호와는 무관하다. 이 상태를 해결하기 위해 수행해야 하는 정규화 단계는?
문제 74지선다
BCNF(보이스-코드 정규형)에 대한 설명으로 가장 적절한 것은?
문제 84지선다
다음 중 반정규화(De-normalization) 기법에 해당하지 않는 것은?
문제 94지선다
관계형 데이터베이스에서 NULL에 대한 설명으로 옳지 않은 것은?
문제 104지선다
다음 중 DCL(데이터 제어어)에 대한 설명으로 옳은 것은?

SQL 기본과 HAVING·WHERE 함정 (11–20번)

문제 114지선다
다음 중 CHECK 제약조건에 대한 설명으로 옳은 것은?
INSERT INTO 상품 (상품ID, 상품명) VALUES (1, '텀블러');
문제 124지선다
[상품] 테이블의 재고 컬럼이 DEFAULT 0으로 정의되어 있을 때, 위 INSERT 문을 실행한 뒤 재고 컬럼 값으로 옳은 것은?
문제 134지선다
다음 순서로 실행했다. 재고 수량을 1 줄이는 UPDATE 실행, 곧이어 COMMIT 실행, 그 다음 ROLLBACK 실행. 이 ROLLBACK의 효과로 옳은 것은?
SELECT 상품명 FROM 상품 WHERE 상품명 LIKE '%컵%';
문제 144지선다
[상품] 테이블에 텀블러, 머그컵, 유리컵받침, 볼펜이라는 상품명이 있을 때, 위 SQL의 실행 결과로 옳은 것은?
SELECT NVL2(배송완료일, '배송완료', '배송중') AS 상태 FROM 주문 WHERE 주문ID = 1001;
문제 154지선다
주문ID 1001의 배송완료일이 NULL일 때, 위 SQL의 실행 결과로 옳은 것은?

[주문] 테이블에 주문ID 1, 2, 3, 4가 있고, 쿠폰ID 컬럼 값은 각각 10, NULL, 20, NULL이다.

SELECT COUNT(*) AS 전체, COUNT(쿠폰ID) AS 쿠폰사용 FROM 주문;
문제 164지선다
위 SQL을 실행했을 때 전체와 쿠폰사용 값으로 옳은 것은?

[리뷰] 테이블의 평점 컬럼에는 5, NULL, 3, 4 네 개의 행이 있다.

SELECT AVG(평점) AS 평균, SUM(평점) / COUNT(*) AS 평균2 FROM 리뷰;
문제 174지선다
위 SQL을 실행했을 때 평균과 평균2 값으로 옳은 것은?

[주문] 테이블의 배송방법 컬럼 값은 순서대로 일반, 일반, 새벽, NULL이다.

SELECT 배송방법, COUNT(*) FROM 주문 GROUP BY 배송방법;
문제 184지선다
위 SQL을 실행했을 때 생성되는 그룹의 개수는?
문제 194지선다
다음 중 문법 오류가 발생하는 SQL로 옳은 것은?

[주문] 테이블의 카테고리와 금액은 순서대로 가전 50만원, 가전 10만원, 의류 3만원, 의류 2만원, 도서 1만원이다.

SELECT 카테고리, COUNT(*) AS 건수 FROM 주문 WHERE 금액 >= 50000 GROUP BY 카테고리 HAVING COUNT(*) >= 2;
문제 204지선다
위 SQL을 실행했을 때 반환되는 결과로 옳은 것은?

조인과 NULL 관련 함정 (21–30번)

[고객] 테이블에는 고객ID 1, 2, 3이 있다. [주문] 테이블에는 주문ID 101(고객ID 1), 102(고객ID 1), 103(고객ID 2), 104(고객ID 9, 고객 테이블에 존재하지 않는 값)가 있다. 고객ID 3은 주문이 하나도 없다.

SELECT C.고객ID, O.주문ID FROM 고객 C JOIN 주문 O ON C.고객ID = O.고객ID;
문제 214지선다
위 INNER JOIN(JOIN) SQL을 실행했을 때 반환되는 행의 개수는?
SELECT C.고객ID, O.주문ID FROM 고객 C LEFT OUTER JOIN 주문 O ON C.고객ID = O.고객ID;
문제 224지선다
위와 같은 [고객], [주문] 테이블에 LEFT OUTER JOIN을 실행하면 반환되는 행의 개수는?
SELECT C.고객ID, O.주문ID FROM 고객 C RIGHT OUTER JOIN 주문 O ON C.고객ID = O.고객ID;
문제 234지선다
위와 같은 [고객], [주문] 테이블에 RIGHT OUTER JOIN을 실행하면 반환되는 행의 개수는?
SELECT C.고객ID, O.주문ID FROM 고객 C FULL OUTER JOIN 주문 O ON C.고객ID = O.고객ID;
문제 244지선다
위와 같은 [고객], [주문] 테이블에 FULL OUTER JOIN을 실행하면 반환되는 행의 개수는?

[고객] 테이블에는 고객ID 1, 2, 3이 있다. [블랙리스트] 테이블의 고객ID 컬럼에는 2와 NULL이 들어 있다.

SELECT 고객ID FROM 고객 WHERE 고객ID NOT IN (SELECT 고객ID FROM 블랙리스트);
문제 254지선다
위 SQL을 실행했을 때 결과로 옳은 것은?
SELECT 고객ID FROM 고객 C WHERE NOT EXISTS ( SELECT 1 FROM 블랙리스트 B WHERE B.고객ID = C.고객ID );
문제 264지선다
같은 [고객], [블랙리스트] 테이블에 NOT IN 대신 NOT EXISTS를 사용한 위 SQL을 실행하면 결과로 옳은 것은?

[상품] 테이블은 상품ID 1(카테고리 가전), 2(카테고리 의류), 3(카테고리 가전), 4(카테고리 도서)로 구성된다.

SELECT 상품ID FROM 상품 WHERE 카테고리 IN (SELECT 카테고리 FROM 상품 WHERE 상품ID = 1);
문제 274지선다
위 SQL을 실행했을 때 결과로 옳은 것은?
문제 284지선다
[상품] 테이블에서 각 카테고리 내 평균 가격보다 비싼 상품만 조회하려 한다. 이를 구현하는 방법으로 가장 적절한 것은?

[A] 테이블의 고객ID 컬럼에는 1, 2, 3이 있다. [B] 테이블의 고객ID 컬럼에는 2, 3, 4가 있다.

SELECT 고객ID FROM A UNION SELECT 고객ID FROM B;
문제 294지선다
위 UNION SQL을 실행했을 때 반환되는 값의 개수는?
문제 304지선다
위와 같은 [A], [B] 테이블에 UNION 대신 UNION ALL을 사용하면 반환되는 행의 개수는?

집합연산자·윈도우 함수·ROWNUM·GROUPING SETS·계층형 질의·DCL (31–40번)

문제 314지선다
위와 같은 [A], [B] 테이블(A의 고객ID는 1, 2, 3이고 B의 고객ID는 2, 3, 4)에 대해 A MINUS B를 실행했을 때 결과로 옳은 것은?

[성적] 테이블은 김(90점), 이(90점), 박(80점), 최(70점) 네 학생으로 구성된다.

SELECT 학생, 점수, RANK() OVER (ORDER BY 점수 DESC) AS R, DENSE_RANK() OVER (ORDER BY 점수 DESC) AS DR FROM 성적;
문제 324지선다
위 SQL을 실행했을 때 박(점수 80)의 RANK 값과 DENSE_RANK 값으로 옳은 것은?
문제 334지선다
위와 같은 [성적] 테이블의 RANK() OVER (ORDER BY 점수 DESC) 결과에서, RANK 값이 1인 학생은 모두 몇 명인가?

[상품] 테이블에는 상품ID 1, 2, 3, 4가 이 순서로 저장되어 있다.

SELECT * FROM 상품 WHERE ROWNUM > 1;
문제 344지선다
위 SQL을 Oracle에서 실행했을 때 결과로 옳은 것은?
문제 354지선다
가격이 높은 상위 2개 상품만 뽑으려 할 때, 다음 중 옳은 방법은?
문제 364지선다
다음 중 표준 SQL(Oracle 12c 이상)에서 정렬 후 상위 3개 행만 가져오는 구문으로 옳은 것은?

[방문자] 테이블은 1일 100명, 2일 80명, 3일 120명이 방문했다.

SELECT 일자, AVG(방문수) OVER (ORDER BY 일자 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS 이동평균 FROM 방문자;
문제 374지선다
위 SQL을 실행했을 때 2일자 행의 이동평균 값은?

[매출3] 테이블은 가전 카테고리에 100, 의류 카테고리에 200이 있다.

SELECT 카테고리, SUM(금액) FROM 매출3 GROUP BY GROUPING SETS(카테고리, ());
문제 384지선다
위 SQL을 실행했을 때 반환되는 행의 개수는?
문제 394지선다
CONNECT BY 절에 NOCYCLE 옵션을 사용하는 이유로 가장 적절한 것은?
문제 404지선다
다음 중 GRANT 문에 대한 설명으로 옳은 것은?

DBMS 차이와 복합 실행 결과 예측 (41–50번)

문제 414지선다
저장 프로시저, 사용자 정의 함수, 트리거의 개념적 차이에 대한 설명으로 옳지 않은 것은?
문제 424지선다
행 개수를 제한하는 구문에 대한 설명으로 옳지 않은 것은?
문제 434지선다
다음 중 문자열을 날짜로 변환하는 함수의 DBMS별 짝으로 옳은 것은?
문제 444지선다
PIVOT 구문의 역할로 가장 적절한 것은?

[주문] 테이블에는 주문ID 1(상태코드 P), 2(상태코드 C), 3(상태코드 X)가 있다.

SELECT 주문ID, CASE 상태코드 WHEN 'P' THEN '준비중' WHEN 'C' THEN '완료' ELSE '기타' END AS 상태명 FROM 주문;
문제 454지선다
위 SQL을 실행했을 때 주문ID 3의 상태명 값은?
문제 464지선다
다음 중 정규표현식 조건 REGEXP_LIKE(전화번호, 0으로 시작해 010 뒤에 하이픈과 숫자 4자리, 다시 하이픈과 숫자 4자리가 오는 패턴)에 매칭되는 전화번호로 옳은 것은?
SELECT 고객ID, 이름 FROM 고객 UNION SELECT 상품ID FROM 상품;
문제 474지선다
위 SQL을 실행하면 어떤 결과가 나오는가? ([고객]은 고객ID, 이름 두 컬럼을 SELECT하고 [상품]은 상품ID 한 컬럼만 SELECT했다)

[고객] 테이블은 고객ID 1(이름 김), 2(이름 이)로 구성된다. [주문] 테이블에는 고객ID 1인 주문이 3건 있고, 고객ID 2인 주문은 없다.

SELECT 고객ID, 이름, (SELECT COUNT(*) FROM 주문 O WHERE O.고객ID = C.고객ID) AS 주문건수 FROM 고객 C;
문제 484지선다
위 SQL을 실행했을 때 고객ID 2의 주문건수 값은?
문제 494지선다
다음 Oracle 전통 조인 문법에 대한 설명으로 옳은 것은? WHERE A.고객ID = B.고객ID(+) 형태로 B 쪽 컬럼에 플러스 기호를 붙였다.

[주문] 테이블에는 주문ID 1(고객ID 1, 금액 1000), 2(고객ID 1, 금액 NULL), 3(고객ID 2, 금액 2000)이 있다.

SELECT 고객ID, COUNT(*) AS 건수, SUM(금액) AS 합계 FROM 주문 GROUP BY 고객ID HAVING SUM(금액) > 500;
문제 504지선다
위 SQL을 실행했을 때 고객ID 1 행의 건수와 합계 값으로 옳은 것은?

채점 후 복습 동선

50문항을 모두 푼 뒤 아래 표로 틀린 문항 번호대를 확인하고, 해당 범위에서 5문항 이상 틀렸다면 지정된 편으로 돌아가 개념부터 다시 확인하십시오.

틀린 문항 범위다루는 개념복습할 편
1–10엔터티·속성·정규화·NULL·DCL 개념03–09편
11–20DDL·DML·TCL·WHERE·함수·NULL 집계·HAVING과 WHERE 차이09–15편
21–30조인 종류별 행 수·NOT IN과 NOT EXISTS·집합 연산자16–18편
31–40RANK 계열·ROWNUM·GROUPING SETS·계층형 질의·DCL19–24편
41–50절차형 SQL 개요·DBMS 문법 차이·PIVOT·CASE WHEN23–25편

합격 기준 안내

SQLD는 데이터 모델링 10문항(20점)과 SQL 기본 및 활용 40문항(80점), 총 100점 만점이며 두 조건을 동시에 만족해야 합격합니다.

  • 과락 방지: 데이터 모델링에서 4문항(8점) 미만, SQL에서 16문항(32점) 미만으로 맞히면 과목별 40퍼센트(40%) 기준 미달로 과락 처리되어 총점과 무관하게 불합격합니다.
  • 평균 합격선: 두 과목 점수를 합쳐 60점(전체 30문항) 이상이어야 합니다.

이 회차는 특히 NULL과 관련된 함정(21–30번, 50번)에서 반복적으로 틀렸다면, NULL이 비교·집계·조건절에서 어떻게 다르게 동작하는지부터 09편에서 다시 짚고 16–18편의 조인·서브쿼리 예제를 손으로 직접 다시 그려보십시오.

참고 자료

Last updated on