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

MySQL 저장 프로시저에서 IF ELSE로 조건부 쿼리 구현하는 방법

저장 프로시저(Stored Procedure) 안에서 조건에 따라 다른 쿼리를 실행해야 하는 경우가 종종 있습니다. MySQL에서는 IF ELSE 문을 활용하면 이러한 조건부 로직을 손쉽게 구현할 수 있습니다. 이번 글에서는 두 개의 테이블을 만들고, 저장 프로시저의 매개변수 값에 따라 서로 다른 테이블을 조회하는 예제를 단계별로 살펴보겠습니다.

1. 첫 번째 테이블 생성 및 데이터 입력

먼저 예제에 사용할 테이블 DemoTable1을 생성합니다.

mysql> create table DemoTable1
   (
   Id int
   );
Query OK, 0 rows affected (0.62 sec)

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

mysql> insert into DemoTable1 values(10);
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable1 values(20);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable1 values(30);
Query OK, 1 row affected (0.12 sec)

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

mysql> select *from DemoTable1;

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

+------+
| Id   |
+------+
| 10   |
| 20   |
| 30   |
+------+
3 rows in set (0.00 sec)

2. 두 번째 테이블 생성 및 데이터 입력

이어서 비교용 테이블 DemoTable2를 생성합니다.

mysql> create table DemoTable2
   (
   Id int
   );
Query OK, 0 rows affected (1.07 sec)

마찬가지로 레코드를 삽입합니다.

mysql> insert into DemoTable2 values(40);
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable2 values(50);
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable2 values(60);
Query OK, 1 row affected (0.11 sec)

테이블 내용을 조회해 보면 다음과 같습니다.

mysql> select *from DemoTable2;
+------+
| Id   |
+------+
| 40   |
| 50   |
| 60   |
+------+
3 rows in set (0.00 sec)

3. IF ELSE를 사용한 조건부 저장 프로시저 작성

이제 매개변수 값이 40 이상이면 DemoTable2를 조회하고, 그렇지 않으면 DemoTable1을 조회하는 저장 프로시저를 생성합니다.

mysql> DELIMITER //
   mysql> CREATE PROCEDURE Conditional_Query(id int)
   BEGIN
      IF id >=40 THEN
         Select * from DemoTable2;
     ELSE
        Select * from DemoTable1;
      END IF;
   END
   //
   Query OK, 0 rows affected (0.21 sec)
mysql> DELIMITER ;

참고: 저장 프로시저 본문 내부의 세미콜론(;)이 일반 SQL 문의 종결자와 충돌하지 않도록, 프로시저 생성 전에 DELIMITER //로 구분 기호를 변경하고, 생성이 끝나면 DELIMITER ;로 원래대로 되돌려 주는 것이 좋습니다.

4. 저장 프로시저 호출 및 결과 확인

CALL 명령으로 저장 프로시저를 실행할 수 있습니다. 먼저 40 이상인 값 100을 전달해 보겠습니다.

mysql> call Conditional_Query(100);

조건이 참이므로 DemoTable2의 데이터가 반환됩니다.

+------+
| Id   |
+------+
| 40   |
| 50   |
| 60   |
+------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.03 sec)

이번에는 40 미만인 값 13을 전달해 보겠습니다.

mysql> call Conditional_Query(13);

조건이 거짓이므로 이번에는 DemoTable1의 데이터가 출력됩니다.

+------+
| Id   |
+------+
| 10   |
| 20   |
| 30   |
+------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.02 sec)

정리

이처럼 MySQL 저장 프로시저에서는 IF ELSE 문을 사용해 입력값에 따라 분기 처리된 쿼리를 간단하게 구현할 수 있습니다. 조건이 세 가지 이상으로 늘어난다면 ELSEIF를 추가하거나 CASE 문을 활용하는 것도 좋은 대안입니다. 반복적으로 사용되는 조건부 조회 로직은 저장 프로시저로 묶어두면 코드 재사용성과 유지보수성이 크게 향상됩니다.