2026 SQLD 필기 모의고사 2회 | 50문항 — 정답·해설

데이터위자드 ·

2026 SQLD 필기 모의고사 2회 | 50문항 — 정답·해설

필기 · 객관식 모의고사

필기 모의고사 2회

객관식 50문항 · 90분

과목객관식 문항배점
데이터 모델링의 이해1020점
SQL 기본 및 활용4080점

총점 60점 이상과 과목별 40% 미만 과락 기준을 함께 확인합니다.

1과목. 데이터 모델링의 이해

문제 1

관계·식별자와 카디널리티에서 관계의 차수에 대한 설명으로 옳은 것은?

  1. ① 1:N 관계는 외래키를 무조건 1쪽에 둔다.
  2. ② M:N은 업무에서 성립할 수 없다.
  3. ③ 고객과 주문의 1:N 관계는 주문 쪽에 고객 외래키를 두어 구현할 수 있다.
  4. ④ 현재 행 수가 같으면 반드시 1:1이다.
정답과 해설 보기

정답 ③

1:N 관계에서 한 고객은 여러 주문과 연결되지만 한 주문은 한 고객에 속합니다. 1과 N은 저장된 표본의 현재 개수가 아니라 업무상 허용되는 관계입니다. 오늘 고객당 주문이 한 건씩 있어도 앞으로 여러 건을 허용한다면 1:N입니다. 양쪽에서 여러 개가 가능하면 M:N이며 관계형 테이블 구현에서는 주문상세·수강신청처럼 연결 엔터티로 풀어내는 경우가 많습니다. 관계를 구현할 외래키가 어느 쪽에 놓이는지도 함께 판단하세요.

기억할 핵심

고객과 주문의 1:N 관계는 주문 쪽에 고객 외래키를 두어 구현할 수 있다.

문제 2

학생은 여러 과목을 수강하고 과목에는 여러 학생이 있다. 적절한 연결 구조는?

  1. ① 학생별 과목 테이블을 따로 생성
  2. ② 관계 없이 이름만 비교
  3. ③ 학생–수강신청–과목
  4. ④ 학생 테이블의 과목명 한 칸에 전체 과목 연결
정답과 해설 보기

정답 ③

수강신청 엔터티가 학생과 과목을 연결하고 수강일·성적 등의 관계 속성도 관리할 수 있습니다.

기억할 핵심

고객과 주문의 1:N 관계는 주문 쪽에 고객 외래키를 두어 구현할 수 있다.

문제 3

관계·식별자와 카디널리티에서 선택·필수 참여에 대한 설명으로 옳은 것은?

  1. ① 주문이 없는 고객은 어떤 업무에서도 금지된다.
  2. ② 1:N이면 양쪽 모두 필수 참여다.
  3. ③ 관계의 선택성은 양방향에서 각각 판단한다.
  4. ④ 외래키는 언제나 NULL을 허용한다.
정답과 해설 보기

정답 ③

필수 참여는 관계에 반드시 참여해야 함을, 선택 참여는 연결이 없어도 존재할 수 있음을 뜻합니다. 고객이 가입만 하고 주문하지 않을 수 있다면 고객에서 주문으로의 참여는 선택입니다. 모든 주문에 고객이 필요하다면 주문에서 고객으로의 참여는 필수입니다. 양방향을 각각 문장으로 써 보면 모순을 피할 수 있습니다. 외래키가 있다는 사실만으로 NULL 금지 여부까지 결정되지는 않습니다. 필수 관계를 구현하려면 외래키의 NOT NULL 같은 제약도 검토해야 합니다.

기억할 핵심

관계의 선택성은 양방향에서 각각 판단한다.

문제 4

비회원 주문을 허용하지 않고 모든 주문에 회원이 있어야 한다. 주문의 고객번호에 필요한 조건은?

  1. ① 고객을 참조하는 외래키와 NOT NULL
  2. ② 고객번호를 항상 NULL로 저장
  3. ③ 고객명에만 공백 허용
  4. ④ 주문번호 중복 허용
정답과 해설 보기

정답 ①

존재하는 고객만 참조하는 규칙과 반드시 고객을 입력하는 규칙은 외래키·NOT NULL로 나누어 구현합니다.

기억할 핵심

관계의 선택성은 양방향에서 각각 판단한다.

문제 5

관계·식별자와 카디널리티에서 주식별자의 네 가지 성질에 대한 설명으로 옳은 것은?

  1. ① 이미 고객번호만으로 유일하면 고객번호+고객명은 최소성을 만족하지 않는다.
  2. ② 주식별자는 NULL이어도 된다.
  3. ③ 유일하기만 하면 불필요한 속성을 얼마든지 포함한다.
  4. ④ 최소성은 키 값이 가장 작은 숫자라는 뜻이다.
정답과 해설 보기

정답 ①

주식별자는 유일성·최소성·불변성·존재성을 갖추도록 선정합니다. 유일성은 한 행을 구별함을, 최소성은 불필요한 속성을 포함하지 않음을 뜻합니다. 불변성은 식별자 값이 자주 바뀌지 않아야 한다는 선정 원칙이고 존재성은 값이 있어야 한다는 뜻입니다. 주민번호처럼 민감하거나 바뀔 가능성이 있는 업무 값은 단순히 유일해 보인다고 바로 키로 정하지 않습니다. 후보키 중 주키를 택하는 과정에는 업무 안정성과 다른 엔터티에서 참조하기 쉬운지도 고려됩니다.

기억할 핵심

이미 고객번호만으로 유일하면 고객번호+고객명은 최소성을 만족하지 않는다.

문제 6

