SQL 조건문 : IF, CASE

SQL에서는 IF 함수CASE 표현식을 사용하여 조건문 을 구현할 수 있습니다.

조건문 사용 시 DBMS에 따라 주의해서 사용하여야 합니다.

  • CASE문은 표준 SQL의 일부로, 대부분의 DBMS에서 지원을 합니다.
  • 반면 IF 함수는 MySQL에서는 사용이 되지만 Oracle이나 PostgreSQL에서는 작동되지 않습니다.
  • 표준 SQL에 관련 cheat sheet는 글 하단에 링크를 참고 해주세요

조건문 IF

IF의 사용법

IF(condition, true_value, false_value)

IF문을 사용한 쿼리 예

SELECT IF(order_amount > 1000, 'High', 'Low') AS order_category 
FROM orders;

orders 테이블의 order_amount가 1000보다 크면 “High” 같거나 낮으면 “Low”로 구분하는 쿼리 입니다.

이중 IF문 사용한 쿼리 예

SELECT
   order_id,
   order_amount,
   IF(order_amount > 1000, 'High', IF(order_amount > 500, 'Medium', 'Low')) AS order_category
FROM
   orders;

order_amount가 1000보다 큰 경우 order_category가 ‘High’로 설정됩니다.
order_amount가 500~1000 사이인 경우 order_category가 ‘Medium’으로 설정됩니다.
그렇지 않으면 order_category가 ‘Low’로 설정됩니다.

CASE WHEN

CASE 사용법

CASE
   WHEN condition1 THEN result1
   WHEN condition2 THEN result2
   ...
   ELSE default_result
END

CASE : CASE 표현식을 시작하는 키워드입니다.
WHEN 조건 THEN 결과 : 조건과 해당 조건이 참인 경우 해당 결과를 지정합니다.
ELSE 디폴트 값 : 선택사항. 조건 중 어느 것도 true가 아닌 경우 기본 결과를 지정합니다
END : CASE 표현식을 종료하는 키워드입니다.

IF 함수와 달리 괄호를 사용하지 않습니다.

CASE를 사용한 쿼리 예

CASE 표현식은 IF 함수와 동일한 조건문인데 형식만 다릅니다.

IF문을 먼저 보면 아래와 같고

SELECT IF(order_amount > 1000, 'High', 'Low') AS order_category FROM orders;

동일한 기능을 가진 조건문을 CASE 표현식으로 아래와 같이 구현할 수 있습니다.

SELECT
   CASE WHEN order_amount > 1000 THEN 'High' ELSE 'Low' END AS order_category
FROM
   orders;

위 둘의 쿼리는 동일한 결과를 반환합니다.

CASE 표현식을 SUBSTRING, LIKE 문 등을 활용하여 다음과 같은 쿼리를 작성할 수도 있습니다.

SELECT restaurant_name,
       addr,
       CASE WHEN addr LIKE '%경기도%' THEN '경기도'
            WHEN addr LIKE '%특별%' OR addr LIKE '%광역%' THEN SUBSTRING(addr, 1, 5)
            ELSE SUBSTRING(addr, 1, 2) END "변경된 주소"
FROM food_orders;

주소에 “경기도”가 포함되어 있을 때는 “경기도”로 출력하고
“특별” 혹은 “광역”이 포함되어 있을 때는 앞 5글자를 출력하고
그 외에는 앞 두 글자를 출력하도록 합니다.

표준 SQL cheat sheet 참고 : Standard SQL Functions Cheat Sheet | LearnSQL.com

Leave a Comment

목차