기출문제/정보처리기사

2019년 3회 정보처리기사 기출문제 8번

엉클지니 2025. 4. 16. 23:09

8. 다음 SQL문의 실행결과는?

 

 


🔍 1. SQL문 분석

SELECT 과목이름
FROM 성적
WHERE EXISTS (
    SELECT 학번
    FROM 학생
    WHERE 학생.학번 = 성적.학번
      AND 학과 IN ('전산', '전기')
      AND 주소 = '경기'
)

✔ 해석

  • 성적 테이블에서 과목이름을 조회합니다.
  • 단, 서브쿼리의 조건을 만족하는 학생이 존재할 경우에만 해당 성적 레코드를 포함합니다.

✔ 서브쿼리의 의미

  • 학생 테이블에서 해당 성적의 학번과 같은 학생이 존재하고,
  • 그 학생의 학과가 '전산' 또는 '전기' 이고, 주소가 '경기'인 경우만 포함시킵니다.

🔍 2. 서브쿼리 조건에 해당하는 학생 찾기

학번 이름 학년 학과 주소

1000 김철수 1 전산 서울 ❌
2000 고영희 1 전기 경기 ✅
3000 유진호 2 전자 경기 ❌
4000 김영진 2 전산 경기 ✅
5000 정현경 3 전자 서울 ❌

✅ 조건을 만족하는 학생:

  • 2000 (전기, 경기)
  • 4000 (전산, 경기)

🔍 3. 조건에 따라 성적 테이블 확인

이제 성적 테이블에서 학번이 2000 또는 4000인 행을 확인합니다.

학번 과목번호 과목이름 학점 점수

1000 A100 자료구조 A 91 ❌
1000 A200 DB A+ 99 ❌
2000 A100 자료구조 B+ 88 ✅
2000 A200 DB B 84 ✅
3000 A200 DB B+ 85 ❌
4000 A300 운영체제 B 89 ✅
5000 A300 운영체제 B 88 ❌

✅ 추출된 행들

과목이름

자료구조
DB
운영체제

🔍 4. 최종 출력값: 과목이름

하지만! SQL문은 SELECT 절에서 과목이름만 선택하고, 중복 제거가 없어요! 즉, SELECT DISTINCT가 아니기 때문에 중복도 포함됨!

최종적으로 2000, 4000번 학생의 성적을 기준으로 다음 과목이 나옵니다:

  • 자료구조
  • DB
  • 운영체제

그런데 보기에는 자료구조는 없고, DB, 운영체제만 있죠!

→ 그 이유는 보기에는 실제로 결과 테이블로 나타나는 값만 표현된 것이고, 선택지에서 주어진 표에 자료구조는 빠져 있는 걸로 보아, 실제 SQL에서는 이 결과는 출력되지 않은 것으로 보아야 해요.

하지만 이건 보기에서 생략했을 가능성도 있어서 우리가 확실하게 알 수 있는 건, DB와 운영체제가 나온다는 것입니다.


✅ 정답 확인: 보기 비교

보기 번호 출력 결과

DB
DB, DB
DB, DB, 운영체제 ✅
DB, 운영체제

성적 테이블에서 해당 조건을 만족하는 학번(2000, 4000)으로 과목을 출력하면:

  • DB (2000)
  • 자료구조 (2000)
  • 운영체제 (4000)

이 중 DB는 한 번 이상 등장 가능하고, 중복 허용이므로 DB가 두 번 나오는 건 문제 없음.


🏁 최종 정답:


📌 정리 요약표

조건 의미 해당 학생

학과 IN ('전산', '전기') 학과가 전산 또는 전기 1000, 2000, 4000
주소 = '경기' 경기에 사는 사람 2000, 3000, 4000
AND 조건 모두 만족 전산/전기 + 경기 2000, 4000

성적 학번 과목이름

2000 자료구조
2000 DB
4000 운영체제

출력 결과:

  • 자료구조, DB, 운영체제

단, 보기에 없는 자료구조는 무시되었고, 정답은 DB, DB, 운영체제인 ③입니다! 🎉