본문 바로가기
프로그래밍/MSSQL

[MSSQL]IIF 함수 (IIF vs CASE)

by wyatti 2023. 4. 6.

MS SQL Server 2012 이후 버전부터 iif 함수가 추가되었습니다. 이전 버전에서는 CASE문을 사용하여 처리해야 했었습니다.

 

 

 

IIF 함수 설명

sql IIF함수는 조건식을 선언해 주고 bool 식이 True(참)인지 False(거짓)인지에 따라 두 값 중 하나를 반환시켜 주는 함수입니다. IIF 함수는 간단한 경우에는 CASE문 보다 코드를 간결하게 사용할 수 있습니다. 하지만 IFF 함수는 중첩 사용이 어렵고, 복잡한 조건 분기가 필요한 경우에는 CASE 문을 사용하는 것이 좋습니다. IIF 함수는 SELECT절 내에 사용하며 이외에 사용하지 못합니다.

 

 

 

IIF 함수 장단점

  • 장점 :
    • 코드를 간결하게 작성할 수 있습니다.
    • 단순한 조건 분기에서는 가독성이 좋습니다.
  • 단점 :
    • 중첩된 IIF 함수 사용 시 가독성이 떨어집니다.
    • 복잡한 조건 분기에서는 가독성이 떨어질 수 있으며, CASE문을 사용하는 것이 더 적절합니다.
    • 조건식의 평가는 불필요한 계산을 유발할 수 있습니다. 예를 들어, IIF 함수에 복잡한 조건식을 사용하면, 모든 행에서 조건식을 평가하므로 성능상의 부담이 생길 수 있습니다.

따라서, IIF 함수는 간단한 조건 분기에선 사용하기 좋지만 복잡한 조건분기에서는 CASE문을 사용하는 것이 더 좋을 수 있습니다.

 

 

 

SQL IIF 함수 구문

IIF 함수의 구문은 아래와 같습니다.

IIF(boolean_expression, true_value, false_value)
  • boolean_expression : 평가할 조건식으로 선언해 주면 됩니다. 이 조건식을 판단하여 뒤의 결과 값이 나오게 됩니다.
  • true_value : 'boolean_expression'의 조건식이 True(참)이면 Ture(참)으로 반환할 값입니다.
  • false_value : 'boolean_expression'의 조건식이 False(거짓)이면 False(거짓)으로 반환하게 됩니다.

아래에선 성인인지 미성년자인지 예를 들어 쿼리문을 설명해 드리겠습니다.

 

SQL IIF 함수 예제

sql iif

IIF 함수 예제를 위해 위와 같은 데이터를 넣어줬습니다. 위의 데이터로 쿼리 예제를 짜보겠습니다.

 

SELECT [name]
      ,[age]
	  ,IIF(age>=20,'성인','미성년자') AS 성인여부
  FROM [Shopping].[dbo].[User]

위와 쿼리를 실행해 주게 되면 아래와 같이 값이 출력됩니다.

 

SQL IIF

 

데이터 값이 따로 출력이 되며, AS(별칭)을 사용하지 않으면 (열 이름 없음)으로 출력됩니다.

 

 

 

IIF함수 CASE함수 비교

 

SELECT [name]
      ,[age]
      ,IIF(age>=20,'성인','미성년자') AS 'IIF함수'
      ,(CASE WHEN age >= 20 THEN '성인' ELSE '미성년자' END) AS 'CASE문'
  FROM [Shopping].[dbo].[User]

 

위의 쿼리는 CASE와 IIF의 비교해 주는 쿼리입니다. 결과적으로 같은 데이터 값이 나오지만 가독성면에서 SQL CASE 보다는 SQL IIF가 더 가독성면에서 좋습니다.

IIF vs CASE 비교

 

SQL IIF 중첩 사용

 

SELECT [name]
      ,[age]
      ,IIF(age>=20,'성인', IIF(age < 20, '미성년자','')) AS 'IIF 중첩 사용'
  FROM [Shopping].[dbo].[User]

위의 IIF 중첩쿼리 예제입니다.

 

SQL IIF 중첩 사용

위의 IIF 중첩 쿼리를 실행해 주면 나오는 데이터 결과 값입니다.

댓글