Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL IF() 함수의 인수로 SELECT 문을 사용하는 방법

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 문)를 조건으로 사용하여 집계 결과에 기반한 동적 분기 처리도 가능합니다. 이를 활용하면 복잡한 조건 로직을 하나의 쿼리 안에서 간결하게 처리할 수 있습니다.