MySQL에서 CASE WHEN 문으로 레코드 존재 여부 확인하기
MySQL에서는 CASE WHEN 문과 EXISTS 서브쿼리를 함께 사용하면 특정 레코드가 테이블에 존재하는지 손쉽게 확인할 수 있습니다. 이번 글에서는 예제 테이블을 만들고, UserId가 102인 레코드의 존재 여부를 확인하는 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
UserId int,
UserName varchar(100)
);
Query OK, 0 rows affected (0.57 sec)
2. 레코드 삽입
INSERT 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values(100,'Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(101,'Robert');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(102,'David');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(103,'Mike');
Query OK, 1 row affected (0.11 sec)
3. 테이블 데이터 조회
SELECT 문으로 테이블의 전체 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+--------+----------+
| UserId | UserName |
+--------+----------+
| 100 | Chris |
| 101 | Robert |
| 102 | David |
| 103 | Mike |
+--------+----------+
4 rows in set (0.00 sec)
4. CASE WHEN 쿼리로 존재 여부 확인
다음은 CASE WHEN 절과 EXISTS 서브쿼리를 활용해 UserId가 102인 레코드가 존재하는지 확인하는 쿼리입니다.
mysql> select case
when exists(select * from DemoTable where UserId=102)
then 'Present'
else 'Not Present'
end as Result;
UserId가 102인 레코드가 존재하므로 아래와 같이 'Present'가 반환됩니다.
+---------+
| Result |
+---------+
| Present |
+---------+
1 row in set (0.02 sec)
정리
CASE WHEN 절 내부에서 EXISTS 서브쿼리를 사용하면, 조건에 맞는 레코드가 있으면 'Present', 없으면 'Not Present'를 반환합니다. WHERE 조건의 UserId 값만 변경하면 다른 레코드의 존재 여부도 동일한 방식으로 간편하게 확인할 수 있습니다.