문제

 

-- 박지성이 구매한 도서의 출판사와 같은 출판사에서 도서를 구매한 고객의 이름
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

+ Recent posts