학번만으로 학생이 유일하다. 학번+이름을 후보키라고 보기 어려운 이유는?

  1. ① 학번이 반드시 중복되기 때문이다.
  2. ② 이름을 제거해도 유일하여 최소성이 없다.
  3. ③ 학생명이 숫자가 아니기 때문이다.
  4. ④ 키는 두 속성으로 만들 수 없기 때문이다.
정답과 해설 보기

정답 ②

복합키 자체가 문제는 아닙니다. 이미 학번 하나로 유일하므로 이름이 불필요하게 추가된 것이 문제입니다.

기억할 핵심

이미 고객번호만으로 유일하면 고객번호+고객명은 최소성을 만족하지 않는다.

문제 7

관계·식별자와 카디널리티에서 식별 관계와 비식별 관계에 대한 설명으로 옳은 것은?

  1. ① 비식별 관계에는 외래키가 없다.
  2. ② 외래키가 NOT NULL이면 항상 식별 관계다.
  3. ③ 부모 키가 자식 PK의 일부가 되면 식별 관계다.
  4. ④ 식별 관계의 자식은 주식별자를 가질 수 없다.
정답과 해설 보기

정답 ③

식별 관계에서는 부모의 식별자가 자식의 주식별자에 포함됩니다. 주문상세가 주문번호+순번으로 식별되는 경우 주문번호가 부모 키이자 자식 키의 일부입니다. 비식별 관계에서는 부모 키가 자식의 일반 외래키로 들어가며 자식의 주키를 구성하지 않습니다. 필수 관계인지 선택 관계인지와 식별 관계인지는 다른 기준입니다. 외래키가 NOT NULL인 비식별 관계도 가능합니다. 문제에서 실선·점선만 외우기보다 자식 PK에 부모 키가 포함되는지를 먼저 확인합니다.

기억할 핵심

부모 키가 자식 PK의 일부가 되면 식별 관계다.

문제 8

주문상세 PK가 (주문번호, 상세순번)이다. 주문번호가 주문을 참조한다면?

  1. ① 외래키가 아니므로 관계가 없다.
  2. ② 부모 키가 자식 PK에 포함되지 않았다.
  3. ③ 주문과 주문상세는 식별 관계다.
  4. ④ 주문번호만으로 모든 상세가 유일하다.
정답과 해설 보기

정답 ③

주문번호가 자식의 복합 주키에 포함되므로 식별 관계입니다. 상세순번이 주문 내에서 상세를 추가로 구별합니다.

기억할 핵심

부모 키가 자식 PK의 일부가 되면 식별 관계다.

문제 9

관계·식별자와 카디널리티에서 외래키와 참조 무결성에 대한 설명으로 옳은 것은?

  1. ① 부모 삭제는 어떤 DB에서도 항상 연쇄 삭제된다.
  2. ② 외래키 값은 자식 테이블에서 중복될 수 있다.
  3. ③ 외래키 컬럼은 반드시 UNIQUE다.
  4. ④ 존재하지 않는 부모 키도 참조 무결성을 만족한다.
정답과 해설 보기

정답 ②

외래키는 다른 테이블의 기본키 또는 유일키 등 참조 가능한 키를 가리킵니다. 자식 테이블에는 같은 부모를 참조하는 값이 여러 번 나올 수 있습니다. 따라서 외래키라는 이유만으로 그 값이 유일한 것은 아닙니다. 부모 삭제 시 거부·연쇄 삭제·NULL 설정 등 동작은 제약 설정과 업무 규칙에 따라 달라집니다. 주문 이력을 보존해야 하는데 고객 삭제를 무조건 주문 삭제로 연결하면 업무 문제가 생길 수 있으므로 관계의 의미를 함께 봅니다.

기억할 핵심

외래키 값은 자식 테이블에서 중복될 수 있다.

문제 10

고객 10이 주문 3건을 했다. 주문의 고객번호 10이 세 번 나오는 것은?

  1. ① 항상 NULL로 바꾸어야 한다.
  2. ② 1:N 관계에서 정상이다.
  3. ③ 외래키 유일성 위반이다.
  4. ④ 모든 주문 PK 중복이다.
정답과 해설 보기

정답 ②

고객번호는 주문의 외래키이므로 같은 고객의 주문 여러 건에서 반복될 수 있습니다.

기억할 핵심

외래키 값은 자식 테이블에서 중복될 수 있다.

2과목. SQL 기본 및 활용

문제 11

INNER·OUTER·표준 조인에서 INNER JOIN의 행 생성에 대한 설명으로 옳은 것은?

  1. ① INNER JOIN 행 수는 항상 왼쪽 행 수와 같다.
  2. ② 중복 키는 조인 전에 항상 자동 제거된다.
  3. ③ 같은 컬럼명이면 ON이 없어도 자동으로 정확히 연결된다.
  4. ④ 같은 조인 키가 양쪽에서 반복되면 모든 매칭 쌍이 생성된다.
정답과 해설 보기

정답 ④

INNER JOIN은 ON 조건을 만족하는 행 쌍을 반환합니다. A의 같은 키가 2행이고 B의 같은 키가 3행이면 해당 키에서 2×3=6쌍이 생깁니다. 키의 중복 여부를 보지 않고 두 테이블 중 적은 행 수가 결과라고 생각하면 틀립니다. 조인 조건을 빠뜨리면 카티션 곱으로 행 수가 크게 늘 수 있습니다. 같은 이름의 컬럼이라는 사실만으로 자동 조인되는 것도 아닙니다. 결과 한 행의 단위가 고객인지 주문인지 주문상세인지 확인합니다.

기억할 핵심

같은 조인 키가 양쪽에서 반복되면 모든 매칭 쌍이 생성된다.

문제 12

A에서 키 1이 2행, B에서 키 1이 3행이다. 키 동등 조인의 해당 결과는?

  1. ① 3행
  2. ② 2행
  3. ③ 6행
  4. ④ 1행
