MySQL IF() 함수에서 SELECT 문 활용하기
MySQL의 IF() 함수는 조건에 따라 서로 다른 값을 반환하는 강력한 제어 흐름 함수입니다. 흥미로운 점은 SELECT 문(서브쿼리)을 IF() 함수의 첫 번째 인수인 조건식으로 사용할 수 있다는 것입니다.
이를 이해하기 위해 다음과 같은 데이터를 가진 Students 테이블을 예시로 살펴보겠습니다.
예시 테이블: Students
mysql> Select * from Students; +----+-----------+-----------+----------+----------------+ | id | Name | Country | Language | Course | +----+-----------+-----------+----------+----------------+ | 1 | Francis | UK | English | Literature | | 2 | Rick | USA | English | History | | 3 | Correy | USA | English | Computers | | 4 | Shane | France | French | Computers | | 5 | Validimir | Russia | Russian | Computers | | 6 | Steve | Australia | English | Geoinformatics | | 7 | Rahul | India | Hindi | Yoga | | 8 | Harshit | India | Hindi | Computers | | 9 | Harry | NZ | English | Electronics | +----+-----------+-----------+----------+----------------+ 9 rows in set (0.00 sec)
IF() 함수 안에 SELECT 문 사용하기
아래 쿼리는 IF() 함수 내부에 두 개의 SELECT 서브쿼리를 사용하여 조건을 구성합니다.
mysql> Select ID, IF((Select COUNT(*) FROM Students WHERE Language = 'English')>(Select COUNT(*) from Students WHERE Language <> 'English'),(CONCAT("Name is ", Name)),(CONCAT("Course is ", Course))) AS 'Name/Course' from Students;
+----+-------------------+
| ID | Name/Course |
+----+-------------------+
| 1 | Name is Francis |
| 2 | Name is Rick |
| 3 | Name is Correy |
| 4 | Name is Shane |
| 5 | Name is Validimir |
| 6 | Name is Steve |
| 7 | Name is Rahul |
| 8 | Name is Harshit |
| 9 | Name is Harry |
+----+-------------------+
9 rows in set (0.00 sec)쿼리 동작 원리
이 쿼리가 어떻게 작동하는지 단계별로 살펴보겠습니다.
1. 조건 평가: 첫 번째 서브쿼리 (Select COUNT(*) FROM Students WHERE Language = 'English')는 영어를 사용하는 학생 수를 계산하고, 두 번째 서브쿼리 (Select COUNT(*) FROM Students WHERE Language <> 'English')는 영어 외 언어를 사용하는 학생 수를 계산합니다.
2. 조건 비교: 위 예시 데이터에서 영어 사용 학생은 6명(Francis, Rick, Correy, Steve, Harry 등), 그 외 언어 사용 학생은 3명입니다. 즉, 6 > 3이므로 조건식은 참(TRUE)으로 평가됩니다.
3. 결과 반환: 조건이 참이므로 두 번째 인수인 CONCAT("Name is ", Name)이 실행되어 각 행마다 "Name is [학생 이름]" 형태의 문자열이 반환됩니다. 만약 조건이 거짓이었다면 세 번째 인수인 CONCAT("Course is ", Course)가 실행되어 "Course is [과목명]" 형태의 결과가 출력되었을 것입니다.
정리
이처럼 MySQL의 IF() 함수는 단순한 값 비교뿐만 아니라, 서브쿼리(SELECT 문)를 조건으로 사용하여 집계 결과에 기반한 동적 분기 처리도 가능합니다. 이를 활용하면 복잡한 조건 로직을 하나의 쿼리 안에서 간결하게 처리할 수 있습니다.