SQL을 작성하다 보면 "조회 구문 안에서 조건문을 어떻게 써야 하지?"라는 고민을 많이 하게 됩니다.
MySQL에서는 IF와 CASE를 상황에 맞게 다르게 사용할 수 있는데요, 오늘은 그 차이를 정리해보겠습니다.
IF ... ELSEIF ... END IF (제어문)
MySQL 프로시저나 트리거에서 사용하는 절차적 조건문입니다.
IF score >= 90 THEN
SET grade = 'A';
ELSEIF score >= 80 THEN
SET grade = 'B';
ELSE
SET grade = 'F';
END IF;
특징
- 프로그래밍 언어의 if-else 구조와 유사
- 프로시저, 함수, 트리거 내부에서만 사용 가능
- 일반 SELECT 같은 조회 구문 안에서는 사용할 수 없습니다.
IF(expr, true_val, false_val) (함수형 IF)
조회 쿼리 안에서는 IF 함수를 이용할 수 있습니다.
삼항 연산자처럼 "조건 ? 참값 : 거짓값" 구조라고 생각하면 쉽습니다.
SELECT
name,
IF(score >= 60, '합격', '불합격') AS result
FROM exam;
특징
- 조회문(SELECT) 안에서 사용 가능
- 조건이 단순할 때 간단하게 쓰기 좋음\
CASE WHEN ... THEN ... ELSE ... END
표준 SQL에서 제공하는 조건문으로, MySQL뿐만 아니라 대부분의 DBMS에서 지원합니다.
SELECT
name,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'F'
END AS grade
FROM exam;
특징
- 다중 분기 처리에 적합
- SQL 표준이므로 이식성이 뛰어남
- 조회 구문, WHERE, GROUP BY, ORDER BY 등 어디서든 사용 가능
결론
- 프로시저 내부
- IF ... ELSEIF ... END IF 제어문 사용 가능
- CASE 구문 역시 사용 가능 (SELECT, SET 구문 안에서도 활용 가능)
- 조회 구문(SELECT 등)
- 제어문 IF ... ELSEIF는 사용할 수 없음
- 대신 IF(expr, a, b) 함수와 CASE 구문을 사용할 수 있음
따라서,
- 단순 분기에는 IF(expr, a, b) 함수가 간단
- 다중 분기에는 CASE 구문이 가독성과 호환성 측면에서 더 적합
- 프로시저 로직 제어에는 IF 구문을 많이 쓰지만, CASE도 동일하게 활용 가
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| MySQL 제약조건(Constraints) 정리 (2) | 2025.08.28 |
|---|---|
| MySQL 조건문: 흐름 제어 vs 단순 표현식 (2) | 2025.08.28 |
| MySQL에서 SELECT ... INTO 구문 이해하기 (1) | 2025.08.28 |
| MySQL 트리거: BEFORE vs AFTER (0) | 2025.08.23 |
| MySQL 중첩 트리거와 롤백 동작 (0) | 2025.08.23 |