정답과 해설 보기

정답 ③

각 A행이 B의 세 행과 만나므로 2×3=6행입니다.

기억할 핵심

같은 조인 키가 양쪽에서 반복되면 모든 매칭 쌍이 생성된다.

문제 13

INNER·OUTER·표준 조인에서 LEFT OUTER JOIN에 대한 설명으로 옳은 것은?

  1. ① LEFT JOIN은 매칭이 없는 왼쪽 행도 오른쪽 NULL과 함께 보존한다.
  2. ② LEFT JOIN은 왼쪽 행을 반드시 한 번씩만 반환한다.
  3. ③ 오른쪽의 매칭 없는 행을 무조건 보존한다.
  4. ④ ON과 WHERE 위치는 외부 조인에서 항상 무관하다.
정답과 해설 보기

정답 ①

LEFT JOIN은 왼쪽 행을 보존하고, 오른쪽에 매칭이 없으면 오른쪽 컬럼을 NULL로 채웁니다. 주문 없는 고객을 포함하려면 고객을 왼쪽에 둡니다. 다만 한 고객에게 여러 주문이 있으면 고객 행이 한 번만 나온다는 뜻은 아닙니다. LEFT JOIN 이후 오른쪽 컬럼 조건을 WHERE에 두면 NULL 보완 행이 제거될 수 있습니다. 기준 행을 유지하려는 조건인지 최종 결과를 제한하려는 조건인지 구분해 ON과 WHERE를 선택하세요.

기억할 핵심

LEFT JOIN은 매칭이 없는 왼쪽 행도 오른쪽 NULL과 함께 보존한다.

문제 14

고객 A는 주문 2건, 고객 B는 주문 0건이다. 고객 LEFT JOIN 주문 결과는?

  1. ① 3행
  2. ② 0행
  3. ③ 1행
  4. ④ 2행
정답과 해설 보기

정답 ①

A는 두 매칭 행, B는 오른쪽 NULL인 한 행으로 총 3행입니다.

기억할 핵심

LEFT JOIN은 매칭이 없는 왼쪽 행도 오른쪽 NULL과 함께 보존한다.

문제 15

INNER·OUTER·표준 조인에서 외부 조인의 조건 위치에 대한 설명으로 옳은 것은?

  1. ① 오른쪽 조건을 ON에 두면 매칭 없는 왼쪽 행의 보존을 유지할 수 있다.
  2. ② ON은 조인 후 원본 테이블을 수정한다.
  3. ③ WHERE는 외부 조인에서 사용할 수 없다.
  4. ④ 외부 조인의 오른쪽 WHERE 조건은 NULL 보완 행을 언제나 유지한다.
정답과 해설 보기

정답 ①

주문 없는 고객도 남기면서 결제완료 주문만 붙이려면 결제 상태를 ON 조건에 포함할 수 있습니다. WHERE 주문상태=완료를 쓰면 주문이 NULL인 고객은 UNKNOWN으로 제거됩니다. ON은 연결할 쌍을 정하고 WHERE는 연결 뒤 결과를 거릅니다. 외부 조인의 보존 효과를 판단할 때 가장 중요한 차이입니다. 단순히 모든 조건을 ON으로 옮기는 것도 답은 아니며 최종 요구사항에 맞춰야 합니다.

기억할 핵심

오른쪽 조건을 ON에 두면 매칭 없는 왼쪽 행의 보존을 유지할 수 있다.

문제 16

주문 없는 고객도 표시하며 완료 주문만 붙인다. 상태 조건의 적절한 위치는?

  1. ① WHERE 주문상태=완료만
  2. ② ORDER BY만 사용
  3. ③ LEFT JOIN의 ON 안
  4. ④ 고객명에 상태 연결
정답과 해설 보기

정답 ③

ON에서 완료 주문만 매칭하면 완료 주문이 없는 고객도 NULL 보완 행으로 남습니다.

기억할 핵심

오른쪽 조건을 ON에 두면 매칭 없는 왼쪽 행의 보존을 유지할 수 있다.

문제 17

INNER·OUTER·표준 조인에서 CROSS·NATURAL·USING에 대한 설명으로 옳은 것은?

  1. ① NATURAL JOIN은 선언된 FK만 자동 추론한다.
  2. ② NATURAL JOIN은 같은 이름의 컬럼을 조인 기준으로 사용한다.
  3. ③ USING은 서로 다른 이름의 컬럼을 자동 변환한다.
  4. ④ CROSS JOIN은 결과가 항상 0행이다.
정답과 해설 보기

정답 ②

CROSS JOIN은 모든 행 쌍을 만들므로 3행과 4행은 12행입니다. NATURAL JOIN은 같은 이름의 컬럼들을 조건으로 사용하므로 스키마 변화에 주의해야 합니다. USING(키)는 동등 조인에 사용할 동일 이름 컬럼을 명시합니다. 각 표준 조인은 목적이 다릅니다. NATURAL JOIN이 외래키 관계를 추론하는 것은 아닙니다. 같은 이름의 상태 컬럼이 추가되면 의도하지 않은 조건이 포함될 수 있으므로 명시적인 ON이나 USING이 더 분명할 때가 많습니다.

기억할 핵심

NATURAL JOIN은 같은 이름의 컬럼을 조인 기준으로 사용한다.

문제 18

3행 테이블과 4행 테이블을 CROSS JOIN하면?

  1. ① 12행
  2. ② 7행
  3. ③ 4행
  4. ④ 3행
정답과 해설 보기

정답 ①

모든 조합을 생성하므로 3×4=12행입니다.

기억할 핵심

