Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL CASE 문으로 단일 쿼리에서 여러 상품 가격 한 번에 인상하기

MySQL 단일 쿼리로 여러 상품 가격 일괄 인상하기

여러 상품의 가격을 서로 다른 비율로 한 번에 인상하고 싶다면 MySQL의 CASE 문을 활용하면 됩니다. CASE 문은 조건별로 다른 값을 반환할 수 있어서, 하나의 UPDATE 쿼리 안에서 상품마다 다른 인상률을 적용하는 데 매우 유용합니다.

아래에서 실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 상품명과 가격을 저장할 데모 테이블을 만듭니다.

mysql> create table DemoTable
-> (
-> ProductName varchar(20),
-> ProductPrice int
-> );
Query OK, 0 rows affected (0.51 sec)

2단계: 샘플 데이터 삽입

INSERT 명령으로 세 개의 상품 레코드를 추가합니다.

mysql> insert into DemoTable values('Product-1',700);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Product-2',1000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Product-3',3000);
Query OK, 1 row affected (0.10 sec)

3단계: 현재 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+-------------+--------------+
| ProductName | ProductPrice |
+-------------+--------------+
| Product-1 | 700 |
| Product-2 | 1000 |
| Product-3 | 3000 |
+-------------+--------------+
3 rows in set (0.00 sec)

4단계: CASE 문으로 가격 일괄 인상

다음은 여러 상품의 가격을 동시에 인상하는 MySQL 쿼리입니다. Product-1은 20%, Product-2는 40%, Product-3은 60%씩 인상됩니다.

mysql> update DemoTable
-> set ProductPrice=
-> case when ProductName='Product-1' then ProductPrice+((ProductPrice*20)/100)
-> when ProductName='Product-2' then ProductPrice+((ProductPrice*40)/100)
-> when ProductName='Product-3' then ProductPrice+((ProductPrice*60)/100)
-> end;
Query OK, 3 rows affected (0.14 sec)
Rows matched: 3 Changed: 3 Warnings: 0

쿼리 설명: CASE 문은 ProductName 값에 따라 각 조건을 순서대로 평가하고, 일치하는 조건의 THEN 절에 정의된 계산식으로 ProductPrice를 새롭게 설정합니다. 이렇게 하면 상품별로 UPDATE 문을 여러 번 실행할 필요 없이 단 하나의 쿼리로 모든 가격을 처리할 수 있어 성능 면에서도 효율적입니다.

5단계: 업데이트 결과 확인

테이블 레코드를 다시 조회해 변경 사항을 확인해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+-------------+--------------+
| ProductName | ProductPrice |
+-------------+--------------+
| Product-1 | 840 |
| Product-2 | 1400 |
| Product-3 | 4800 |
+-------------+--------------+
3 rows in set (0.00 sec)

출력 결과를 보면 Product-1은 700 → 840(20% 인상), Product-2는 1000 → 1400(40% 인상), Product-3은 3000 → 4800(60% 인상)으로 각각 정상적으로 반영된 것을 확인할 수 있습니다.

참고: ELSE 절 추가하기

CASE 문을 사용할 때는 조건에 해당하지 않는 행을 대비해 ELSE 절을 추가하는 것이 좋습니다. ELSE 절이 없으면 어떤 조건에도 해당하지 않는 행의 ProductPrice가 NULL로 설정되어 기존 가격이 사라질 수 있습니다. 아래처럼 else ProductPrice를 추가하면 조건에 맞지 않는 행은 원래 가격을 그대로 유지합니다.

mysql> update DemoTable
-> set ProductPrice=
-> case when ProductName='Product-1' then ProductPrice+((ProductPrice*20)/100)
-> when ProductName='Product-2' then ProductPrice+((ProductPrice*40)/100)
-> when ProductName='Product-3' then ProductPrice+((ProductPrice*60)/100)
-> else ProductPrice
-> end;