Database

[SQL] 오답노트

Minch13r 2025. 3. 4. 20:45

테이블 구조 요약

  1. MEMBER 테이블: 회원 정보 저장
    • MID: 회원 아이디 (기본키)
    • MPW: 비밀번호
    • NAME: 회원 이름
  2. PRODUCT 테이블: 상품 정보 저장
    • PID: 상품 번호 (기본키)
    • NAME: 상품명
    • PRICE: 가격
    • CNT: 재고
  3. ORDERLIST 테이블: 주문 내역 저장
    • OID: 주문 번호 (기본키)
    • MID: 구매자 (회원 테이블 참조)
    • PID: 주문 상품 번호 (상품 테이블 참조)
    • CNT: 구매 개수
    • PAYMENT: 결제 정보

[10] 상품 테이블의 데이터를 아래와 같이 출력해주세요.

기존 답)

SELECT P.PID, P.NAME, O.CNT as 판매량, (P.PRICE * O.CNT) as 판매금액  FROM ORDERLIST O
INNER JOIN PRODUCT P
ON P.PID = O.PID

 

정답)

CREATE TABLE MEMBER (
    MID VARCHAR(15) NOT NULL,
    MPW VARCHAR(15) NOT NULL,
    NAME VARCHAR(15) NOT NULL,
    PRIMARY KEY (MID)
);

CREATE TABLE PRODUCT (
    PID VARCHAR(30) NOT NULL,
    NAME VARCHAR(30) NOT NULL,
    PRICE DECIMAL(10,2) NOT NULL,  -- 숫자 타입으로 변경
    CNT INT NOT NULL,              -- 숫자 타입으로 변경
    PRIMARY KEY (PID)
);

CREATE TABLE ORDERLIST (
    OID VARCHAR(30) NOT NULL,
    MID VARCHAR(15) NOT NULL,
    PID VARCHAR(30) NOT NULL,
    CNT INT NOT NULL,              -- 숫자 타입으로 변경
    PAYMENT VARCHAR(30) NOT NULL,
    PRIMARY KEY (OID),
    FOREIGN KEY (MID) REFERENCES MEMBER(MID),
    FOREIGN KEY (PID) REFERENCES PRODUCT(PID)
);

 

이와 같이 변경하고 산술 연산 진행. VARCHAR 형식은 곱연산에 있어 문제가 생길 수 있음

SELECT P.PID, P.NAME, O.CNT as 판매량, (P.PRICE * O.CNT) as 판매금액 
FROM ORDERLIST O
INNER JOIN PRODUCT P
ON P.PID = O.PID;

[11] [10]번에서 출력한 데이터들을 판매량 순서대로 정렬하여 출력해주세요.

기존 답)

SELECT P.PID, P.NAME, O.CNT as 판매량, (P.PRICE * O.CNT) as 판매금액  
FROM ORDERLIST O
INNER JOIN PRODUCT P
ON P.PID = O.PID
ORDER BY CAST(판매량 AS SIGNED) DESC;

 

정답)

SELECT P.PID, P.NAME, O.CNT as 판매량, (P.PRICE * O.CNT) as 판매금액  
FROM ORDERLIST O
INNER JOIN PRODUCT P
ON P.PID = O.PID
ORDER BY 판매량 DESC;

 

INT로 테이블을 ALTER 하고 정답을 내는게 더 쿼리문에 올바르다.

'Database' 카테고리의 다른 글

[Do it SQL] Chapter 01-3 / 02-1  (1) 2025.03.16
[DB] 기초공부 3  (0) 2025.02.14
[DB] 기초공부 2  (0) 2025.02.13
[DB] 기초공부 1  (1) 2025.02.12
[DB] 기초공부  (1) 2025.02.11