NATURAL JOIN은 같은 이름의 컬럼을 조인 기준으로 사용한다.

문제 19

INNER·OUTER·표준 조인에서 조인 후 집계와 COUNT에 대한 설명으로 옳은 것은?

  1. ① LEFT JOIN에서 주문 건수는 오른쪽 주문키를 COUNT하는 방식으로 구할 수 있다.
  2. ② 조인한 금액은 어떤 관계에서도 중복 합산될 수 없다.
  3. ③ COUNT(NULL)은 1이다.
  4. ④ COUNT(*)는 주문이 없는 고객에서 항상 0이다.
정답과 해설 보기

정답 ①

외부 조인 결과에서 COUNT(*)는 NULL 보완 행도 세고, COUNT(오른쪽의 NOT NULL 키)는 실제 매칭 행만 셉니다. 주문 없는 고객의 주문수를 구할 때 COUNT(*)=1이 되는 함정을 확인하세요. 고객·주문·상세를 함께 연결하면 주문 한 건이 상세 수만큼 반복될 수 있습니다. 주문금액을 그대로 SUM하면 중복 합산될 수 있으므로 먼저 필요한 단위로 집계하거나 결과 단위를 재설계해야 합니다.

기억할 핵심

LEFT JOIN에서 주문 건수는 오른쪽 주문키를 COUNT하는 방식으로 구할 수 있다.

문제 20

주문 없는 고객의 LEFT JOIN 결과 한 행에서 COUNT(*),COUNT(주문.id)는?

  1. ① 1, 0
  2. ② 0, 1
  3. ③ 1, 1
  4. ④ 0, 0
정답과 해설 보기

정답 ①

행은 하나 존재하지만 주문 id는 NULL이므로 두 COUNT의 결과가 달라집니다.

기억할 핵심

LEFT JOIN에서 주문 건수는 오른쪽 주문키를 COUNT하는 방식으로 구할 수 있다.

문제 21

서브쿼리·EXISTS·스칼라 서브쿼리에서 단일행과 다중행에 대한 설명으로 옳은 것은?

  1. ① =는 여러 행을 자동으로 첫 행만 골라 비교한다.
  2. ② GROUP BY의 결과는 언제나 한 행이다.
  3. ③ IN은 한 값만 받을 수 있다.
  4. ④ = 비교의 서브쿼리는 단일행 결과를 전제로 한다.
정답과 해설 보기

정답 ④

단일행 서브쿼리를 = 같은 비교에 사용하려면 결과가 한 행이어야 합니다. 여러 행이 나올 수 있으면 IN·ANY·ALL처럼 다중행 연산자를 검토합니다. 최고 급여를 MAX로 구한 결과와 부서별 최고 급여를 GROUP BY로 구한 결과는 행 수가 다릅니다. 조회 조건이 지금은 한 행을 반환하더라도 데이터가 늘면 달라질 수 있습니다. 쿼리 구조나 유일 제약으로 한 행이 보장되는지 확인하세요.

기억할 핵심

= 비교의 서브쿼리는 단일행 결과를 전제로 한다.

문제 22

부서가 3개이고 SELECT MAX(salary) FROM emp GROUP BY dept가 3행을 반환한다. 이를 salary = (서브쿼리)에 쓰면?

  1. ① 항상 첫 부서만 자동 선택한다.
  2. ② NULL이 자동으로 0이 된다.
  3. ③ 다중행 결과로 단일행 비교 오류가 날 수 있다.
  4. ④ 항상 전체 직원이 선택된다.
정답과 해설 보기

정답 ③

그룹별 최대는 여러 행이므로 단일행 = 비교의 전제를 충족하지 않습니다.

기억할 핵심

= 비교의 서브쿼리는 단일행 결과를 전제로 한다.

문제 23

서브쿼리·EXISTS·스칼라 서브쿼리에서 상관 서브쿼리에 대한 설명으로 옳은 것은?

  1. ① 상관 서브쿼리는 바깥 컬럼을 참조할 수 없다.
  2. ② 상관 서브쿼리는 바깥 쿼리의 컬럼을 참조한다.
  3. ③ 서브쿼리의 논리 구조가 물리 실행 순서를 항상 확정한다.
  4. ④ 회사 전체 평균과 부서 평균은 언제나 같다.
정답과 해설 보기

정답 ②

상관 서브쿼리는 내부에서 바깥 쿼리의 컬럼을 참조합니다. 같은 부서 평균보다 급여가 높은 직원을 찾으려면 내부 평균의 부서 조건을 바깥 직원의 부서와 연결합니다. 전체 회사 평균과 부서 평균은 다른 기준입니다. 논리적으로 바깥 행별 조건이 달라지지만 실제 DBMS는 이를 조인이나 다른 실행계획으로 변환할 수 있습니다. 작성 형태만 보고 반드시 물리적으로 한 행씩 반복 실행된다고 단정하지 마세요.

기억할 핵심

상관 서브쿼리는 바깥 쿼리의 컬럼을 참조한다.

문제 24

e의 같은 부서 평균을 구하는 내부 조건은?

  1. ① i.dept = i.dept만
  2. ② e.salary = e.salary만
  3. ③ 조건 없이 전체 평균
  4. ④ i.dept = e.dept
정답과 해설 보기

정답 ④

내부 i의 부서를 바깥 e의 부서와 연결해야 해당 직원 부서 평균을 계산합니다.

기억할 핵심

상관 서브쿼리는 바깥 쿼리의 컬럼을 참조한다.

문제 25

