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

MySQL CASE 문에서 OR 조건을 활용하는 방법 완벽 가이드

MySQL CASE 문에서 OR 조건 활용하기

MySQL에서는 CASE 문과 OR 연산자를 함께 사용하여 여러 조건을 하나의 논리식으로 처리할 수 있습니다. 예를 들어, 특정 컬럼의 값이 0이거나 NULL인 경우 서로 다른 메시지를 출력하도록 구현할 수 있는데, 이번 글에서는 예약 시스템 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

기본 문법

다음은 MySQL에서 OR 조건과 함께 CASE 문을 사용하는 기본 문법입니다.

SELECT yourColumnName1,.....N ,
    CASE WHEN yourColumnName2=0 or yourColumnName2 IS NULL THEN 'yourMessage1'
ELSE 'yourMessage2'
END AS yourAliasName
FROM yourTableName;

위 문법을 제대로 이해하기 위해 실제 테이블을 생성하고 예제 데이터를 삽입해 보겠습니다.

1단계: 테이블 생성

다음 쿼리로 예약 시스템(ReservationSystems) 테이블을 생성합니다.

mysql> create table ReservationSystems
    - > (
    - > Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    - > Name varchar(20),
    - > isSeatConfirmed tinyint
    - > );
Query OK, 0 rows affected (0.61 sec)

테이블은 세 개의 컬럼으로 구성되어 있습니다. Id는 자동 증가하는 기본 키이며, Name은 이름을 저장하고, isSeatConfirmed는 좌석 확정 여부를 나타냅니다. isSeatConfirmed는 tinyint 타입으로 0은 미확정, 1은 확정을 의미하며 NULL 값도 허용됩니다.

2단계: 샘플 데이터 삽입

INSERT 명령어를 사용하여 테이블에 레코드를 입력합니다.

mysql> insert into ReservationSystems(Name,isSeatConfirmed) values('Larry',0);
Query OK, 1 row affected (0.12 sec)
mysql> insert into ReservationSystems(Name,isSeatConfirmed) values('Bob',1);
Query OK, 1 row affected (0.15 sec)
mysql> insert into ReservationSystems(Name,isSeatConfirmed) values('Mike',NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into ReservationSystems(Name,isSeatConfirmed) values('David',1);
Query OK, 1 row affected (0.17 sec)
mysql> insert into ReservationSystems(Name,isSeatConfirmed) values('Carol',0);
Query OK, 1 row affected (0.19 sec)
mysql> insert into ReservationSystems(Name,isSeatConfirmed) values('James',1);
Query OK, 1 row affected (0.11 sec)

3단계: 전체 데이터 조회

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

mysql> select *from ReservationSystems;

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

+----+-------+-----------------+
| Id | Name  | isSeatConfirmed |
+----+-------+-----------------+
|  1 | Larry |               0 |
|  2 | Bob   |               1 |
|  3 | Mike  |            NULL |
|  4 | David |               1 |
|  5 | Carol |               0 |
|  6 | James |               1 |
+----+-------+-----------------+
6 rows in set (0.00 sec)

4단계: CASE 문에 OR 조건 적용

이제 핵심 부분입니다. isSeatConfirmed 값이 0이거나 NULL일 때는 "좌석 미확정" 메시지를, 그 외의 경우에는 "좌석 확정" 메시지를 출력하는 쿼리를 작성합니다.

mysql> select Name,
    - > CASE WHEN isSeatConfirmed=0 or isSeatConfirmed IS NULL THEN 'YOUR SEAT IS NOT CONFIRMED'
    - > ELSE 'YOUR SEAT IS CONFIRMED'
    - > END AS SEATCONFIRMSTATUS
    - > FROM ReservationSystems;

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

+-------+----------------------------+
| Name  | SEATCONFIRMSTATUS          |
+-------+----------------------------+
| Larry | YOUR SEAT IS NOT CONFIRMED |
| Bob   | YOUR SEAT IS CONFIRMED     |
| Mike  | YOUR SEAT IS NOT CONFIRMED |
| David | YOUR SEAT IS CONFIRMED     |
| Carol | YOUR SEAT IS NOT CONFIRMED |
| James | YOUR SEAT IS CONFIRMED     |
+-------+----------------------------+
6 rows in set (0.00 sec)

결과 분석 및 핵심 포인트

출력 결과를 보면 Larry와 Carol은 isSeatConfirmed 값이 0이고, Mike는 NULL이므로 세 사람 모두 "YOUR SEAT IS NOT CONFIRMED"(좌석 미확정) 메시지가 표시되었습니다. 반면 Bob, David, James는 값이 1이므로 "YOUR SEAT IS CONFIRMED"(좌석 확정) 메시지가 출력되었습니다.

이처럼 CASE 문의 WHEN 절에서 OR 연산자를 사용하면 두 개 이상의 조건을 하나의 식으로 결합하여 처리할 수 있습니다. 특히 주의할 점은 NULL을 비교할 때 = NULL이 아닌 IS NULL을 사용해야 한다는 것입니다. SQL에서 NULL은 알 수 없는 값이기 때문에 등호(=)로 비교할 수 없으며, 반드시 IS NULL 연산자를 사용해야 올바른 결과를 얻을 수 있습니다.