모두CBT

[학생]테이블에서 '학번' 필드를 기본 키로 설정하려 하였더니 다음과 … | [컴퓨터활용능력 1급 필기] 10년 1회차 기출문제 상세 페이지

1[컴퓨터활용능력 1급 필기] 10년 1회차
[학생]테이블에서 '학번' 필드를 기본 키로 설정하려 하였더니 다음과 같은 내용의 오류 메세지가 나타났다. 중복된 학번을 찾는 질의로 가장 적절한 것은?

인덱스, 기본키 또는 관계에서 중복된 값을 만들었기 때문에 요청된 변경 사항이 적용되지 않았습니다. 필드의 데이터 또는 중복데이터가 있는 필드를 변경하거나 인덱스를 제거하거나 중복이 가능한 인덱스로 다시 정의하여 다시 시도하십시오

1
Select 학번 From 학생 Having Count(*)>1
2
Select 학번 From 학생 Group by 학번 Where Count(*)>1
3
Select 학번 From 학생 Where Count(*)> 1 Group by 학번
4
Select 학번 From 학생 Group by 학번 Having Count(*)>1
해설

오류 메시지는 학번 필드에 중복된 값이 들어 있어 기본 키로 지정할 수 없다는 뜻입니다. 기본 키는 값이 중복될 수 없고 Null도 허용하지 않으므로, 먼저 어떤 학번이 두 번 이상 나타나는지 찾아 정리해야 합니다.

같은 값이 몇 번 나오는지 세려면 GROUP BY 학번으로 학번별 그룹을 만든 뒤 각 그룹의 개수를 Count(*)로 구합니다. 그리고 개수가 1보다 큰 그룹, 즉 두 건 이상인 학번만 걸러내면 중복 학번 목록이 됩니다.

이때 조건절 선택이 핵심입니다. WHERE는 그룹으로 묶기 전 개별 레코드에 적용되므로 집계 함수를 쓸 수 없고, 집계 결과에 조건을 걸려면 반드시 HAVING을 사용해야 합니다. 또 HAVING은 GROUP BY와 짝을 이루어 그 뒤에 와야 하므로, 올바른 질의는 Select 학번 From 학생 Group by 학번 Having Count(*)>1 입니다.

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