서브쿼리·EXISTS·스칼라 서브쿼리에서 EXISTS와 행 존재에 대한 설명으로 옳은 것은?

  1. ① EXISTS는 SELECT값이 NULL이면 언제나 FALSE다.
  2. ② 주문이 두 건이면 바깥 고객을 자동으로 두 번 반환한다.
  3. ③ EXISTS는 반드시 SELECT *만 허용한다.
  4. ④ EXISTS는 서브쿼리 결과 행의 존재 여부를 검사한다.
정답과 해설 보기

정답 ④

EXISTS는 서브쿼리 결과에 행이 있는지 판단합니다. 내부 SELECT 목록의 값보다 조건에 맞는 행의 존재가 핵심입니다. 주문이 있는 고객을 찾을 때 주문과 고객을 연결한 EXISTS를 쓰면 주문 수만큼 고객 결과를 늘리지 않고 존재를 확인할 수 있습니다. EXISTS(SELECT NULL ...)도 행이 존재하면 참이 될 수 있습니다. NULL이라는 값과 결과 행이 없다는 상태를 구분하세요.

기억할 핵심

EXISTS는 서브쿼리 결과 행의 존재 여부를 검사한다.

문제 26

EXISTS(SELECT NULL FROM t)에서 t에 한 행이 있으면?

  1. ① FALSE
  2. ② 반드시 오류
  3. ③ TRUE
  4. ④ UNKNOWN
정답과 해설 보기

정답 ③

선택 값이 NULL이어도 결과 행이 존재하므로 EXISTS는 TRUE입니다.

기억할 핵심

EXISTS는 서브쿼리 결과 행의 존재 여부를 검사한다.

문제 27

서브쿼리·EXISTS·스칼라 서브쿼리에서 ANY와 ALL에 대한 설명으로 옳은 것은?

  1. ① >ANY는 반드시 모든 값보다 커야 한다.
  2. ② ANY와 ALL은 항상 같은 결과다.
  3. ③ >ALL은 하나보다만 크면 된다.
  4. ④ NULL 없는 집합에서 >ALL은 모든 원소보다 큰 조건이다.
정답과 해설 보기

정답 ④

x>ANY(목록)은 목록 중 하나보다 크면 참이고 x>ALL(목록)은 모든 값보다 커야 참입니다. NULL이 없는 10,20 목록에서 >ANY는 최솟값 10보다 큰 조건, >ALL은 최댓값 20보다 큰 조건과 연결됩니다. NULL이나 빈 집합이 있으면 단순 최솟값·최댓값 치환만으로 판단하면 안 됩니다. ANY의 빈 집합은 참인 비교가 없어 FALSE이고 ALL의 빈 집합은 위반 비교가 없어 TRUE가 되는 논리도 구분합니다.

기억할 핵심

NULL 없는 집합에서 >ALL은 모든 원소보다 큰 조건이다.

문제 28

15 > ANY(10,20)와 15 > ALL(10,20)의 결과는?

  1. ① FALSE, TRUE
  2. ② FALSE, FALSE
  3. ③ TRUE, FALSE
  4. ④ TRUE, TRUE
정답과 해설 보기

정답 ③

15는 10보다 크므로 ANY는 참이지만 20보다 크지 않아 ALL은 거짓입니다.

기억할 핵심

NULL 없는 집합에서 >ALL은 모든 원소보다 큰 조건이다.

문제 29

서브쿼리·EXISTS·스칼라 서브쿼리에서 스칼라 서브쿼리와 인라인 뷰에 대한 설명으로 옳은 것은?

  1. ① FROM 절의 서브쿼리는 인라인 뷰로 사용할 수 있다.
  2. ② 스칼라 서브쿼리는 여러 열·여러 행이어도 된다.
  3. ③ 인라인 뷰는 원본 테이블을 영구 복제한다.
  4. ④ 내부 정렬은 어떤 외부 연산 뒤에도 보장된다.
정답과 해설 보기

정답 ①

스칼라 서브쿼리는 한 행·한 열의 값으로 쓰며 결과가 없으면 NULL로 취급될 수 있습니다. 인라인 뷰는 FROM 안의 서브쿼리로 결과 집합을 테이블처럼 참조합니다. 여러 행을 반환하는 스칼라 서브쿼리는 오류가 될 수 있습니다. 컬럼 이름과 별칭을 명확히 지정하면 바깥 쿼리에서 참조하기 쉽습니다. 인라인 뷰의 내부 ORDER BY만으로 최종 결과 정렬까지 보장된다고 생각하지 마세요. 최종 ORDER BY는 바깥 결과에 명시합니다.

기억할 핵심

FROM 절의 서브쿼리는 인라인 뷰로 사용할 수 있다.

문제 30

SELECT (SELECT name FROM dept WHERE id=-1)에서 해당 부서가 없으면 스칼라 결과는?

  1. ① NULL
  2. ② 원본 첫 부서명
  3. ③ 숫자 0으로 고정
  4. ④ 문자열 없음
정답과 해설 보기

정답 ①

스칼라 서브쿼리가 0행을 반환하는 경우 NULL 값으로 평가됩니다.

기억할 핵심

FROM 절의 서브쿼리는 인라인 뷰로 사용할 수 있다.

문제 31

집합 연산·ROLLUP·CUBE·GROUPING에서 UNION과 UNION ALL에 대한 설명으로 옳은 것은?

  1. ① UNION ALL은 자동으로 중복을 삭제한다.
  2. ② 집합 연산은 열 이름으로 자동 매칭한다.
  3. ③ UNION은 컬럼 수가 달라도 자동 보정한다.
  4. ④ UNION ALL은 양쪽 결과의 중복을 유지한다.
정답과 해설 보기

정답 ④

