문제
-- 박지성이 구매한 도서의 출판사와 같은 출판사에서 도서를 구매한 고객의 이름
SELECT DISTINCT C.NAME
FROM customer C, ORDERS O, BOOK B
WHERE c.custid = o.custid
AND o.bookid = b.bookid
AND b.publisher IN (
SELECT b.publisher
FROM customer C, ORDERS O, BOOK B
WHERE c.custid = o.custid AND o.bookid = b.bookid AND C.NAME = '박지성')
AND C.NAME NOT LIKE '박지성';
-- 두 개 이상의 서로 다른 출판사에서 도서를 구매한 고객의 이름
SELECT C.NAME, COUNT(DISTINCT b.publisher)
FROM customer C, ORDERS O, BOOK B
WHERE c.custid = o.custid AND o.bookid = b.bookid
GROUP BY C.NAME
HAVING COUNT(DISTINCT b.publisher) >= 2;
-- 두 개 이상의 서로 다른 출판사에서 도서를 구매한 고객의 이름 - 상관쿼리
-- GROUP BY 를 사용한 쿼리는 상관쿼리로 바꿀 수 있다
SELECT C1.NAME
FROM customer C1 -- 하위쿼리에 C.NAME LIKE C1.NAME 이렇게 연결하면 GROUP BY를 안쓰고도 그룹함수를 쓸 수 있다.
WHERE 2 <= (SELECT COUNT(DISTINCT B.PUBLISHER)
FROM customer C, ORDERS O, BOOK B
WHERE c.custid = o.custid AND o.bookid = b.bookid AND C.NAME = C1.NAME);
-- 전체 고객의 30% 이상이 구매한 도서
SELECT b.bookname, COUNT(b.bookname)
FROM ORDERS O, BOOK B
WHERE o.bookid = b.bookid
GROUP BY b.bookname
HAVING COUNT(b.bookname) >= (
SELECT (COUNT(*) * 0.3)
FROM customer
);
-- 전체 고객의 30% 이상이 구매한 도서 - 상관쿼리
SELECT B1.BOOKNAME
FROM BOOK B1
WHERE (SELECT COUNT(b.bookname)
FROM ORDERS O, BOOK B
WHERE o.bookid = b.bookid AND B.BOOKID = B1.BOOKID) >= ( SELECT (COUNT(*) * 0.3) FROM customer);
--새로운 도서 ('스포츠 세계', '대한미디어', 10000원)이 마당서점에 입고되었다. 삽입이 안될 경우 필요한 데이터가 더 있는지 찾아보자
-- PRIMARY KEY 가 필요함 31로 임의 삽입
INSERT INTO book(BOOKID, BOOKNAME, PUBLISHER, PRICE)
VALUES(31, '스포츠 세계', '대한미디어', 10000);
-- '삼성당'에서 출판한 도서를 삭제해야 한다
DELETE FROM BOOK
WHERE publisher = '삼성당';
-- '이상미디어'에서 출판한 도서를 삭제해야 한다. 삭제가 안 될 경우 원인을 생각해보자
DELETE FROM BOOK
WHERE publisher LIKE '이상미디어'; -- 자식 레코드가 있어서 삭제불가
--출판사 '대한미디어'가 '대한출판사'로 이름을 바꾸었다.
UPDATE book
SET publisher = '대한출판사' -- 값을 넣는것이기 때문에 LIKE쓰면 안된다
WHERE publisher LIKE '대한미디어'; -- 비교하는 것이기 때문에 LIKE써도 된다
'Programming Language > Java' 카테고리의 다른 글
자바 String, StringBuilder, StringBuffer (0) | 2020.04.17 |
---|---|
자바 GUI (0) | 2020.04.17 |
자바 채팅 프로그램2 (0) | 2020.04.14 |
자바 finally (0) | 2020.04.14 |
자바 채팅 프로그램 (0) | 2020.04.14 |