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

C/C++의 삼항 연산자처럼 MySQL에서도 삼항 연산을 사용할 수 있을까?

네, 가능합니다. 다만 MySQL에는 C나 C++처럼 ? : 형태의 전용 삼항 연산자 문법이 존재하지 않으며, 대신 CASE WHEN 구문을 활용하면 완전히 동일한 조건 분기 로직을 구현할 수 있습니다.

C 언어에서의 삼항 연산자 동작 방식

먼저 C 또는 C++ 언어에서 삼항 연산자가 어떻게 작동하는지 살펴보겠습니다.

X=(X > 10 && ( X-Y) < 0) ?: X:(X-Y);

위 식은 괄호 안의 조건이 참(true)이면 X를 반환하고, 거짓(false)이면 (X-Y)를 반환하는 전형적인 삼항 연산입니다. 이를 확인하기 위해 C 언어로 작성한 데모 코드는 다음과 같습니다.

#include <stdio.h>
int main() {
   int X;
   int Y;
   int result;
   printf("Enter the value for X:");
   scanf("%d",&X);
   printf("Enter the value for Y:");
   scanf("%d",&Y);
   result=( X > 1 && (X-Y) < 0) ? X: (X-Y);
   printf("The Result is=%d",result);
   return 0;
}

MySQL에서 삼항 연산 구현하기

MySQL에서는 CASE WHEN ... THEN ... ELSE ... END 구문을 사용하여 삼항 연산과 똑같은 결과를 얻을 수 있습니다. 기본 문법은 다음과 같습니다.

select case when yourtableAliasName.yourColumnName1 > 1 AND
(yourtableAliasName.yourColumnName1-yourtableAliasName.yourColumnName2) < 0 THEN
0 ELSE (yourtableAliasName.yourColumnName1-yourtableAliasName.yourColumnName2)
END AS anyAliasName from yourTableName yourtableAliasName;

이 문법을 실제로 이해하기 위해 간단한 테이블을 하나 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table TernaryOperationDemo
   -> (
   -> X int,
   -> Y int
   -> );
Query OK, 0 rows affected (0.61 sec)

이제 insert 명령을 사용해 테이블에 샘플 데이터를 입력합니다.

mysql> insert into TernaryOperationDemo values(10,5);
Query OK, 1 row affected (0.14 sec)
mysql> insert into TernaryOperationDemo values(5,15);
Query OK, 1 row affected (0.16 sec)
mysql> insert into TernaryOperationDemo values(20,15);
Query OK, 1 row affected (0.15 sec)
mysql> insert into TernaryOperationDemo values(15,25);
Query OK, 1 row affected (0.13 sec)
mysql> insert into TernaryOperationDemo values(10,-11);
Query OK, 1 row affected (0.15 sec)

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from TernaryOperationDemo;

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

+------+------+
| X    | Y    |
+------+------+
|   10 |    5 |
|    5 |   15 |
|   20 |   15 |
|   15 |   25 |
|   10 |  -11 |
+------+------+
5 rows in set (0.00 sec)

이제 삼항 연산에 해당하는 쿼리를 실행해 보겠습니다.

mysql> select case when tbl.X > 1 AND (tbl.X-tbl.Y) < 0 THEN 0 ELSE (tbl.X-tbl.Y) END AS
Result from TernaryOperationDemo tbl;

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

+--------+
| Result |
+--------+
|      5 |
|      0 |
|      5 |
|      0 |
|     21 |
+--------+
5 rows in set (0.00 sec)

결과 해석

위 쿼리의 동작 원리를 살펴보면 다음과 같습니다.

  • X=10, Y=5인 경우: X > 1은 참이지만 (X-Y)=5로 0보다 작지 않으므로 ELSE 절이 실행되어 5가 반환됩니다.
  • X=5, Y=15인 경우: 두 조건이 모두 충족되어 (X-Y)=-10 < 0이므로 THEN 절이 실행되어 0이 반환됩니다.
  • X=10, Y=-11인 경우: (X-Y)=21로 조건을 만족하지 않아 ELSE 절이 실행되어 21이 반환됩니다.

이처럼 MySQL에서는 CASE WHEN 구문만 활용하면 C/C++의 삼항 연산자와 동일한 조건부 로직을 손쉽게 구현할 수 있습니다.