데이터베이스 3주차 SQL 문제 풀이

박서영·2026년 3월 20일

SQL 기본 문제 풀이

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='박지성'
);


(선택) 프로그래머스 SQL 문제

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;

profile
이불 밖은 위험해.

0개의 댓글