MySQL의 IF Statement는 SQL 쿼리 내에서 조건에 따라 다른 값을 반환하거나 동작을 수행하고 싶을 때 유용하게 사용됩니다. 이는 조건을 확인하고, 그 결과에 따라 특정 값을 반환하거나 연산을 수행할 수 있게 해줍니다.
IF Statement의 기본 문법
MySQL에서 IF Statement는 두 가지 주요 형태로 사용됩니다.
1. SQL SELECT 내에서 사용하는 경우
IF(condition, value_if_true, value_if_false)
- condition: 조건을 정의합니다. 조건이 참(TRUE)이면 참으로 간주됩니다.
- value_if_true: 조건이 참일 때의 반환 값입니다.
- value_if_false: 조건이 거짓(FALSE)일 때의 반환 값입니다.
2. 저장 프로시저 또는 MySQL 블록 내에서 사용하는 경우
IF ... THEN 구문을 사용하여 특정 조건이 만족되었을 때만 코드 블록을 실행할 수 있습니다.
IF condition THEN
-- statements
END IF;
아래에서 각각의 경우에 대해 예제를 살펴보며 자세히 설명드리겠습니다.
1. SQL SELECT 내에서 IF 사용 예시
예제: 상품의 가격을 기준으로 할인 여부 표시하기
Products 테이블이 있다고 가정합니다. 이 테이블은 상품의 이름(ProductName)과 가격(Price) 컬럼을 갖고 있습니다. 우리가 특정 가격 기준으로 "할인 적용" 여부를 판단하고 싶다면 아래와 같이 쿼리를 작성할 수 있습니다.
SELECT
ProductName,
Price,
IF(Price > 100, '할인 없음', '할인 적용') AS DiscountStatus
FROM Products;
설명:
- Price가 100보다 크면 DiscountStatus 컬럼에 "할인 없음"이라는 문자열이 반환됩니다.
- 반대로 100 이하인 경우 "할인 적용"이라는 문자열이 반환됩니다.
결과:
| ProductName | Price | DiscountStatus |
|-|-|-|
| 상품 A | 120 | 할인 없음 |
| 상품 B | 80 | 할인 적용 |
2. 저장 프로시저에서 IF ... THEN 사용 예시
저장 프로시저나 트리거에서 조건문 IF를 활용하여 실행 흐름을 제어할 수도 있습니다.
예제: 주문 금액에 따라 포인트를 부여하는 로직
아래는 Orders 테이블의 TotalAmount(주문 금액)을 기준으로 고객에게 포인트를 적립하는 상황을 가정합니다. 주문 금액이 100 이상인 경우 10 포인트, 그렇지 않은 경우 5 포인트가 지급되는 로직입니다.
DELIMITER $$
CREATE PROCEDURE ApplyRewards(IN orderAmount DECIMAL(10,2), OUT rewardPoints INT)
BEGIN
IF orderAmount >= 100 THEN
SET rewardPoints = 10;
ELSE
SET rewardPoints = 5;
END IF;
END$$
DELIMITER ;
설명:
- orderAmount 매개변수는 프로시저에 전달된 주문 금액입니다.
- 조건에서 orderAmount >= 100인 경우 rewardPoints에 10을 할당하며, 그렇지 않은 경우 5를 할당합니다.
이 프로시저를 호출하려면 다음과 같이 실행할 수 있습니다:
CALL ApplyRewards(150, @points);
SELECT @points; -- 이 결과는 10입니다.
추가 주의사항
1. IF와 CASE 구문의 차이점:
- MySQL의 CASE 구문은 더 복잡한 조건 처리를 위한 선택지이며, 여러 조건을 처리할 때 더욱 권장됩니다. IF는 간단한 조건 판단에 유용합니다.
- 예제:
SELECT CASE
WHEN Price > 100 THEN '할인 없음'
ELSE '할인 적용'
END AS DiscountStatus
FROM Products;
2. 저장 프로시저 내 IF의 경우, 중첩된 조건도 작성할 수 있습니다:
IF condition1 THEN
-- 실행 코드
ELSEIF condition2 THEN
-- 실행 코드
ELSE
-- 실행 코드
END IF;
최적화 팁
- IF Statement를 사용할 때 WHERE 절의 조건이 반복적으로 평가되는 경우, 조건에 사용된 컬럼(Price 등)에 인덱스를 추가하면 쿼리 성능 향상에 도움이 됩니다.
- SELECT 문에서 IF 대신 CASE를 사용하는 것을 고려하세요. CASE는 더 읽기 쉽고 확장성이 좋습니다.
위 내용을 활용하면 다양한 데이터 상황에서 조건에 따른 처리가 가능하며, 효율적인 비즈니스 로직 작성에 큰 도움이 될 것입니다. MySQL의 IF Statement는 단순하지만 강력한 도구이니 적절히 활용해 보세요!
'SQL > MYSQL' 카테고리의 다른 글
[MySQL] REPEAT 문 사용 방법 및 예시 (0) | 2024.12.27 |
---|---|
[MySQL] LOOP 문 사용 방법 및 예시 (0) | 2024.12.26 |
[MySQL] LEAVE 문 사용 방법 및 예시 (0) | 2024.12.26 |
[MySQL] ITERATE 사용 방법 및 예시 (0) | 2024.12.24 |
[MySQL] CASE 문 사용 방법 및 예시 (1) | 2024.12.20 |
[MySQL] Local Variable 사용 방법 및 예시 (0) | 2024.12.19 |
[MySQL] Local Variable DECLARE 사용 방법 및 예시 (0) | 2024.12.17 |
[MySQL] DECLARE 사용 방법 및 예시 (0) | 2024.12.16 |