UNION은 중복 결과 행을 제거하고 UNION ALL은 중복을 유지합니다. 양쪽 SELECT의 컬럼 수와 대응 자료형이 호환되어야 합니다. 열 이름이 같아야만 결합되는 것은 아니며 결과의 열 순서로 대응합니다. 중복을 유지해야 하는 거래 이력을 UNION으로 합치면 실제 두 거래가 하나처럼 보일 수 있습니다. 성능만이 아니라 결과 의미를 기준으로 선택하세요.

기억할 핵심

UNION ALL은 양쪽 결과의 중복을 유지한다.

문제 32

A결과 1,1과 B결과 1,2를 UNION과 UNION ALL로 결합한 행 수는?

  1. ① 3행,3행
  2. ② 4행,2행
  3. ③ 2행,4행
  4. ④ 1행,4행
정답과 해설 보기

정답 ③

UNION은 1·2 두 값, UNION ALL은 1·1·1·2 네 행을 반환합니다.

기억할 핵심

UNION ALL은 양쪽 결과의 중복을 유지한다.

문제 33

집합 연산·ROLLUP·CUBE·GROUPING에서 교집합과 차집합에 대한 설명으로 옳은 것은?

  1. ① 차집합은 왼쪽 결과에서 오른쪽에 있는 값을 제외한다.
  2. ② INTERSECT는 합집합이다.
  3. ③ MINUS는 숫자 뺄셈 컬럼만 지원한다.
  4. ④ A MINUS B는 항상 B MINUS A와 같다.
정답과 해설 보기

정답 ①

INTERSECT는 두 결과의 공통 행, Oracle의 MINUS나 표준 계열의 EXCEPT는 왼쪽에만 있는 행을 반환합니다. 차집합은 방향이 있어 A-B와 B-A가 다를 수 있습니다. 제품별 지원 이름과 ALL 변형 지원을 구분해야 합니다. 기본적인 DISTINCT 집합 연산은 중복을 제거합니다. NULL 비교에서는 일반 WHERE의 = 비교와 집합 중복 판정 규칙을 혼동하지 않도록 실제 연산의 의미를 보세요.

기억할 핵심

차집합은 왼쪽 결과에서 오른쪽에 있는 값을 제외한다.

문제 34

A={1,2,3}, B={2,4}에서 A MINUS B는?

  1. ① 4
  2. ② 1,3
  3. ③ 2
  4. ④ 1,2,3,4
정답과 해설 보기

정답 ②

A에 있으면서 B에 없는 1과 3이 남습니다.

기억할 핵심

차집합은 왼쪽 결과에서 오른쪽에 있는 값을 제외한다.

문제 35

집합 연산·ROLLUP·CUBE·GROUPING에서 ROLLUP의 계층 소계에 대한 설명으로 옳은 것은?

  1. ① ROLLUP은 결과를 항상 오름차순 보장한다.
  2. ② ROLLUP(a,b)는 (a,b), (a), 전체 총계 수준을 만든다.
  3. ③ ROLLUP(a,b)는 b별 소계만 만든다.
  4. ④ ROLLUP은 컬럼 순서와 무관하다.
정답과 해설 보기

정답 ②

ROLLUP(a,b)는 (a,b), (a), () 수준을 만듭니다. a·b별 상세 합계, a별 소계, 전체 총계입니다. 컬럼 순서를 바꾸면 중간 소계 기준이 바뀌므로 ROLLUP(b,a)와 동일하지 않습니다. 결과에 NULL이 보인다고 무조건 원본 결측값인 것은 아닙니다. 소계 표시를 위해 생긴 NULL과 원본 NULL을 구별하려면 GROUPING 함수를 활용합니다. 결과 정렬은 별도로 지정해야 합니다.

기억할 핵심

ROLLUP(a,b)는 (a,b), (a), 전체 총계 수준을 만든다.

문제 36

ROLLUP(지역,상품)에 기본적으로 포함되지 않는 수준은?

  1. ① 지역·상품별 합계
  2. ② 상품만의 소계
  3. ③ 전체 총계
  4. ④ 지역별 소계
정답과 해설 보기

정답 ②

ROLLUP은 왼쪽부터 계층을 유지하므로 상품만의 소계는 별도로 만들지 않습니다.

기억할 핵심

ROLLUP(a,b)는 (a,b), (a), 전체 총계 수준을 만든다.

문제 37

집합 연산·ROLLUP·CUBE·GROUPING에서 CUBE와 GROUPING SETS에 대한 설명으로 옳은 것은?

  1. ① CUBE(a,b)는 항상 ROLLUP과 같은 세 수준이다.
  2. ② GROUPING SETS는 필요한 집계 수준을 명시적으로 선택한다.
  3. ③ 그룹 수준 수와 실제 결과 행 수는 항상 같다.
  4. ④ GROUPING SETS에는 전체 총계만 적을 수 있다.
정답과 해설 보기

정답 ②

CUBE(a,b)는 (a,b),(a),(b),()의 모든 조합 수준을 만듭니다. GROUPING SETS는 필요한 그룹 조합만 명시합니다. CUBE의 n개 컬럼은 최대 2의 n제곱 개 그룹 수준을 만들 수 있으므로 컬럼이 늘면 결과가 커집니다. 모든 조합이 필요한 것이 아니라면 GROUPING SETS((지역),(상품))처럼 요구 수준만 지정할 수 있습니다. 이 경우 전체 총계는 ()를 명시하지 않으면 자동 포함되는 것으로 가정하지 않습니다.

기억할 핵심

GROUPING SETS는 필요한 집계 수준을 명시적으로 선택한다.

문제 38

CUBE(a,b)의 그룹 수준 수는?

  1. ① 2개
  2. ② 3개
  3. ③ 8개
  4. ④ 4개
정답과 해설 보기

정답 ④

a,b를 포함하거나 제외하는 조합은 2²=4개입니다. 실제 결과 행 수는 각 그룹의 값 개수에 따라 달라집니다.

