MySQL IF ELSE 문이란?
MySQL의 IF ELSE 문은 조건식이 거짓(FALSE)으로 평가될 때 실행할 대체 동작을 지정할 수 있는 기본적인 조건 분기 구조입니다. 저장 프로시저 안에서 특정 조건에 따라 서로 다른 로직을 수행해야 할 때 매우 유용하게 사용됩니다.
기본 구문
IF expression THEN
statements;
ELSE
else-statements;
END IF;
각 문장(statement)은 반드시 세미콜론(;)으로 끝나야 하며, 조건식이 참(TRUE)이면 THEN 블록이, 거짓이면 ELSE 블록이 실행된 후 END IF로 조건문이 종료됩니다.
예제 테이블 준비
저장 프로시저에서 IF ELSE 문의 실제 사용 방법을 살펴보기 위해, 아래와 같은 데이터를 가진 student_info 테이블을 기준으로 예제를 진행하겠습니다.
mysql> Select * from student_info;
+------+---------+------------+------------+
| id | Name | Address | Subject |
+------+---------+------------+------------+
| 101 | YashPal | Amritsar | History |
| 105 | Gaurav | Jaipur | Literature |
| 125 | Raman | Shimla | Computers |
+------+---------+------------+------------+
3 rows in set (0.00 sec)
IF ELSE 문이 포함된 저장 프로시저 만들기
다음 쿼리는 과목명을 입력받아 해당 과목에 맞는 과정명을 반환하는 coursedetails_IFELSE라는 저장 프로시저를 생성합니다. 입력 파라미터(IN)로 과목을 받고, 출력 파라미터(OUT)로 결과를 전달하는 구조입니다.
mysql> DELIMITER // ;
mysql> CREATE PROCEDURE coursedetails_IFELSE(IN S_Subject Varchar(20), OUT S_Course varchar(50))
-> BEGIN
-> DECLARE Sub Varchar(20);
-> SELECT Subject INTO SUB
-> FROM Student_info WHERE S_Subject = Subject;
-> IF Sub = 'Computers' THEN
-> SET S_Course = 'B.Tech(CSE)';
-> ELSE
-> SET S_Course = 'Subject Not in the table ';
-> END IF;
-> END //
Query OK, 0 rows affected (0.00 sec)
여기서 DELIMITER //는 프로시저 본문 내부의 세미콜론이 클라이언트의 문장 구분자로 해석되지 않도록 임시로 구분자를 변경하는 명령입니다. 프로시저 정의가 끝난 후에는 반드시 원래 구분자로 되돌려 놓아야 합니다.
프로시저 호출 및 결과 확인
생성한 프로시저를 호출하여 조건 분기가 올바르게 작동하는지 확인해 보겠습니다.
1) 테이블에 존재하는 과목('Computers')을 입력한 경우:
mysql> Delimiter ; //
mysql> CALL coursedetails_IFELSE('Computers', @S_Course);
Query OK, 1 row affected (0.00 sec)
mysql> Select @S_Course;
+-------------+
| @S_Course |
+-------------+
| B.Tech(CSE) |
+-------------+
1 row in set (0.00 sec)
입력한 과목이 'Computers'이므로 IF 조건이 참으로 평가되어 THEN 블록의 'B.Tech(CSE)'가 출력 파라미터에 설정됩니다.
2) 테이블에 없는 과목('History')을 입력한 경우:
mysql> CALL coursedetails_IFELSE ('History', @S_Course);
Query OK, 0 rows affected (0.00 sec)
mysql> Select @S_Course;
+--------------------------------+
| @S_Course |
+--------------------------------+
| Subject Not in the table |
+--------------------------------+
1 row in set (0.00 sec)이번에는 조건이 거짓으로 평가되어 ELSE 블록이 실행되고, 'Subject Not in the table'이라는 메시지가 반환됩니다.
정리
이처럼 MySQL 저장 프로시저에서 IF ELSE 문을 활용하면 조건에 따라 다른 처리 흐름을 손쉽게 구현할 수 있습니다. 여러 개의 조건을 순차적으로 검사해야 하는 경우에는 ELSE IF 절을 추가로 사용하거나 CASE 문을 활용하는 것도 좋은 방법입니다.