online book store 관련 스키마를 sql 질의문으로 검색해보는 문제입니다.. 0 4 1,526

by whitemind [2011.04.26 20:53:55]


* relational database schema

 

- Warehouse ( code, address, phone )

- Stocks ( ISBN(FK), code(FK), num )

- Book ( ISBN, title, year, price )

- Written_by ( name(FK), address(FK), ISBN(FK) )

- Author ( name, address, url )

- Publisher ( name, address, phone, url )

- Published_by ( name(FK), ISBN(FK) )

- Customer ( email, name, address, phone )

- Basket_of ( email(FK), basketid(FK) )

- Shopping_basket ( basketid )

- Contain ( basketid(FK), ISBN(FK), num )

  문제는 아래와 같습니다.

b) 'harry' 출판사에서 출판 된 책들 중 'shon changwon' 작가가 집필하고 가격이 2만원이 넘는
도서의 제목을 검색하시오.


c) 'Brown T.I' 작가가 작성한 도서 중 warehouse에 1000부 이상 재고가 있는 도서를 검색하시오


e) 'Crystal' 고객이 장바구니에 등록한 도서 중 warehouse에 재고가 없는 도서를 검색 하시오.


너무 어려워서 질문 남기고 갑니다. a번과 d번은 해결했는데 나머지는 도무지 어떤식으로

풀어야할지 모르겠네요...

by 이재현 [2011.04.26 21:03:43]
과제인가요~??

by whitemind [2011.04.26 22:19:29]
네 과제 맞습니다.

b번은
select title
from book natural join published_by
where price>=20000 and pname='Harry' and isbn IN
(select isbn FROM written_by where aname='shon changwon');

이런식으로 쿼리문을 만드니까 검색이 제대로 됐습니다. . .

by 知音 [2011.04.27 09:05:07]
b. select c.title
from written_by a
, published_by b
, book c
where a.name = 'harry'
and a.isbn = b.isbn
and b.name = 'shon changwon'
and a.isbn = c.icbn
and c.price >= 20000 ('넘는'의 개념이 이상이면 >= 20000, 초과면 > 20000)

c. select d.title, c.num
from written_by a
, book b
, wharhouse c
, stocks d
where a.name = 'Brown T.I'
and a.isbn = b.isbn
and a.isbn = c.isbn
and c.code = d.code
and c.num >= 1000

e. select
from customer a
, basket_of b
, contail c
, wharehouse d
, stocks e
where a.name = 'Crystal'
and a.email = b.email
and a.basketid = c.basketid
and c.isbn = e.isbn
and e.code = d.code
and d.num = 0


by 마농 [2011.04.27 10:34:59]
-- b)
SELECT c.title
FROM Published_by a
, Written_by b
, Book c
WHERE a.name = 'harry'
AND b.name = 'shon changwon'
AND c.price > 20000
AND a.isbn = b.isbn
AND a.isbn = c.isbn
;


-- c) 창고가 여러개 있다면 SUM 을 해야 할듯.
SELECT c.isbn, c.title
FROM Written_by a
, Stocks b
, book c
WHERE a.name = 'Brown T.I'
AND a.isbn = b.isbn
AND a.isbn = c.isbn
GROUP BY c.isbn, c.title
HAVING SUM(b.num) >= 1000
;


-- e) 재고 기록조차 없는 경우도 있을 수 있으므로 아우터 조인
SELECT d.isbn, d.title
FROM Customer a
, Basket_of b
, Contain c
, book d
, Stocks e
WHERE a.name = 'Crystal'
AND a.email = b.email
AND b.basketid = c.basketid
AND c.isbn = d.isbn
AND d.isbn = e.isbn(+)
GROUP BY d.isbn, d.title
HAVING NVL(SUM(e.num), 0) = 0
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입