MSSQL 조건문 CASE, IF ELSE

조건문이란?

조건문이란 특정조건들을 기준하여 다르게 작동하도록 하는 프로그래밍또는 데이터 조회에 아주 기본이 되는 내용입니다.

매우 중요한 내용이기에 잘 알아두시면 좋을 것 같습니다.

MSSQL의 대표적인 조건문으로 CASE문, IF ELSE문이 있습니다.

 

CASE

데이터를 출력할 때 조건에 따른 출력을 위해 사용하는 조건문입니다.

조건식을 조건으로 결과 출력

문법

SELECT (CASE WHEN [EXPR1] THEN [RESULT1]
             WHEN [EXPR2] THEN [RESULT2]
             WHEN [EXPR3] THEN [RESULT3]
             ELSE [RESULT4]
        END) AS CASE_RESULT
       
/*
  [EXPR1~4]: 조건식
  [RESULT1~4]: 최종 OUTPUT(결과)
  [EXPR1]이 참이면 [RESULT1]
  [EXPR1]이 거짓이고 [EXPR2]가 참이면 [RESULT2]
  [EXPR1,2]이 거짓이고 [EXPR3]이 참이면 [RESULT3]
  [EXPR1,2,3]이 거짓이면 [RESULT 4]
*/

예시

SELECT NICK_NAME
     , (CASE WHEN POINT >= 90 THEN 'A'
             WHEN POINT >= 80 THEN 'B'
             WHEN POINT >= 70 THEN 'C'
             ELSE 'D'
        END) AS GRADE
  FROM POINT_TABLE

/*
  POINT가 90점 이상이면 'A'
  90점 미만, 80점 이상이면 'B'
  80점 미만, 70점 이상이면 'C'
  70점 미만이면 'D' 등급의 GRADE가 출력됩니다.
*/

값 비교를 조건으로 결과 출력

문법

SELECT (CASE [TARGET_DATA] WHEN [VALUE1] THEN [RESULT1]
                           WHEN [VALUE2] THEN [RESULT2]
                           WHEN [VALUE3] THEN [RESULT3]
                           ELSE [RESULT4]
        END) AS CASE_RESULT
        
/*
  [TARGET_DATA]: 기준데이터
  [VALUE1~3]: 비교데이터
  [RESULT1~4]: 최종 OUTPUT(결과)
  [TARGET_DATA]가 [VALUE1]과 같으면 [RESULT1]
  [TARGET_DATA]가 [VALUE2]와 같으면 [RESULT2]
  [TARGET_DATA]가 [VALUE3]과 같으면 [RESULT3]
  [TARGET_DATA]가 [VALUE1~3]모두와 같지않으면 [RESULT4]
*/

예시

SELECT *
  FROM POINT_TABLE
 WHERE EXAM_SEQ = (CASE @CLASS WHEN 'A' THEN 1
                               WHEN 'B' THEN 2
                               WHEN 'C' THEN 3
                   END)

/*
  @CLASS값이 'A'이면 EXAM_SEQ가 1번인 데이터를 조회합니다.
  @CLASS값이 'B'이면 EXAM_SEQ가 2번인 데이터를 조회합니다.
  @CLASS값이 'C'이면 EXAM_SEQ가 3번인 데이터를 조회합니다.
*/

 

IF ELSE

IF ELSE는 쿼리 내 분기를 나누기 위해 사용하는 조건문입니다.
프로시저나 쿼리 내에서 조건을 기준으로 분기를 타는데 많이 사용합니다.

문법

IF ([EXPR1])
BEGIN
    [QUERY1]...
END
ELSE IF ([EXPR2])
BEGIN
    [QUERY2]
END
ELSE
BEGIN
    [QUERY3]
END

/*
  [EXPR1,2]: 조건식
  [QUERY1~3]: 실행할 쿼리
  [EXPR1]이 참이면 [QUERY1]을 실행합니다.
  [EXPR1]이 거짓이고 [EXPR2]이 참이면 [QUERY2]를 실행합니다.
  [EXPR1,EXPR2]둘다 거짓이면 [QUERY3]을 실행합니다.
*/

예시

IF (@WORK_GB = 'PERSON')
BEGIN
    SELECT *
      FROM PERSON_TABLE
END
ELSE IF (@WORK_GB = 'CLASS')
BEGIN
    SELECT *
      FROM CLASS_TABLE
END
ELSE
BEGIN
    SELECT *
      FROM GRADE_TABLE
END

/*
  @WORK_GB가 'PERSON' 이면 PERSON_TABLE에서 데이터 조회
  @WORK_GB가 'CLASS' 면 PERSON_TABLE에서 데이터 조회
  @WORK_GB가 'PERSON','CLASS' 둘다 아니면 GRADE_TABLE에서 데이터 조회
*/