dbms DML 연습문제 09/22

jjade·2025년 9월 22일
0

SQL 연습 문제 정리

Velog에 올릴 수 있도록 각 문제에 대한 간단한 개념 설명 + SQL 코드 + 결과 컬럼 설명을 정리했습니다.


1번. 상품의 평균 재고 수 조회

개념 정리: AVG() 함수는 평균을 구할 때 사용합니다. FLOOR()를 사용하면 소수점을 버리고 정수값으로 표현할 수 있습니다.

SELECT FLOOR(AVG(PRODUCT_STOCK)) AS "평균 재고 수"
FROM TBL_PRODUCT;

결과

  • 평균 재고 수: 상품들의 재고 평균을 정수로 표현

2번. 맥북을 구매한 주문의 개수 조회

개념 정리: COUNT(*)는 행의 개수를 셉니다. 특정 상품명 조건을 걸어 개수를 조회합니다.

SELECT COUNT(*) AS "맥북 주문 개수"
FROM TBL_ORDER TBO
JOIN TBL_PRODUCT TBP
ON TBO.PRODUCT_ID = TBP.ID
WHERE PRODUCT_NAME = '맥북';

결과

  • 맥북 주문 개수: 주문 테이블에서 맥북이 몇 번 주문되었는지

3번. 가장 많이 주문한 상품 1개의 모든 정보 조회

개념 정리: GROUP BY로 상품별 주문 횟수를 집계하고, ORDER BY로 정렬한 뒤 FETCH FIRST로 하나만 가져옵니다.

SELECT *
FROM TBL_PRODUCT 
WHERE ID = (
    SELECT PRODUCT_ID 
    FROM TBL_ORDER TBO
    JOIN TBL_PRODUCT TBP 
    ON TBO.PRODUCT_ID = TBP.ID
    GROUP BY PRODUCT_ID
    ORDER BY COUNT(PRODUCT_ID) DESC
    FETCH FIRST 1 ROWS ONLY
);

결과

  • 가장 많이 주문된 상품의 전체 정보(ID, 이름, 가격, 재고 등)

4번. 평균 재고 이상 재고를 가진 상품의 모든 정보 조회

개념 정리: 서브쿼리로 평균 재고를 구하고, 그 이상인 상품들을 조회합니다.

SELECT ID AS "평균 재고 이상 재고를 가진 상품의 ID",
       PRODUCT_PRICE AS "상품 가격", 
       PRODUCT_NAME AS "상품명", 
       PRODUCT_STOCK AS "상품재고"
FROM TBL_PRODUCT
WHERE PRODUCT_STOCK >= (
    SELECT FLOOR(AVG(PRODUCT_STOCK))
    FROM TBL_PRODUCT
);

결과

  • 평균 재고 이상을 가진 상품들의 ID, 가격, 이름, 재고

5번. 공기청정기 주문정보 중 주문 날짜만 조회

개념 정리: 특정 상품명을 조건으로 하여 해당 주문의 날짜를 가져옵니다.

SELECT ORDER_DATE AS "공기청정기 주문정보에 대한 주문 날짜"
FROM TBL_ORDER TBO
JOIN TBL_PRODUCT TBP
ON TBO.PRODUCT_ID = TBP.ID
WHERE PRODUCT_NAME = '공기청정기';

결과

  • 공기청정기 상품에 대한 주문 날짜들

6번. 판매중인 상품의 평균 가격을 소수점 2자리 수까지 조회

개념 정리: ROUND(값, 자릿수)로 소수점 이하를 반올림할 수 있습니다.

SELECT ROUND(AVG(PRODUCT_PRICE),2) AS "상품 평균 가격"
FROM TBL_PRODUCT;

결과

  • 평균 상품 가격 (소수점 둘째 자리까지)

7번. 상품의 재고가 제일 작은 상품 1개 이름과 재고 조회

개념 정리: 오름차순 정렬 후 FETCH FIRST 1 ROWS ONLY로 첫 번째 데이터를 조회합니다.

SELECT PRODUCT_NAME AS "재고 제일 작은 상품 이름", PRODUCT_STOCK AS "재고"
FROM TBL_PRODUCT
ORDER BY PRODUCT_STOCK ASC
FETCH FIRST 1 ROWS ONLY;

결과

  • 재고가 가장 적은 상품 이름과 재고 수량

8번. TV 주문 정보 ORDER_ID만 조회

개념 정리: 특정 상품명으로 주문 테이블에서 ID만 가져옵니다.

SELECT TBO.ID AS "TV 주문 정보 ORDER_ID"
FROM TBL_ORDER TBO
JOIN TBL_PRODUCT TBP
ON TBO.PRODUCT_ID = TBP.ID
WHERE PRODUCT_NAME = 'TV';

결과

  • TV가 주문된 주문 번호(ID)

9번. 상품의 가격 중 제일 비싼 상품의 이름과 가격 조회

개념 정리: ORDER BY ... DESC로 내림차순 정렬 후 가장 비싼 상품을 가져옵니다.

SELECT PRODUCT_NAME AS "상품 이름", PRODUCT_PRICE || '원' AS "상품 가격"
FROM TBL_PRODUCT
ORDER BY PRODUCT_PRICE DESC
FETCH FIRST 1 ROWS ONLY;

결과

  • 가장 비싼 상품의 이름과 가격

10번. 가장 인기 없는 상품의 이름 조회

개념 정리: COUNT()를 활용하여 주문 수가 가장 적은 상품을 찾습니다.

SELECT PRODUCT_NAME AS "상품 이름"
FROM (
    SELECT PRODUCT_ID
    FROM TBL_ORDER TBO
    GROUP BY PRODUCT_ID
    ORDER BY COUNT(PRODUCT_ID) ASC
    FETCH FIRST 1 ROWS ONLY
) TBO
JOIN TBL_PRODUCT TBP 
ON TBO.PRODUCT_ID = TBP.ID;

결과

  • 가장 적게 주문된 상품의 이름

0개의 댓글