MySQL에서 IF() 함수 안에 서브쿼리(하위 쿼리)를 사용할 때는 반드시 서브쿼리를 괄호(parenthesis)로 감싸야 합니다. 그렇지 않으면 문법 오류가 발생합니다.
기본 문법
서브쿼리를 괄호로 묶는 기본적인 문법은 다음과 같습니다.
SELECT IF((SELECT COUNT(*) FROM yourTableName), 'Yes', 'No') AS anyAliasName;
위 쿼리는 테이블에 레코드가 하나라도 존재하면 'Yes'를, 존재하지 않으면 'No'를 반환합니다.
예제 테이블 생성
문법을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 아래 쿼리로 SelectIfDemo라는 이름의 테이블을 생성합니다.
mysql> CREATE TABLE SelectIfDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(10) -> ); Query OK, 0 rows affected (1.03 sec)
데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO SelectIfDemo(Name) VALUES('John');
Query OK, 1 row affected (0.21 sec)
mysql> INSERT INTO SelectIfDemo(Name) VALUES('Carol');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO SelectIfDemo(Name) VALUES('Larry');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO SelectIfDemo(Name) VALUES('Bob');
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO SelectIfDemo(Name) VALUES('Sam');
Query OK, 1 row affected (0.15 sec)저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM SelectIfDemo;
실행 결과는 다음과 같습니다.
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Carol | | 3 | Larry | | 4 | Bob | | 5 | Sam | +----+-------+ 5 rows in set (0.00 sec)
서브쿼리를 괄호로 묶어 실행하기
이제 서브쿼리를 괄호 안에 올바르게 묶어서 사용하는 방법을 확인해 보겠습니다. 핵심은 (select count(*) from SelectIfDemo)처럼 서브쿼리 전체를 괄호로 감싸는 것입니다.
mysql> SELECT IF((SELECT COUNT(*) FROM SelectIfDemo), 'Yes', 'No') AS Result;
테이블에 레코드가 존재하므로 다음과 같이 'Yes'가 출력됩니다.
+--------+ | Result | +--------+ | Yes | +--------+ 1 row in set (0.00 sec)
정리
MySQL에서 서브쿼리를 조건문이나 다른 표현식 내부에 사용할 때는 반드시 괄호로 묶어야 한다는 점을 기억하세요. 이는 MySQL 파서가 서브쿼리의 시작과 끝을 명확하게 인식할 수 있도록 하는 필수 규칙입니다. 특히 IF(), CASE, WHERE 절 등에서 서브쿼리를 활용할 때 이 규칙을 지키면 문법 오류를 예방할 수 있습니다.