음식점 관리 시스템에서 고객(customer), 주문(order), 음… | [7급 국가직 데이터베이스론] 23년 1회차 기출문제 상세 페이지
1[7급 국가직 데이터베이스론] 23년 1회차
음식점 관리 시스템에서 고객(customer), 주문(order), 음식(food)을 관리하기 위해 릴레이션을 다음과 같이 설계하였다. 이 릴레이션에 대하여, SQL문에 대응하는 관계대수식으로 옳지 않은 것은? (단, 밑줄 친 속성은 기본 키이고, 관계대수 연산자 중에서 는 재명명(rename) 연산자이며, 은 집계함수(aggregate function) 연산을 정의하는 연산자이다)customer(name, gender, phone, address, year)
order(cname, fname, price, date)
food(name, price, stock)
1
SQL:
SELECT name
FROM food AS f
WHERE f.stock < 10 OR f.price > 20000;
관계대수:
2
SQL:
SELECT c.name, c.phone
FROM customer AS c, order AS o, food AS f
WHERE o.fname = f.name AND c.name = o.cname
AND f.price > 10000;
관계대수:
3
SQL:
SELECT name, SUM(price) AS orderPrice
FROM customer, order
WHERE name = cname
GROUP BY name;
관계대수:
4
SQL:
SELECT name, AVG(food.price) AS avgPrice
FROM food, order
GROUP BY name;
관계대수:
해설
옳지 않은 것은 가격이 10000을 넘는 음식을 주문한 고객의 이름·전화번호를 구하는 SQL에 대응시킨 관계대수식이다.
SQL의 WHERE 절에는 조인 조건 외에 f.price > 10000이 있는데, 관계대수식의 선택 조건에는 o.fname = f.name AND c.name = o.cname만 있어 가격 조건이 빠져 있다.
- 재고 10 미만 또는 가격 20000 초과인 음식 이름 질의는 재명명 후 OR 조건 선택과 name 추출로 정확히 대응한다.
- 고객별 주문 금액 합계 질의는 name = cname 조인 후 name으로 그룹화해 SUM(price)를 구하고 재명명하므로 대응한다.
- 조인 조건이 없는 FROM food, order는 카티션 곱이므로, 곱 결과를 name으로 그룹화해 AVG(food.price)를 구하는 식과 대응한다.
오류나 개정된 내용이 보이면 알려주세요