[학생] 테이블의 '학번' 필드에 중복된 값이 있어서 기본 키로 설정할… | [컴퓨터활용능력 1급 필기] 10년 2회차 기출문제 상세 페이지
1[컴퓨터활용능력 1급 필기] 10년 2회차
[학생] 테이블의 '학번' 필드에 중복된 값이 있어서 기본 키로 설정할 수 없다는 다음과 같은 메시지가 나타났다. 다음 중 학번이 중복된 학생의 정보를 찾는 방법으로 가장 적절한 것은?
1
select * from 학생 where 학번 in (select 학번 from 학생 group by count(*)> 1)
2
select * from 학생 where 학번 in (select 학번 from 학생 group by 학번 having count(*)> 1)
3
select * from 학생 group by 학번 having count(*)> 1
4
select * from 학생 having count(*)> 1 where 학번 in (select 학번 from 학생 group by 학번)
해설
중복된 학번을 가진 학생의 정보 전체를 찾으려면 두 단계가 필요하다. 먼저 학번별로 묶어서 건수가 2건 이상인 학번을 추려내고, 그 학번에 해당하는 행을 [학생] 테이블에서 다시 꺼내 오는 것이다.
이때 그룹으로 묶는 기준은 GROUP BY 학번 이고, 묶은 결과에 조건을 거는 절은 WHERE가 아니라 HAVING 이다. 따라서 하위 질의를 select 학번 from 학생 group by 학번 having count(*)>1 로 작성한 뒤, 바깥 질의에서 select * from 학생 where 학번 in (…) 으로 감싸는 형태가 맞다.
다른 방식이 안 되는 이유는 이렇다. group by 뒤에는 그룹 기준이 될 필드가 와야 하므로 group by count(*)>1 같은 표현은 성립하지 않는다. 또 group by 학번 having count(*)>1 만 쓰고 select * 를 하면 결과가 학번 단위로 요약되어 개별 학생의 나머지 필드 값을 그대로 볼 수 없다. 그리고 SQL의 절 순서는 SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY 이므로 having을 where보다 앞에 쓰면 구문 오류가 난다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.
