MySQL에서는 저장 프로시저(Stored Procedure) 안에서 IF 문을 사용할 수 있으며, SELECT 문에서는 IF() 함수를 활용해 조건에 따라 다른 값을 반환할 수 있습니다. 이 글에서는 두 가지 방법을 예제와 함께 자세히 살펴보겠습니다.
SELECT 문에서 IF() 함수 사용하기
IF() 함수는 IF(조건식, 참일 때 값, 거짓일 때 값) 형태로 사용하며, 조건이 참이면 두 번째 인자를, 거짓이면 세 번째 인자를 반환합니다.
먼저 조건이 참인 경우의 예제입니다.
mysql> select if(0=0,'Hello MySQL','condition is wrong');
실행 결과는 다음과 같습니다.
+------------------------------------------------------+
| if('test'='test','Hello MySQL','condition is wrong') |
+------------------------------------------------------+
| Hello MySQL |
+------------------------------------------------------+
1 row in set (0.00 sec)다음으로 조건이 거짓인 경우입니다.
mysql> select if(1=0,'Hello MySQL','condition is wrong');
조건이 거짓이므로 세 번째 인자가 출력됩니다.
+--------------------------------------------+ | if(1=0,'Hello MySQL','condition is wrong') | +--------------------------------------------+ | condition is wrong | +--------------------------------------------+ 1 row in set (0.00 sec)
저장 프로시저에서 IF문 사용하기
저장 프로시저 내부에서는 프로그래밍 언어처럼 IF ... THEN ... ELSE ... END IF; 구문을 사용하여 조건 분기를 처리할 수 있습니다. 아래는 저장 프로시저를 생성하는 쿼리 예제입니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE if_demo(value int)
BEGIN
IF 1=value
THEN SELECT "Hello MySQL";
ELSE
SELECT "Wrong Condition";
END IF;
END
//
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;위 코드에서는 먼저 DELIMITER //로 구분 기호를 변경한 후 프로시저를 정의하고, 작성이 끝나면 원래 구분 기호로 되돌립니다. 이 프로시저는 입력받은 값이 1이면 'Hello MySQL'을, 그렇지 않으면 'Wrong Condition'을 출력합니다.
생성된 저장 프로시저는 CALL 명령으로 호출할 수 있습니다.
조건이 참인 경우:
mysql> call if_demo(1);
실행 결과는 다음과 같습니다.
+-------------+ | Hello MySQL | +-------------+ | Hello MySQL | +-------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
조건이 거짓인 경우:
mysql> call if_demo(0);
입력값이 1이 아니므로 ELSE 블록의 결과가 출력됩니다.
+-----------------+ | Wrong Condition | +-----------------+ | Wrong Condition | +-----------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
정리
지금까지 MySQL에서 조건 처리를 하는 두 가지 방법을 알아보았습니다. 단순히 조회 결과에서 값을 분기할 때는 SELECT 문의 IF() 함수가 유용하고, 복잡한 로직이나 여러 문장을 실행해야 할 때는 저장 프로시저의 IF 문을 사용하는 것이 적합합니다. 상황에 맞게 활용하면 더욱 효율적인 데이터베이스 로직을 구성할 수 있습니다.