#서브쿼리

김유미·2021년 12월 15일
0

2021년 12월 15일 💦비

프롤로그

저한테는 이제 눈으로만 이해되는 식들이 나오기 시작했습니다. 서브쿼리는 우선 이해위주로 하라고 하셔서 이해력을 높이고자 오늘은 문제를 다시 풀어보며 서브쿼리에 대해 정리해보도록 하겠습니다.

서브쿼리 동작 순서
SELECT
FROM - 1
WHERE -2 SELECT - 2-1
FROM - 2-2

<문제>

1. 나무수 출판사의 책 금액보다 큰 구매금액을 가진 책이름 조회
(단, 나무수 출판사 책 금액 중 가장 큰 금액으로 조회)

SELECT bookname
FROM book
WHERE price > (SELECT MAX(price)
FROM book
WHERE publisher = '나무수');

<키트리서점 서브쿼리 예제>

1. 할인을 가장 크게 받은 고객의 이름 조회

SELECT c.name
FROM book b, orders o, customer c
WHERE b.bookid = o.bookid
AND o.custid = c.custid
GROUP BY c.name
HAVING SUM(b.price - o.saleprice) = (SELECT MAX(SUM(b.price - o.saleprice))
FROM book b1, orders o1
WHERE b1.bookid = o1.bookid
GROUP BY custid);

2. 도서의 주문 금액 중 총 주문금액(saleprice) 평균 이하인 도서의 책이름, 출판사 조회

SELECT b.bookname, b.publisher
FROM orders o, book b
WHERE o.bookid = b.bookid
AND o.saleprice <= (SELECT AVG(o.saleprice)
FROM orders); **

3. 책이름이 가장 긴 책의 책번호, 책이름, 출판사 조회

SELECT bookid, bookname, publisher
FROM book
WHERE LENGTH(bookname) = (SELECT MAX(LENGHTH(bookname))
FROM book);

4. 주문날짜별로 주문금액의 평균보다 큰 책번호, 책이름, 출판사, 책가격 조회

SELECT b.bookid, b.bookname, b.publisher, b.price
FROM orders o1, book b
WHERE o1.bookid = b.bookid
AND saleprice > (SELECT AVG(saleprice)
FROM orders o2
WHERE o2. orderdate = o1.orderdate);

5. 키트리서점 책 중 가장 인기있는 책이름 출력 (주문이 많은 책)

SELECT b.bookname, COUNT()
FROM orders o, book b
WHERE o.bookid = b.bookid
GROUP BY b.bookname
HAVING COUNT(
) = (SELECT MAX(COUNT(*))
FROM orders o
GROUP BY bookid);

6. 대한민국에 사는 사람이 가장 많이 구매한 책의 이름, 출판사 조회

SELECT a.bookname, a.publisher
FROM (SELECT MAX(b.bookid), MAX(b.bookname) bookname, MAX(b.publisher) publisher, MAX(b.price) price
FROM customer c, orders o, book b
WHERE c. custid = o.custid
AND o.bookid = b.bookid
AND c.address LIKE '%대한민국%'
GROUP BY bookname) a
WHERE order_cnt = (SELECT MAX(COUNT(*))
FROM customer c1, orders o1, book b1
WHERE b1.bookid = o1.bookid
AND c1.custid = o1.custid
AND c1.address LIKE '%대한민국%'
GROUP BY b1.bookid);

0개의 댓글

관련 채용 정보