공부법

컴활 데이터베이스 SQL 고난도 문제 5선 — 풀이와 해설

SQL 고난도 기출문제, 직접 풀어봅시다

컴활 필기 데이터베이스 과목에서 SQL 문법은 매회 5~7문제가 출제되는 핵심 영역입니다. 그중에서도 수험생들이 자주 틀리는 고난도 문제를 5개 엄선하여 상세 풀이를 준비했습니다.

먼저 직접 풀어보고, 아래 해설로 확인해보세요!

문제 1. LEFT JOIN 결과 분석

[2025년 상시05 / 50번]

거래처·매출 테이블을 LEFT JOIN 했을 때, 가장 옳지 않은 것은?

거래처 테이블: (1, 갑을상사), (2, 영광상회), (3, 갑자무역)
매출 테이블: (1, 거래처1, 5월1일), (2, 거래처2, 5월2일), (3, 거래처1, 5월3일), (4, NULL, 5월4일)

① 조회 결과의 필드 수는 5개이다.
② 조회 결과의 레코드 수는 3개이다.
③ 3번 거래처에 대한 정보는 나타나지 않는다.
④ 4번 매출에 대한 정보는 나타나지 않는다.

풀이

LEFT JOIN은 왼쪽 테이블(매출)의 모든 레코드를 포함합니다.

결과는 4개 레코드입니다. ②번 "3개"는 틀린 설명이므로 정답은 ②입니다.

핵심 포인트: LEFT JOIN은 왼쪽 테이블 레코드를 모두 유지합니다. 매칭 안 되는 행도 NULL로 포함됩니다.

문제 2. 서브쿼리와 IN 연산자

[2025년 상시04 / 50번]

'과목명'이 '영작문'인 과목의 '교수명'을 출력하는 SQL문으로 옳은 것은?

교수 테이블: (111, 홍선길), (222, 엄종일), (333, 배미경)
과목 테이블: (AAA, 영작문, 111), (BBB, 영작문, 222), (CCC, 영문학, 333)

① Select 교수명 From 교수, 과목 Where 교수번호 = (Select 교수번호 From 과목 Where 과목명 = "영작문");
② Select 교수명 From 교수 Where 교수번호 In (Select 교수번호 From 과목 Where 과목명 = "영작문");
③ Select 교수명 From 과목, 교수 Where 교수번호 = (Select 교수번호 From 과목 Where 과목명 = "영작문");
④ Select 교수명 From 과목 Where 교수번호 In (Select 교수번호 From 교수 Where 과목명 = "영작문");

풀이

영작문 과목이 2개(AAA, BBB)이므로 서브쿼리가 교수번호 111, 222를 두 행 반환합니다.

정답은 ②

핵심 포인트: 서브쿼리가 여러 행을 반환할 수 있으면 = 대신 반드시 IN을 사용해야 합니다.

문제 3. LIKE 와일드카드 조합

[2026년 상시01 / 49번]

<회원> 테이블에서 주소가 서울시, 합정동이면서 이름이 "이"로 시작하는 회원의 이름과 주소를 조회하는 SQL문으로 옳은 것은?
(주소 필드: 시/도, 시/군/구, 읍/면/동 형태)

① ... where 주소 = "서울", "합정동" and 이름 like "이*";
② ... where 주소 like "서울*" or "*합정동" and 이름 like "이*";
③ ... where 주소 like "서울" and "합정동" and 이름 like "이*";
④ ... where 주소 like "서울*" and "*합정동*" and 이름 like "이*";

풀이

주소 형태가 "서울시 ○○구 합정동"이므로:

정답은 ④

핵심 포인트: Access SQL에서 와일드카드는 *를 사용합니다 (표준 SQL은 %). *의 위치에 따라 "시작", "포함", "끝" 검색이 결정됩니다.

문제 4. IN vs BETWEEN 차이

[2025년 상시05 / 49번]

매출 테이블에서 판매량이 100에서 200 사이인 제품을 검색하는 질의문으로 가장 옳지 않은 것은?

① SELECT ... WHERE 판매량 IN (100, 200);
② SELECT ... WHERE 판매량 >= 100 AND 판매량 <= 200;
③ SELECT ... WHERE NOT(판매량 < 100 OR 판매량 > 200);
④ SELECT ... WHERE 판매량 BETWEEN 100 AND 200;

풀이

보기동작결과
IN(100, 200) → 정확히 100 또는 200만범위 검색 아님!
>= 100 AND <= 200 → 100~200 전체정상
드모르간 법칙 → 동일 범위정상
BETWEEN 100 AND 200 → 100~200 전체정상

정답은 ①

핵심 포인트: IN목록 매칭(OR 조건), BETWEEN범위 검색입니다. "100에서 200 사이"에는 BETWEEN이나 부등호를 써야 합니다.

문제 5. ORDER BY + WHERE 절 순서

[2024년 상시04 / 47번]

직원 테이블에서 근무년수가 3 이상인 직원들을 나이 내림차순, 같은 나이면 급여 오름차순으로 모든 필드를 표시하는 SQL문은?

① select * from 직원 where 근무년수 >= 3 order by 나이, 급여;
② select * from 직원 order by 나이, 급여 where 근무년수 >= 3;
③ select * from 직원 order by 나이 desc, 급여 asc where 근무년수 >= 3;
④ select * from 직원 where 근무년수 >= 3 order by 나이 desc, 급여 asc;

풀이

SQL 절의 올바른 순서: SELECT → FROM → WHERE → ORDER BY

정답은 ④

핵심 포인트: SQL 절 순서를 반드시 기억하세요. WHERE가 ORDER BY보다 항상 먼저 옵니다. 정렬 방향을 명시하지 않으면 기본값은 ASC(오름차순)입니다.

정리: SQL 고난도 문제 공략 키워드

주제핵심 키워드
JOINLEFT JOIN = 왼쪽 테이블 전체 유지, 매칭 안 되면 NULL
서브쿼리복수 행 반환 시 = 대신 IN 사용
LIKEAccess는 *, 표준 SQL은 %. 위치로 시작/포함/끝 결정
IN vs BETWEENIN = 목록 매칭, BETWEEN = 범위 검색
절 순서SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY

패스뱅크 무한문제에서 데이터베이스 과목을 선택하면 이런 유형의 문제를 무한 반복으로 연습할 수 있습니다. 틀린 문제는 오답노트에 자동 저장되니, 약점을 집중 공략해보세요!

← 목록으로 돌아가기