Q1. 도서번호가 1인 도서의 이름을 검색하시오.
SELECT bookname
FROM book
WHERE bookid = 1;

Q2. 가격이 20,000원 이상인 도서의 이름을 검색하시오.
SELECT bookname
FROM book
WHERE price >= 20000;

Q3. 고객 '박지성'의 총 구매액을 구하시오.
SELECT SUM(saleprice)
FROM orders AS O
JOIN customer AS C
ON O.custid = C.custid
WHERE name = '박지성';

SELECT SUM(price)를 사용했는데 price라는 속성이 없다고 떠서 조인 사용하면`O.price`로 어떤 테이블의 속성인지 지정해줘야하나 싶어 수정.
O.price가 없다는 에러가 떠서 다시 생각해보니 속성명 자체가 price가 아니라 saleprice여서 수정 (O.saleprice로 안적고 속성명만 적어도 되지만 O.saleprice로 적어도 잘 동작한다.)
Q4. 고객 '박지성'이 구매한 도서의 수를 구하시오.
SELECT COUNT(*)
FROM orders AS O
JOIN customer AS C
ON O.custid = C.custid
WHERE name = '박지성';

Q5. 5. 고객 '박지성'이 구매한 도서의 출판사 수를 구하시오. (서브쿼리를 활용할 것)
SELECT COUNT(DISTINCT publisher) AS '구매 도서 출판사 수'
FROM orders AS O
JOIN book AS B
ON O.bookid = B.bookid
WHERE custid IN (
SELECT custid
FROM customer
WHERE name = '박지성'
);

조인 안쓰고? 아래처럼도 풀 수 있을 것 같다.
SELECT COUNT(DISTINCT publisher)
FROM book
WHERE bookid IN (
SELECT bookid
FROM orders
WHERE custid IN (
SELECT custid
FROM customer
WHERE name = '박지성'
));

Q7. 고객 '박지성'이 구매하지 않은 도서의 이름을 검색하시오.
SELECT *
FROM book
WHERE bookid NOT IN (
SELECT bookid
FROM customer AS C
JOIN orders AS O
ON C.custid = O.custid
WHERE name='박지성'
);

제대로 조회했는지 확인 위해서 일단 전체 조회를 위에처럼 해주고, SELECT에서 책 이름만 선택하도록 수정해 아래처럼 작성해주었다.
SELECT bookname
FROM book
WHERE bookid NOT IN (
SELECT bookid
FROM customer AS C
JOIN orders AS O
ON C.custid = O.custid
WHERE name='박지성'
);

Q. 강원도에 위치한 생산공장 목록 출력하기
-- 코드를 입력하세요
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '%강원도%'
ORDER BY FACTORY_ID;

Q. 고양이와 개는 몇 마리 있을까?
SELECT ANIMAL_TYPE, COUNT(DISTINCT ANIMAL_ID) AS count
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Cat' OR ANIMAL_TYPE = 'Dog'
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;

Q. 재구매가 일어난 상품과 회원리스트 구하기
-- 코드를 입력하세요
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID ASC, PRODUCT_ID DESC;
