DB

[MySQL] IF 함수로 조건 분기 처리하는 법

인생아 2025. 7. 25. 01:50
반응형

MySQL에서 데이터를 조건에 따라 다르게 처리하려면 반드시 알아야 할 것이 바로 IF 함수이다. IF()는 프로그래밍 언어의 if문과 비슷한 구조를 가지며, 조건식이 참인지 거짓인지에 따라 서로 다른 값을 반환하는 매우 유용한 제어 함수이다.

IF 함수 기본 문법

IF(조건식, 참일 때 반환값, 거짓일 때 반환값)

조건식이 TRUE면 두 번째 인자를 반환하고, 그렇지 않으면 세 번째 인자를 반환한다.

예제 1: 점수에 따른 합격 여부 표시

SELECT name, score,
       IF(score >= 60, '합격', '불합격') AS 결과
FROM exam_result;

score가 60점 이상이면 '합격', 아니면 '불합격'을 반환한다.

IF 함수는 SELECT 문 어디서나 사용 가능

  • SELECT 절에서 조건 분기 출력
  • WHERE 절 내부의 조건 처리
  • ORDER BY 절에서 정렬 조건 설정
  • UPDATE 문에서 컬럼 값 조건 처리
  • SET 절에서도 변수 제어 가능

예제 2: WHERE 절에서 사용

SELECT *
FROM orders
WHERE IF(status = 'cancel', FALSE, TRUE);

주문 상태가 cancel이면 결과에서 제외하고, 그 외는 포함하는 조건 처리다.

반응형

IF 함수는 중첩 사용도 가능

IF 문을 중첩하면 복잡한 조건 분기도 표현할 수 있다.

예제 3: 등급 매기기 (중첩 IF)

SELECT name, score,
       IF(score >= 90, 'A',
          IF(score >= 80, 'B',
             IF(score >= 70, 'C', 'F'))) AS 등급
FROM students;

점수에 따라 A/B/C/F 등급을 반환하며, 실무에서 자주 쓰이는 패턴이다.

IF 함수 vs WHERE 조건 비교

IF()는 반환값을 선택할 때 쓰이고, WHERE은 행 자체의 필터링 조건이다.

예제 4: 할인율 계산

SELECT customer_id, amount,
       IF(amount >= 50000, amount * 0.9, amount) AS 할인적용금액
FROM purchases;

금액이 크면 자동으로 할인을 적용하는 구조를 만들 수 있다.

실무 활용 팁

  • 쿼리 결과를 보기 좋게 표현할 때 필수적이다.
  • 가공 컬럼 생성 시 많이 사용되며, IF 없이 CASE문으로 바꿀 수도 있다.
  • 조건 분기가 복잡해질수록 IF보다 CASE가 가독성에서 유리할 수 있다.

주의사항

  • 문자열 조건은 '값' 형태로 반드시 따옴표를 써야 한다.
  • NULL 비교 시에는 IS NULL, IS NOT NULL 구문이 더 적합하다.
  • IF()는 첫 번째 인자가 논리값을 반환해야 한다. 수치 비교나 논리 연산자가 꼭 필요하다.

정리

  • IF()는 SQL에서 조건에 따라 다른 값을 반환하는 제어 함수이다.
  • SELECT, WHERE, ORDER BY 등 다양한 구문 안에서 자유롭게 사용된다.
  • 실무에서는 등급 분류, 상태 표시, 금액 조건 처리 등에 자주 사용된다.
  • 중첩 IF를 통해 여러 조건을 순차적으로 평가할 수 있지만 복잡하면 CASE문으로 바꾸는 것이 좋다.

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/control-flow-functions.html#function_if

 

반응형