MySQL 문법 및 예제 정리 - IF, IFNULL, CASE, COALESCE
MySQL의 조건문과 제어 흐름 함수는 쿼리 내에서 조건에 따라 다른 값을 반환하고 논리 흐름을 제어하는 핵심 도구다. 이 글에서는 IF, IFNULL, NULLIF, CASE, COALESCE의 문법과 실전 활용 패턴을 정리한다. 문법과 동작 설명은 MySQL 8.4 Reference Manual을 기준으로 확인했다.1
MySQL의 조건문 및 제어 흐름 함수 정리
주요 조건문 및 제어 흐름 함수:
- IF: 단순한 조건문을 처리하며, 조건에 따라 다른 값을 반환합니다.
- IFNULL: 값이 NULL일 때, 지정된 기본 값을 반환합니다.
- NULLIF: 두 값이 같으면 NULL을 반환하고, 다르면 첫 번째 값을 반환합니다.
- CASE: 다중 조건문을 처리하며, 여러 조건에 따라 다른 값을 반환합니다.
- COALESCE: 여러 인자 중 첫 번째 NULL이 아닌 값을 반환합니다.
1. IF 함수
IF()함수는 단순한 조건문을 처리하는 함수입니다.-
IF는 주어진 조건이 참일 경우와 거짓일 경우 각각의 값을 반환합니다. - 문법:
condition: 평가할 조건value_if_true: 조건이 참일 때 반환할 값value_if_false: 조건이 거짓일 때 반환할 값
IF(condition, value_if_true, value_if_false)
- 예시:
# 설명: 직원의 `salary`가 5000보다 크면 `'High'`, 작거나 같으면 `'Low'`를 반환합니다.
SELECT employee_name,
IF(salary > 5000, 'High', 'Low') AS salary_level
FROM Employees;
2. IFNULL() 함수
IFNULL()함수는 NULL 값 처리에 사용됩니다.- NULL 값이 있을 경우 대신 반환할 값을 지정할 수 있습니다.
- 문법:
expression: 평가할 값value_if_null:expression이 NULL일 때 반환할 값
IFNULL(expression, value_if_null)
- 예시:
# 설명: `discount` 값이 **NULL**이면 **0**을 반환하고, 그렇지 않으면 원래 값을 반환합니다.
SELECT product_name,
IFNULL(discount, 0) AS discount
FROM Products;
3. NULLIF 함수
NULLIF()함수는 두 개의 값이 동일할 때 NULL을 반환합니다.- 서로 다른 값이면 첫 번째 값을 그대로 반환합니다.
- 문법:
expression1: 비교할 첫 번째 값expression2: 비교할 두 번째 값
NULLIF(expression1, expression2)
- 예시:
# 설명: `delivery_time`이 `'00:00:00'`과 같으면 **NULL**을 반환하고, 그렇지 않으면 원래 값을 반환합니다.
SELECT order_id,
NULLIF(delivery_time, '00:00:00') AS delivery_time
FROM Orders;
4. CASE 표현식
CASE는 여러 조건을 검사하여 조건에 맞는 값을 반환하는 다중 조건문입니다.- 이는
IF함수보다 복잡한 조건을 처리하는 데 유용합니다. - 문법:
CASE WHEN 방식:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result_default
END
CASE 표현식 방식:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE result_default
END
- 예시: CASE WHEN 방식
# 설명: `salary`가 7000보다 크면 `'A'`, 5000보다 크면 `'B'`, 그렇지 않으면 `'C'`를 반환합니다.
SELECT employee_name,
CASE
WHEN salary > 7000 THEN 'A'
WHEN salary > 5000 THEN 'B'
ELSE 'C'
END AS salary_grade
FROM Employees;
- 예시: CASE 표현식 방식
# 설명: `department_id`가 1이면 `'HR'`, 2이면 `'Engineering'`, 그 외에는 `'Other'`를 반환합니다.
SELECT employee_name,
CASE department_id
WHEN 1 THEN 'HR'
WHEN 2 THEN 'Engineering'
ELSE 'Other'
END AS department_name
FROM Employees;
5. COALESCE() 함수
COALESCE()함수는 여러 인자 중 NULL이 아닌 첫 번째 값을 반환하는 함수입니다.- 이 함수는 여러 열 중 값이 있는 첫 번째 값을 반환할 때 유용합니다.
- 문법:
# `expression1, expression2, ..., expressionN`: NULL 여부를 확인할 여러 값을 나열합니다.
COALESCE(expression1, expression2, ..., expressionN)
- 예시:
# 설명: `phone_number`가 NULL이면 `mobile_number`를 반환하고, 그마저도 NULL이면 `'No contact'`을 반환합니다.
SELECT employee_id,
COALESCE(phone_number, mobile_number, 'No contact') AS contact_info
FROM Employees;
주의할 점과 한계
IF, IFNULL, NULLIF, CASE, COALESCE는 문법이 단순한 대신 반환 타입과 평가 방식에 제약이 있다. 공식 문서에 명시된 범위에서만 정리하면 다음과 같다.
NULLIF()는 첫 인자를 두 번 평가할 수 있다: 두 인자가 다르면expr1을 두 번 평가하므로, 부작용이 있거나 비용이 큰 표현을 인자로 넣는 것은 피한다.1- 반환 타입은 인자 타입의 집계 결과다:
IFNULL(),COALESCE(),CASE는 결과 타입을 인자 타입들의 집계로 결정한다. 숫자와 문자열을 섞으면VARCHAR등 의도와 다른 타입이 되는데, 임시 테이블에 저장할 때 이 차이가 드러난다. (IFNULL(1, 'test')의 결과 타입이VARBINARY로 잡히는 것이 문서화된 예다.)12 NULL비교에=를 쓸 수 없다:NULL과의 산술 비교는 항상NULL이므로,NULLIF(x, NULL)은 참이 되는 조건이 없어NULL대신x를 그대로 반환한다.NULL여부는IS NULL/IS NOT NULL로 판정한다.3- 콜레이션 불일치로 거부될 수 있다: 이 함수들에 시스템 변수를 인자로 넘기면
Illegal mix of collations오류로 쿼리가 거부될 수 있으며, 이 경우CAST로 문자셋과 콜레이션을 맞춰야 한다.1
댓글남기기