하위질의가 이해가 잘 됩니다.
문제 2번에서 답이
SELECT DISINCT name
FROM Shop
WHERE id IN(SELECT shopid
FROM Staff
WHERE id=10);
인데요.
여기서 저는 '상점의 이름을 검색'이라서 상위 SELECT문에 Shop을,
'작원 id가 10인 직원이 담당하는'이라서 하위 SELECT문에 Staff을 FROM에 넣는 것이라고 이해했고,
상위 테이블인 Shop에 1로 연결된 부분이 id이고,
하위 테이블인 Staff에 N으로 연결된 부분이 shopid라서 상위 WHERE에 저렇게 작성하는구나 라고 이해했습니다.
그런데 문제 3번 답을 보면
SELECT SUM(psale)
FROM Sale
WHERE pid IN(SELECT id
FROM Product
WHERE name LIKE 'USD%');
라고 작성됩니다.
'상품의 판매량 합계 검색'이라서 상위 SELECT문에 Sale을,
'상품명이 "USB"로 시작하는'이라서 하위 SELECT문에 Product를 FROM에 넣었습니다.
그리고, 상위 테이블인 Sale에 1로 연결된 부분이 id이고,
하위 테이블인 Staff에 N으로 연결된 부분이 pid라서 상위 WHERE에
WHERE id IN(SELECT pid ~)로 작성했는데 답에서는 반대로 작성되었네요.
이 부분이 궁금합니다. 그리고 제가 이해한 부분 중 틀린 부분이 있다면 말씀해주세요.
감사합니다.
안녕하세요 길벗수험서 운영팀입니다.
먼저.. 2번과 3번은 거의 동일한 문제입니다.
적으신 문의를 보면서 의식의 흐름대로 읽어보았으나 갑자기 동일하게 n:1인데 where 조건을 다르게 적으신것 보고 이해가 가지 않았습니다.
먼저 가장 기본적인 것부터 보겠습니다.
상위 질의를 보시죠.
select sum(psale) from sale where pid;
문제에서 요구하는 출력은 상품 판매량(psale)의 합계입니다. sum(psale)을 적어줘야겠죠.
해당 필드가 있는 곳은 sale테이블이니 from sale을 적어주고,
상품명이 usb인 것을 뽑아야 하는데, 해당 관련 필드는 product테이블과 n:1로 연결되어 있는 pid입니다. where pid로 이어져야 합니다.
왜 pid일까요. 제품명을 알기 위해서는 pid를 product에서 id로 조회하여 name이 'usb'인 것을 찾기 위함입니다.
말씀하신대로, where id를 적으면 어떻게 될까요.
상위 질의에서 where id를 적는다는 것은 <product> 테이블의 id를 말하는 것이 아닌 <sale> 테이블의 id를 말하는 것이기 때문에, 아래와 같이 해석됩니다.
"<sale>테이블의 id를 <product>테이블의 pid에서 조회하여..."
말이 되지 않는 문구가 됩니다. sale 테이블에는 id가 존재하지만, product 테이블에는 pid가 존재하지 않으니까요.
행복한 하루되세요 :)
-
관리자2019-04-02 10:39:59
안녕하세요 길벗수험서 운영팀입니다.
먼저.. 2번과 3번은 거의 동일한 문제입니다.
적으신 문의를 보면서 의식의 흐름대로 읽어보았으나 갑자기 동일하게 n:1인데 where 조건을 다르게 적으신것 보고 이해가 가지 않았습니다.
먼저 가장 기본적인 것부터 보겠습니다.
상위 질의를 보시죠.
select sum(psale) from sale where pid;
문제에서 요구하는 출력은 상품 판매량(psale)의 합계입니다. sum(psale)을 적어줘야겠죠.
해당 필드가 있는 곳은 sale테이블이니 from sale을 적어주고,
상품명이 usb인 것을 뽑아야 하는데, 해당 관련 필드는 product테이블과 n:1로 연결되어 있는 pid입니다. where pid로 이어져야 합니다.
왜 pid일까요. 제품명을 알기 위해서는 pid를 product에서 id로 조회하여 name이 'usb'인 것을 찾기 위함입니다.
말씀하신대로, where id를 적으면 어떻게 될까요.
상위 질의에서 where id를 적는다는 것은 <product> 테이블의 id를 말하는 것이 아닌 <sale> 테이블의 id를 말하는 것이기 때문에, 아래와 같이 해석됩니다.
"<sale>테이블의 id를 <product>테이블의 pid에서 조회하여..."
말이 되지 않는 문구가 됩니다. sale 테이블에는 id가 존재하지만, product 테이블에는 pid가 존재하지 않으니까요.
행복한 하루되세요 :)