[2023. 중등임용 정보컴퓨터B] 관계대수 연산식과 SQL문

관계대수 연산식과 SQL문
관계대수 연산식과 SQL문2

정답

㉠은 Π, ㉡은 고객이며, ㉢은 NOT EXISTS이다. 또한 뷰 ORD_SUM에 대한 INSERT 문은 집계 함수와 GROUP BY가 포함된 뷰이므로 삽입이 불가능하여 오류가 발생한다.

출제 의도

이 문제는 관계대수 연산자의 의미와 적용 순서를 이해하고, SQL의 서브쿼리를 이용한 존재 여부 검사, 그리고 집계 뷰의 갱신 불가능성(updatability)에 대한 개념을 정확히 알고 있는지를 평가한다.

풀이 과정

(나)의 관계대수식은 “고객주소가 서울인 고객의 고객이름을 출력하시오”를 의미해야 한다. 먼저 고객 릴레이션에서 고객주소가 ‘서울’인 튜플을 선택해야 하므로 선택 연산자 \(\sigma_{\text{고객주소=’서울’}}\)가 사용된다.

그 결과에서 고객이름만 출력해야 하므로, 가장 바깥 연산자는 프로젝트 연산자 \(\Pi\)가 되어야 한다. 따라서 ㉠에는 \(\Pi\), ㉡에는 고객 릴레이션인 ‘고객’이 들어간다.

(다)의 SQL문은 “주문 이력이 없는 고객의 고객ID와 고객이름을 출력하시오”라는 의미가 되어야 한다. 이는 고객 테이블의 각 튜플에 대해 주문 테이블에 대응되는 튜플이 존재하지 않는 경우를 찾는 것이므로, 서브쿼리 앞에 NOT EXISTS를 사용해야 한다.

따라서 WHERE 절의 빈칸 ㉢에는 NOT EXISTS가 들어가며, 이는 주문 테이블에서 동일한 고객ID가 존재하지 않는 고객만 선택하게 한다.

(라)에서 생성한 ORD_SUM 뷰는 SUM(주문총액)이라는 집계 함수와 GROUP BY 절을 포함하고 있다. 이러한 뷰는 기본 테이블의 개별 튜플과 일대일 대응 관계가 없으므로 갱신 불가능한 뷰에 해당한다.

따라서 ORD_SUM에 대해 INSERT 문을 실행하면, 삽입된 값이 원래의 주문 테이블의 어떤 튜플로 변환되어야 하는지가 명확하지 않다. 이 때문에 해당 INSERT 문은 실행 시 오류가 발생한다.

<풀이가 부정확할 수 있으니 반드시 교차검증 확인 바랍니다.>