MySQL IF ELSEIF ELSE 문이란?
MySQL의 IF ELSEIF ELSE 문은 여러 조건식을 평가한 결과에 따라 서로 다른 문장을 실행할 수 있게 해주는 조건 분기문입니다. 기본 문법은 다음과 같습니다.
IF expression THEN
statements;
ELSEIF elseif-expression THEN
elseif-statements;
... ... ... ...
ELSE
else-statements;
END IF;
각 문장은 반드시 세미콜론(;)으로 끝나야 하며, 전체 블록은 END IF로 마무리됩니다.
예제 테이블 준비
저장 프로시저에서 IF ELSEIF 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 ELSEIF ELSE 문을 포함한 저장 프로시저 생성
다음 쿼리는 과목명을 입력받아 해당 과목에 맞는 과정명을 반환하는 'coursedetails_IF_ELSEIF' 프로시저를 생성합니다. 이 프로시저 내부에는 IF ELSEIF ELSE 조건문이 사용되었습니다.
mysql> DELIMITER // ;
mysql> CREATE PROCEDURE coursedetails_IF_ELSEIF(IN S_Subject Varchar(20), OUT S_Course varchar(20))
-> 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)';
-> ELSEIF Sub = 'History' THEN
-> SET S_Course = 'Masters in History';
-> ELSEIF Sub = 'Literature' THEN
-> SET S_Course = 'Masters in English';
-> END IF;
-> END //
Query OK, 0 rows affected (0.00 sec)
프로시저의 동작 방식을 간단히 설명하면 다음과 같습니다.
- IN 파라미터(S_Subject): 호출 시 과목명을 입력값으로 전달받습니다.
- OUT 파라미터(S_Course): 조건 판별 결과인 과정명을 외부로 반환합니다.
- DECLARE: 과목명을 임시로 저장할 변수 Sub를 선언합니다.
- SELECT INTO: student_info 테이블에서 일치하는 과목을 조회해 변수에 저장합니다.
- IF ELSEIF: 변수 값에 따라 'Computers'는 B.Tech(CSE), 'History'는 Masters in History, 'Literature'는 Masters in English를 각각 설정합니다.
저장 프로시저 호출 및 결과 확인
이제 구분자(Delimiter)를 원래대로 되돌린 후 프로시저를 호출하면 아래와 같은 결과를 확인할 수 있습니다.
mysql> Delimiter ; //
mysql> CALL coursedetails_IF_ELSEIF('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)
mysql> CALL coursedetails_IF_ELSEIF ('Literature', @S_Course);
Query OK, 1 row affected (0.00 sec)
mysql> Select @S_Course;
+--------------------+
| @S_Course |
+--------------------+
| Masters in English |
+--------------------+
1 row in set (0.00 sec)
결과에서 볼 수 있듯이, 'Computers'를 입력하면 'B.Tech(CSE)'가, 'Literature'를 입력하면 'Masters in English'가 반환됩니다. 이처럼 IF ELSEIF ELSE 문을 활용하면 저장 프로시저 안에서 입력값에 따라 유연하게 분기 처리를 수행할 수 있습니다.