2025_최신기출문제_2023년상시03
-4. 미출간내역조회 쿼리 0/7
-쿼리 비교 X [미출간내역조회] 쿼리 (SELECT 출판사.출판사명, 출판사.대표자명, 출판사.전화번호, 출판사.홈페이지주소 INTO 미출간출판사현황 FROM 출판사 LEFT JOIN 도서 ON 출판사.출판사번호 = 도서.출판사번호 WHERE (((출판사.출판사번호) Not In (SELECT 도서.출판사번호 FROM 도서))); )이 정답(SELECT 출판사.출판사명, 출판사.대표자명, 출판사.전화번호, 출판사.홈페이지주소 INTO 미출간출판사현황 FROM 출판사 WHERE (((출판사.출판사번호) Not In (select 출판사번호 from 도서))); )과 다릅니다.
만약 <출판사> 테이블과 <도서> 테이블 간 조인 속성을 아래와 같이 왼쪽 조인으로 변경하고, 다음과 같이 풀이하면 틀린가요?
쿼리 결과는 정답과 동일하게 나오지만, 문제에서 <도서> 테이블을 이용하라는 지시가 없었으므로, <도서> 테이블을 화면에 표시되지 않게끔 해야하나요?


안녕하세요.
네. 이 경우에는 결과가 같더라도 현재 작성한 쿼리는 정답 구조와 다르므로 채점에서는 오답 처리될 수 있습니다.
질문자 쿼리는 바깥쪽 FROM 절에 <출판사>와 <도서>를 둘 다 두고 LEFT JOIN을 사용했습니다.
FROM 출판사
LEFT JOIN 도서
ON 출판사.출판사번호 = 도서.출판사번호그런데 동시에 WHERE 절에서 다시
출판사.출판사번호 Not In
(
SELECT 도서.출판사번호
FROM 도서
)조건을 사용하고 있습니다.
이 문제에서 <도서> 테이블은 하위 쿼리 안에서만 사용하면 충분합니다. 즉 바깥쪽 쿼리에서는 <출판사>만 대상으로 하고, “도서가 없는 출판사”인지 판단할 때만 하위 쿼리에서 <도서>를 참조하는 구조가 정답입니다.
정답 구조는 다음과 같습니다.
SELECT 출판사.출판사명,
출판사.대표자명,
출판사.전화번호,
출판사.홈페이지주소
INTO 미출간출판사현황
FROM 출판사
WHERE 출판사.출판사번호
Not In
(
SELECT 출판사번호
FROM 도서
);따라서 질문하신 것처럼 디자인 화면의 위쪽 테이블 영역에는 <출판사>만 두는 것이 맞습니다. <도서>는 화면에 추가하지 않고, 조건란의 하위 쿼리 안에서만 사용하면 됩니다.
현재처럼 LEFT JOIN까지 추가해도 데이터에 따라 결과는 우연히 같을 수 있습니다. 하지만 불필요한 조인이 들어가서 SQL 구조가 달라지고, 경우에 따라서는 중복 레코드나 Null 처리 때문에 결과가 달라질 수도 있습니다.
즉 이번 문제는 이렇게 이해하시면 됩니다.
바깥 쿼리
→ 출판사 테이블만 사용
→ 실제로 추가할 레코드의 원본
하위 쿼리
→ 도서 테이블 사용
→ 도서가 있는 출판사번호 목록을 찾음
Not In
→ 그 목록에 없는 출판사만 선택따라서 “문제에서 도서 테이블을 이용하라는 지시가 없어서 화면에 표시하지 않아야 한다”기보다는, Not In + 하위 쿼리라는 문제의 구조상 도서는 하위 쿼리 안에서만 사용하는 것이 맞다고 이해하시면 정확합니다.
즐거운 하루 되세요.
-
관리자2026-09-08 10:56:18
안녕하세요.
네. 이 경우에는 결과가 같더라도 현재 작성한 쿼리는 정답 구조와 다르므로 채점에서는 오답 처리될 수 있습니다.
질문자 쿼리는 바깥쪽
FROM절에<출판사>와<도서>를 둘 다 두고LEFT JOIN을 사용했습니다.FROM 출판사 LEFT JOIN 도서 ON 출판사.출판사번호 = 도서.출판사번호그런데 동시에 WHERE 절에서 다시
출판사.출판사번호 Not In ( SELECT 도서.출판사번호 FROM 도서 )조건을 사용하고 있습니다.
이 문제에서
<도서>테이블은 하위 쿼리 안에서만 사용하면 충분합니다. 즉 바깥쪽 쿼리에서는<출판사>만 대상으로 하고, “도서가 없는 출판사”인지 판단할 때만 하위 쿼리에서<도서>를 참조하는 구조가 정답입니다.정답 구조는 다음과 같습니다.
SELECT 출판사.출판사명, 출판사.대표자명, 출판사.전화번호, 출판사.홈페이지주소 INTO 미출간출판사현황 FROM 출판사 WHERE 출판사.출판사번호 Not In ( SELECT 출판사번호 FROM 도서 );따라서 질문하신 것처럼 디자인 화면의 위쪽 테이블 영역에는
<출판사>만 두는 것이 맞습니다.<도서>는 화면에 추가하지 않고, 조건란의 하위 쿼리 안에서만 사용하면 됩니다.현재처럼
LEFT JOIN까지 추가해도 데이터에 따라 결과는 우연히 같을 수 있습니다. 하지만 불필요한 조인이 들어가서 SQL 구조가 달라지고, 경우에 따라서는 중복 레코드나 Null 처리 때문에 결과가 달라질 수도 있습니다.즉 이번 문제는 이렇게 이해하시면 됩니다.
바깥 쿼리 → 출판사 테이블만 사용 → 실제로 추가할 레코드의 원본 하위 쿼리 → 도서 테이블 사용 → 도서가 있는 출판사번호 목록을 찾음 Not In → 그 목록에 없는 출판사만 선택따라서 “문제에서 도서 테이블을 이용하라는 지시가 없어서 화면에 표시하지 않아야 한다”기보다는,
Not In + 하위 쿼리라는 문제의 구조상 도서는 하위 쿼리 안에서만 사용하는 것이 맞다고 이해하시면 정확합니다.즐거운 하루 되세요.