기억할 핵심

GROUPING SETS는 필요한 집계 수준을 명시적으로 선택한다.

문제 39

집합 연산·ROLLUP·CUBE·GROUPING에서 GROUPING으로 소계 구분에 대한 설명으로 옳은 것은?

  1. ① 소계에는 반드시 문자열 전체가 자동 입력된다.
  2. ② 소계 표시용 NULL은 GROUPING으로 원본 NULL과 구분할 수 있다.
  3. ③ GROUPING은 원본 값이 NULL이면 항상 1이다.
  4. ④ GROUPING은 NULL을 모두 삭제한다.
정답과 해설 보기

정답 ②

GROUPING(컬럼)은 해당 컬럼이 집계 수준에서 제외되어 소계 표시가 된 경우 1, 실제 그룹 컬럼인 경우 0을 반환합니다. 원본 데이터의 NULL이라도 실제 그룹 값으로 참여했다면 GROUPING=0입니다. COALESCE(지역,전체)만 쓰면 원본 지역 미입력과 전체 총계를 같은 이름으로 표시할 수 있습니다. GROUPING을 CASE에서 사용하면 미입력과 소계를 구분한 라벨을 만들 수 있습니다.

기억할 핵심

소계 표시용 NULL은 GROUPING으로 원본 NULL과 구분할 수 있다.

문제 40

원본 지역=NULL인 그룹의 GROUPING(지역)과 전체 총계의 값은?

  1. ① 0,1
  2. ② 1,0
  3. ③ 1,1
  4. ④ 0,0
정답과 해설 보기

정답 ①

원본 NULL도 실제 지역 그룹이므로 0, 집계에서 지역을 제외한 총계는 1입니다.

기억할 핵심

소계 표시용 NULL은 GROUPING으로 원본 NULL과 구분할 수 있다.

문제 41

윈도우 함수·순위·Top N에서 PARTITION BY와 행 유지에 대한 설명으로 옳은 것은?

  1. ① PARTITION BY는 항상 행을 한 개로 합친다.
  2. ② 윈도우 함수에는 집계를 사용할 수 없다.
  3. ③ 윈도우 집계는 원본 행을 유지하면서 파티션 계산 결과를 붙일 수 있다.
  4. ④ OVER 안 정렬은 최종 결과 순서를 항상 보장한다.
정답과 해설 보기

정답 ③

PARTITION BY는 윈도우 계산을 나눌 영역을 정합니다. SUM(급여) OVER(PARTITION BY 부서)는 각 직원 행에 해당 부서 합계를 붙입니다. 직원 3행이 있으면 결과도 3행을 유지하며 부서별 한 행으로 줄지 않습니다. 윈도우 함수 안의 ORDER BY는 계산 순서를 정하고 최종 결과 정렬은 바깥 ORDER BY가 담당합니다. 계산 순서가 있다는 이유만으로 화면의 최종 행 순서까지 보장된다고 생각하지 마세요.

기억할 핵심

윈도우 집계는 원본 행을 유지하면서 파티션 계산 결과를 붙일 수 있다.

문제 42

A부서 급여 100·200 두 직원에 SUM(급여) OVER(PARTITION BY 부서)를 적용하면?

  1. ① 각 직원 행에 300이 표시되는 2행
  2. ② NULL 두 행
  3. ③ 100 한 행만
  4. ④ 300 한 행만
정답과 해설 보기

정답 ①

각 직원 행은 유지되고 동일 파티션 합계 300이 각각 붙습니다.

기억할 핵심

윈도우 집계는 원본 행을 유지하면서 파티션 계산 결과를 붙일 수 있다.

문제 43

윈도우 함수·순위·Top N에서 RANK·DENSE_RANK·ROW_NUMBER에 대한 설명으로 옳은 것은?

  1. ① 고유 ID를 순위 기준에 추가해도 동률은 항상 유지된다.
  2. ② RANK는 동률 다음 순위를 건너뛰고 DENSE_RANK는 연속 순위다.
  3. ③ ROW_NUMBER는 동률에 같은 번호를 준다.
  4. ④ RANK와 DENSE_RANK는 동률이 있어도 항상 같다.
정답과 해설 보기

정답 ②

RANK는 동률 다음 순위를 건너뛰고 DENSE_RANK는 건너뛰지 않습니다. ROW_NUMBER는 행마다 서로 다른 번호를 줍니다. 점수 100,100,90이면 RANK는 1,1,3이고 DENSE_RANK는 1,1,2입니다. ROW_NUMBER의 동률 순서를 재현하려면 고유한 보조 정렬키를 지정하세요. 반면 동점 순위를 구할 때 순위용 ORDER BY에 고유 ID까지 넣으면 동점 자체가 사라질 수 있으므로 목적을 구분해야 합니다.

기억할 핵심

RANK는 동률 다음 순위를 건너뛰고 DENSE_RANK는 연속 순위다.

문제 44

점수 100,100,90의 RANK와 DENSE_RANK 마지막 순위는?

  1. ① 3과 2
  2. ② 3과 3
  3. ③ 2와 2
  4. ④ 2와 3
정답과 해설 보기

정답 ①

앞선 동률 2행 때문에 RANK는 3, DENSE_RANK는 두 번째 점수 그룹이므로 2입니다.

기억할 핵심

RANK는 동률 다음 순위를 건너뛰고 DENSE_RANK는 연속 순위다.

문제 45

윈도우 함수·순위·Top N에서 ROWS와 RANGE에 대한 설명으로 옳은 것은?

  1. ① ROWS와 RANGE는 모든 데이터에서 항상 같다.
  2. ② 누적 프레임은 지정할 수 없다.
  3. ③ ROWS와 RANGE는 동률이 있는 정렬 값에서 누적 범위가 달라질 수 있다.
  4. ④ RANGE는 반드시 단 한 행만 뜻한다.
