MySQL SELECT 문에서 IF 조건 활용하기
MySQL에서는 IF() 함수를 사용하여 SELECT 쿼리 안에서 조건 분기(if/else) 로직을 간단하게 구현할 수 있습니다. 이 함수는 세 개의 인자를 받습니다. 첫 번째는 평가할 조건식, 두 번째는 조건이 참(TRUE)일 때 반환할 값, 세 번째는 조건이 거짓(FALSE)일 때 반환할 값입니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1966
(
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName varchar(20),
PhotoLiked int
);
Query OK, 0 rows affected (0.00 sec)
INSERT 명령을 사용하여 테이블에 샘플 데이터를 삽입합니다.
mysql> insert into DemoTable1966(UserName,PhotoLiked) values('Chris',57);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1966(UserName,PhotoLiked) values('David',100);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1966(UserName,PhotoLiked) values('Mike',68);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1966(UserName,PhotoLiked) values('Sam',78);
Query OK, 1 row affected (0.00 sec)SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1966;
실행 결과는 다음과 같습니다.
+--------+----------+------------+
| UserId | UserName | PhotoLiked |
+--------+----------+------------+
| 1 | Chris | 57 |
| 2 | David | 100 |
| 3 | Mike | 68 |
| 4 | Sam | 78 |
+--------+----------+------------+
4 rows in set (0.00 sec)
이제 MySQL의 SELECT 문에서 if/else 조건을 적용하는 쿼리를 살펴보겠습니다. 아래 예제에서는 좋아요 수(PhotoLiked)가 75보다 크면 해당 사용자의 이름을 반환하고, 그렇지 않으면 'Likes are less'(좋아요 수 부족)라는 문자열을 반환합니다.
mysql> select if(PhotoLiked > 75,UserName,'Likes are less') as Result from DemoTable1966;
출력 결과는 다음과 같습니다.
+------------------------------------------------+
| Result |
+------------------------------------------------+
| Likes are less |
| David |
| Likes are less |
| Sam |
+------------------------------------------------+
4 rows in set (0.00 sec)
결과를 보면 PhotoLiked 값이 75를 초과하는 David(100)와 Sam(78)의 경우 이름이 그대로 출력되고, 그 외의 레코드에는 지정한 대체 문자열이 표시되는 것을 확인할 수 있습니다.
참고: CASE WHEN 표현식 활용하기
IF() 함수 외에도 표준 SQL 방식인 CASE WHEN 표현식을 사용할 수 있습니다. 단순한 이분법적 조건이라면 IF()로 충분하지만, 여러 조건을 순차적으로 처리해야 하는 경우에는 CASE WHEN이 더 유연하고 가독성이 뛰어납니다.
SELECT
CASE
WHEN PhotoLiked > 75 THEN UserName
ELSE 'Likes are less'
END AS Result
FROM DemoTable1966;
두 방식 모두 동일한 결과를 반환하므로, 상황에 맞게 선택하여 사용하면 됩니다.