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 연산자를 사용해야 올바른 결과를 얻을 수 있습니다.