모두CBT

학생(학번, 이름, 학과, 학년) 테이블과 성적(학번, 과목명, 점수)… | [컴퓨터활용능력 1급 필기] 10년 2회차 기출문제 상세 페이지

1[컴퓨터활용능력 1급 필기] 10년 2회차
학생(학번, 이름, 학과, 학년) 테이블과 성적(학번, 과목명, 점수) 테이블에 대한 다음의 질의를 SQL 문장으로 바르게 나타낸 것은?
'DB' 과목을 수강한 학생의 이름과 점수를 검색하시오.
1
SELECT 이름, 점수 FROM 학생, 성적 WHERE 과목명 IN('DB')
2
SELECT 이름, 점수 FROM 학생, 성적 WHERE 학생.학번= 성적.학번 or 과목명 = 'DB'
3
SELECT 이름, 점수 FROM 학생 INNER JOIN 성적 ON 학생.학번 = 성적.학번 WHERE 과목명 in ('DB')
4
SELECT 이름, 점수 FROM 학생 WHERE 학번 IN (SELECT 학번 FROM 성적 WHERE 과목명 = 'DB')
해설

질의는 'DB' 과목을 수강한 학생의 이름과 점수를 구하는 것이다. 이름은 학생 테이블에, 점수와 과목명은 성적 테이블에 있으므로 두 테이블을 학번으로 연결(조인)한 뒤 과목명이 'DB'인 행만 걸러야 한다.

따라서 학생 INNER JOIN 성적 ON 학생.학번 = 성적.학번 으로 학번이 같은 행끼리 짝지은 다음 WHERE 과목명 IN ('DB') 조건을 적용한 문장이 옳다. IN 은 괄호 안 목록 중 하나와 같은지 비교하는 연산자로, 값이 하나뿐이면 과목명 = 'DB' 와 같은 뜻이다.

조인 조건 없이 두 테이블 이름만 나열하면 모든 행이 서로 곱해지는 교차 조인이 되어 다른 학생의 점수까지 섞여 나오고, 학번이 같다는 조건과 과목명 조건을 OR 로 묶으면 둘 중 하나만 만족해도 뽑히므로 엉뚱한 행이 포함된다. 또 하위 질의로 학번만 걸러 낸 뒤 학생 테이블만 조회하면 점수가 학생 테이블에 없어 결과에 표시할 수 없다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.