조건문이란?
조건문이란 특정조건들을 기준하여 다르게 작동하도록 하는 프로그래밍또는 데이터 조회에 아주 기본이 되는 내용입니다.
매우 중요한 내용이기에 잘 알아두시면 좋을 것 같습니다.
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에서 데이터 조회
*/