개요
MySQL에서 조회 결과가 다른 필드의 값에 특정 문자열을 포함하고 있는지 확인한 뒤, 그에 따라 TRUE(예) 또는 FALSE(아니오)를 반환해야 하는 경우가 자주 있습니다. 이럴 때 IF() 함수를 활용하면 간단하게 처리할 수 있습니다.
이번 글에서는 예제 테이블을 만들고, LastName 필드의 값이 'Miller'인지 판별하여 'Yes' 또는 'No'를 출력하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 테스트에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
FirstName varchar(100),
LastName varchar(100)
);
Query OK, 0 rows affected (1.28 sec)2. 데이터 삽입
INSERT 문을 사용하여 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('Chris','Brown');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David','Miller');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Adam','Smith');
Query OK, 1 row affected (0.11 sec)3. 전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | Chris | Brown | | David | Miller | | Adam | Smith | +-----------+----------+ 3 rows in set (0.00 sec)
4. IF() 함수로 문자열 포함 여부 판별하기
다음 쿼리는 LastName 필드의 값이 'Miller'와 일치하는지 검사한 후, 조건이 참이면 'Yes', 거짓이면 'No'를 반환합니다.
mysql> select if(LastName='Miller','Yes','No') AS LastName, FirstName from DemoTable;
실행 결과는 아래와 같습니다.
+----------+-----------+ | LastName | FirstName | +----------+-----------+ | No | Chris | | Yes | David | | No | Adam | +----------+-----------+ 3 rows in set (0.00 sec)
결과 해석
출력 결과를 보면 David의 LastName이 'Miller'이므로 'Yes'가 반환되었고, Chris와 Adam은 해당하지 않으므로 'No'가 반환된 것을 확인할 수 있습니다.
참고: 부분 문자열 매칭이 필요한 경우
위 예제는 정확히 일치하는 값을 비교했습니다. 만약 필드 값에 특정 문자열이 일부 포함되어 있는지만 확인하고 싶다면 LIKE 연산자를 함께 사용하면 됩니다.
mysql> select if(LastName LIKE '%Mill%','Yes','No') AS Result, FirstName from DemoTable;
이처럼 IF() 함수는 조건식, 참일 때 반환값, 거짓일 때 반환값 세 가지 인수를 받아 동작하므로, 다양한 조건 판별 로직을 손쉽게 구현할 수 있습니다.