정답과 해설 보기

정답 ③

ROWS는 물리적인 행 위치, RANGE는 정렬 값의 범위를 기준으로 프레임을 정합니다. 같은 정렬 값이 여러 개일 때 RANGE ... CURRENT ROW는 같은 값의 동료 행을 함께 포함할 수 있습니다. ORDER BY가 있는 윈도우 집계의 기본 프레임을 확인하지 않으면 동률에서 누적합이 예상보다 크게 증가할 수 있습니다. 행별 순차 누적이 목적이면 명시적인 ROWS와 동률을 해소할 정렬키를 검토합니다.

기억할 핵심

ROWS와 RANGE는 동률이 있는 정렬 값에서 누적 범위가 달라질 수 있다.

문제 46

정렬 값이 1,1이고 금액 10,20일 때 RANGE UNBOUNDED PRECEDING~CURRENT ROW의 누적합은?

  1. ① 두 행 모두 30
  2. ② 10과 20
  3. ③ 10과 30으로 반드시 고정
  4. ④ 0과 0
정답과 해설 보기

정답 ①

같은 정렬 값 1의 동료 행을 함께 포함하여 두 행 모두 30입니다.

기억할 핵심

ROWS와 RANGE는 동률이 있는 정렬 값에서 누적 범위가 달라질 수 있다.

문제 47

윈도우 함수·순위·Top N에서 LAG·LEAD와 앞뒤 행에 대한 설명으로 옳은 것은?

  1. ① LAG는 무조건 달력상 전월을 채워준다.
  2. ② LEAD는 이전 행만 참조한다.
  3. ③ 파티션은 LAG 결과에 영향을 주지 않는다.
  4. ④ LAG는 정의한 정렬과 파티션 안에서 이전 행의 값을 참조한다.
정답과 해설 보기

정답 ④

LAG는 정렬상 이전 행, LEAD는 다음 행의 값을 참조합니다. 전월 매출과 비교하려면 월 정렬을 정의해야 합니다. 값이 없는 경계 행의 기본 결과는 NULL이 될 수 있고 별도 기본값을 지정할 수도 있습니다. 파티션을 지정하면 이전 값도 같은 파티션 안에서 찾습니다. 상품별 전월 매출인데 파티션이 없으면 다른 상품의 매출을 가져올 수 있습니다. 데이터에 월이 빠졌다면 이전 행과 이전 달은 같은 뜻이 아니라는 점도 주의하세요.

기억할 핵심

LAG는 정의한 정렬과 파티션 안에서 이전 행의 값을 참조한다.

문제 48

1월매출 100,3월매출 150만 있을 때 월 정렬 LAG(매출)로 3월의 이전 값은?

  1. ① 150
  2. ② 항상 오류
  3. ③ 100
  4. ④ 2월값이 자동 생성된 0
정답과 해설 보기

정답 ③

LAG는 이전 달을 생성하는 것이 아니라 정렬된 이전 행인 1월의 100을 참조합니다.

기억할 핵심

LAG는 정의한 정렬과 파티션 안에서 이전 행의 값을 참조한다.

문제 49

윈도우 함수·순위·Top N에서 Top N과 동률 정책에 대한 설명으로 옳은 것은?

  1. ① 상위 2등은 어떤 경우든 정확히 2행이다.
  2. ② WITH TIES는 동점을 무조건 삭제한다.
  3. ③ ROWNUM<=N 후 ORDER BY는 항상 전체 상위N이다.
  4. ④ 상위 N행과 상위 N등은 동점이 있을 때 결과 행 수가 달라질 수 있다.
정답과 해설 보기

정답 ④

정확히 N행을 원하면 ROW_NUMBER나 FETCH FIRST N ROWS 등으로 행 수를 제한하고 동률을 해소할 정렬키를 정합니다. 상위 N등을 원하면 RANK·DENSE_RANK의 정의와 동점 포함 정책을 비교합니다. Oracle ROWNUM은 정렬과 같은 단계에 섞어 쓰면 상위 급여를 뽑기 전에 행이 제한될 수 있습니다. 정렬한 인라인 뷰 바깥에서 제한하거나 지원되는 행 제한 문법을 사용합니다. SQL Server TOP의 WITH TIES도 기준 정렬 값에 따라 행 수가 늘어날 수 있습니다.

기억할 핵심

상위 N행과 상위 N등은 동점이 있을 때 결과 행 수가 달라질 수 있다.

문제 50

100,100,90에서 DENSE_RANK<=2로 상위 두 점수 등급을 고르면?

  1. ① 1행
  2. ② 0행
  3. ③ 3행
  4. ④ 2행
정답과 해설 보기

정답 ③

100은 1등급,90은 2등급이므로 세 행이 모두 포함됩니다.

기억할 핵심

상위 N행과 상위 N등은 동점이 있을 때 결과 행 수가 달라질 수 있다.

채점과 복습

틀린 문항은 선택지 표현보다 판단 기준을 다시 확인합니다. 이 모의고사는 앞 단원의 핵심 문항을 종합 복습하도록 구성했습니다. 정답을 기억했더라도 다른 선택지가 왜 틀렸는지 설명해 보세요.

범위 확인

2026년 학습 범위를 기준으로 구성했습니다. 시험 시행기관의 자격 안내·출제 기준에서 과목과 변경 공지를 확인할 수 있습니다.

이전 · 필기 종합 모의고사 1회

SQLD 전체 목차

과목별 이론

단원별 객관식

실습

필기 모의고사

예상 모의문제입니다.

스터디클럽의 다른 강의 보기