Database/MySQL

[연습문제] JOIN

olli2 2021. 11. 27. 01:09
-- 연습문제

-- 1. 모든 도서에 대하여 도서의 도서번호, 도서명, 출판사명 출력
SELECT B.bookNo, B.bookName, b.bookauthor, P.pubName
FROM book B 
	INNER JOIN publisher P ON  B.pubNo = P.pubNo ;


-- 2. '서울 출판사'에서 출간한 도서의 도서명, 저자명, 출판사명 출력 
-- (조건에 출판사명 사용)
SELECT B.bookName, B.bookAuthor, P.pubName
FROM book B
	INNER JOIN publisher P ON  B.pubNo = P.pubNo
WHERE P.pubName = '서울 출판사';


-- 3. '종로출판사'에서 출간한 도서 중 판매된 도서의 도서명 출력
-- 중복된 경우 한 번만 출력 (조건에 출판사명 사용)
SELECT DISTINCT B.bookName, P.pubName
FROM book B
	INNER JOIN publisher P ON  B.pubNo = P.pubNo
	INNER JOIN bookSale BS ON  B.bookNo = BS.bookNo
WHERE  P.pubName = '종로출판사';


-- 4. 도서가격이 30,000원 이상인 도서를 주문한 고객의 
-- 고객명, 도서명, 도서가격, 주문수량 출력
SELECT C.clientName,  B.bookName, B.bookPrice, BS.bsQty
FROM bookSale BS 
	INNER JOIN client C ON C.clientNo = BS.clientNo
	INNER JOIN book B ON B.bookNo = BS.bookNo
WHERE B.bookPrice >= 30000;		


-- 5. '안드로이드 프로그래밍' 도서를 구매한 고객에 대하여
-- 도서명, 고객명, 성별, 주소 출력 (고객명으로 오름차순 정렬)
SELECT b.bookName, c.clientName, c.clientGender, c.clientAddress
FROM bookSale BS 
	INNER JOIN client C ON C.clientNo = BS.clientNo
	INNER JOIN book B ON B.bookNo = BS.bookNo
WHERE bookName = '안드로이드 프로그래밍'
ORDER BY clientName;


SELECT * FROM bookSale;
SELECT * FROM client;
SELECT * FROM book;

-- 6. '도서출판 강남'에서 출간된 도서 중 판매된 도서에 대하여
-- '총 매출액' 출력
SELECT SUM(B.bookPrice * BS.bsQty) AS "총 매출액"
FROM book B
	INNER JOIN bookSale BS ON B.bookNo = BS.bookNo        
	INNER JOIN publisher P ON B.pubNo = P.pubNo
WHERE P.pubName = '도서출판 강남';     

-- 집계 함수 앞에 열을 출력할 경우
SELECT P.pubName, SUM(B.bookPrice * BS.bsQty) AS "총 매출액"
FROM book B
	INNER JOIN bookSale BS ON B.bookNo = BS.bookNo        
	INNER JOIN publisher P ON B.pubNo = P.pubNo
WHERE P.pubName = '도서출판 강남'
GROUP BY P.pubNo;

-- 각 매출 건수 출력
SELECT P.pubName, B.bookPrice * BS.bsQty AS "매출액"
FROM book B
	INNER JOIN bookSale BS ON B.bookNo = BS.bookNo        
	INNER JOIN publisher P ON B.pubNo = P.pubNo
WHERE P.pubName = '도서출판 강남';        



-- 7. '서울 출판사'에서 출간된 도서에 대하여
-- 판매일, 출판사명, 도서명, 도서가격, 주문수량, 주문액 출력
SELECT BS.bsDate, P.pubName, B.bookName, B.bookPrice, 
		   BS.bsQty, B.bookPrice * BS.bsQty AS "판매액"
FROM book B
	INNER JOIN bookSale BS ON B.bookNo = BS.bookNo        
	INNER JOIN publisher P ON B.pubNo = P.pubNo
WHERE P.pubName = '서울 출판사';


-- 8. 판매된 도서에 대하여 
-- 도서별로 도서번호, 도서명, '총 주문 수량' 출력
SELECT B.bookNo, B.bookName, SUM(BS.bsQty) AS "총 주문 수량"
FROM book B
	INNER JOIN bookSale BS ON B.bookNo = BS.bookNo       		
GROUP BY B.bookNo;

SELECT * FROM bookSale;


-- 9. 판매된 도서에 대하여 
-- 고객별로 고객명, 총구매액 출력
-- 총구매액이 100,000원 이상인 경우만 해당   
SELECT C.clientName, SUM(B.bookPrice * BS.bsQty) AS "총구매액"
FROM bookSale BS 
	INNER JOIN client C ON C.clientNo = BS.clientNo
	INNER JOIN book B ON B.bookNo = BS.bookNo
GROUP BY C.clientNo
HAVING SUM(B.bookPrice * BS.bsQty) >= 100000;

-- HAVING 조건 없는 경우 고객별 총구매 내역 
SELECT C.clientName, SUM(B.bookPrice * BS.bsQty) AS "총구매액"
FROM bookSale BS 
	INNER JOIN client C ON C.clientNo = BS.clientNo
	INNER JOIN book B ON B.bookNo = BS.bookNo
GROUP BY C.clientNo;

SELECT * FROM bookSale;

-- 10. 판매된 도서 중 '도서출판 강남'에서 출간한 도서에 대하여
-- 고객명, 주문일, 도서명, 주문수량, 출판사명 출력
-- 고객명으로 오름차순 정렬
-- 4개 테이블 : 외래키 제약조건 3개
SELECT C.clientName, BS.bsDate, B.bookName, BS.bsQty, P.pubName    
FROM bookSale BS 
	INNER JOIN client C ON C.clientNo = BS.clientNo
	INNER JOIN book B  ON B.bookNo = BS.bookNo       
	INNER JOIN publisher P ON B.pubNo = P.pubNo
WHERE P.pubName = '도서출판 강남'
ORDER BY C.clientName;