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

MySQL CASE 문을 사용해야 하는 이유와 기본 활용법

두 개 이상의 값을 비교하거나 고정된 개수의 조건에 따라 다른 결과를 출력해야 할 때는 MySQL의 CASE 문을 사용하는 것이 가장 효과적입니다. CASE 문은 조건을 평가한 뒤 해당 조건이 참일 때 지정한 값을 반환하므로, 쿼리 결과를 훨씬 직관적이고 가독성 좋게 만들어 줍니다.

MySQL CASE 문 기본 문법

CASE 문의 기본적인 사용 형식은 다음과 같습니다.

SELECT *, 
       CASE WHEN 컬럼명1 > 컬럼명2 THEN '메시지1' 
            ELSE '메시지2' 
       END AS 별칭 
FROM 테이블명;

위 문법을 실제로 이해하기 위해 간단한 예제 테이블을 만들어 보겠습니다.

예제 테이블 생성하기

먼저 두 개의 숫자 컬럼을 가진 테이블을 생성합니다.

mysql> create table CaseFunctionDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Value1 int,
    -> Value2 int
    -> );
Query OK, 0 rows affected (0.56 sec)

데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into CaseFunctionDemo(Value1,Value2) values(10,20);
Query OK, 1 row affected (0.21 sec)
mysql> insert into CaseFunctionDemo(Value1,Value2) values(100,40);
Query OK, 1 row affected (0.10 sec)
mysql> insert into CaseFunctionDemo(Value1,Value2) values(0,20);
Query OK, 1 row affected (0.15 sec)
mysql> insert into CaseFunctionDemo(Value1,Value2) values(0,-50);
Query OK, 1 row affected (0.12 sec)

저장된 데이터 확인하기

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

mysql> select *from CaseFunctionDemo;

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

+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1  | 10     | 20     |
| 2  | 100    | 40     |
| 3  | 0      | 20     |
| 4  | 0      | -50    |
+----+--------+--------+
4 rows in set (0.00 sec)

CASE 문으로 두 값 비교하기

이제 CASE 문을 적용하여 Value1과 Value2 중 어느 값이 더 큰지 한눈에 확인할 수 있는 쿼리를 작성해 보겠습니다.

mysql> select*, case when Value1>Value2 then 'Value1 is Greater' else 'Value2 is Greater' end AS Comparision from CaseFunctionDemo;

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

+----+--------+--------+-------------------+
| Id | Value1 | Value2 | Comparision       |
+----+--------+--------+-------------------+
| 1  | 10     | 20     | Value2 is Greater |
| 2  | 100    | 40     | Value1 is Greater |
| 3  | 0      | 20     | Value2 is Greater |
| 4  | 0      | -50    | Value1 is Greater |
+----+--------+--------+-------------------+
4 rows in set (0.00 sec)

결과에서 볼 수 있듯이, CASE 문은 각 행마다 조건을 평가하여 Value1이 더 크면 'Value1 is Greater', 그렇지 않으면 'Value2 is Greater'라는 문자열을 반환합니다. 이처럼 CASE 문을 활용하면 별도의 애플리케이션 로직 없이도 데이터베이스 쿼리 내에서 조건 분기를 처리할 수 있어 코드가 간결해지고 성능 면에서도 유리합니다.