컴활 데이터베이스 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은 왼쪽 테이블(매출)의 모든 레코드를 포함합니다.
- 매출 1번(거래처1) → 매칭O
- 매출 2번(거래처2) → 매칭O
- 매출 3번(거래처1) → 매칭O
- 매출 4번(NULL) → 매칭X, 거래처 정보는 NULL로 표시
결과는 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연산자는 복수 값 비교 가능- ②번: 교수 테이블 FROM + IN 서브쿼리 → 정상 작동
정답은 ②
핵심 포인트: 서브쿼리가 여러 행을 반환할 수 있으면=대신 반드시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 "이*";
풀이
주소 형태가 "서울시 ○○구 합정동"이므로:
LIKE "서울*"→ 서울로 시작하는 모든 값LIKE "*합정동*"→ 합정동을 포함하는 모든 값LIKE "이*"→ 이로 시작하는 이름- 세 조건을 AND로 연결해야 모두 만족
정답은 ④
핵심 포인트: 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
- ②③: ORDER BY가 WHERE보다 앞 → 문법 오류
- ①: ORDER BY 나이, 급여 → 둘 다 기본값 ASC → 나이가 오름차순이라 조건 불일치
- ④: WHERE 먼저 + ORDER BY 나이 DESC, 급여 ASC → 조건 완벽 일치
정답은 ④
핵심 포인트: SQL 절 순서를 반드시 기억하세요. WHERE가 ORDER BY보다 항상 먼저 옵니다. 정렬 방향을 명시하지 않으면 기본값은 ASC(오름차순)입니다.
정리: SQL 고난도 문제 공략 키워드
| 주제 | 핵심 키워드 |
|---|---|
| JOIN | LEFT JOIN = 왼쪽 테이블 전체 유지, 매칭 안 되면 NULL |
| 서브쿼리 | 복수 행 반환 시 = 대신 IN 사용 |
| LIKE | Access는 *, 표준 SQL은 %. 위치로 시작/포함/끝 결정 |
| IN vs BETWEEN | IN = 목록 매칭, BETWEEN = 범위 검색 |
| 절 순서 | SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY |
패스뱅크 무한문제에서 데이터베이스 과목을 선택하면 이런 유형의 문제를 무한 반복으로 연습할 수 있습니다. 틀린 문제는 오답노트에 자동 저장되니, 약점을 집중 공략해보세요!