IT/MSSQL

[MSSQL] 조건문 (CASE WHEN, IF) + PRINT

유자애플 2020. 3. 20. 17:15
반응형

오늘의 주제는 조건문입니다.

 

사용하기 위한 임시테이블입니다.

Create Table #TEST1

( Name Varchar(20), --이름

age Int, --나이

Assets Int, --자산

Liabilities Int, --부채

job Nvarchar(10) --직업 )

 

Insert Into #TEST1 values ('이희은', 28, 3000, 1300, '선생님')

Insert Into #TEST1 values ('최종은', 27, 5000, 1300, '학원강사')

Insert Into #TEST1 values ('이수민', 31, 2000, 2300, '선생님')

Insert Into #TEST1 values ('최덕희', 27, 1000, 3000, '연구원')

Insert Into #TEST1 values ('이정훈', 36, 2000, 1400, '학원강사')

 

1. CASE WHEN

 

SELECT Name,Liabilities,

CASE WHEN Liabilities > 2000 THEN '심각'

                                         ELSE '여유'

END AS '위험단계' FROM #TEST1

 

위 쿼리를 실행하면 이런식으로 결과가 나옵니다.

하나의 조건문을 하였기 때문에 참과 거짓으로 밖에 할 수 없습니다.

 

그렇다면 좀 더 세분화 하기 위해서는 어떻게 해야될까요?

 

 

SELECT Name,Liabilities,

(CASE WHEN Liabilities>= '3000' THEN '매우높은위험' WHEN

(Liabilities>= '2500' AND Liabilities < '3000') THEN '다소위험' WHEN

(Liabilities>= '2000' AND Liabilities < '2500') THEN '보통위험' WHEN

(Liabilities>= '1500' AND Liabilities < '2000') THEN '낮은위험'

ELSE '매우낮은위험' END) AS '위험단계' FROM #TEST1

 

위 처럼 다중으로 CASE 문을 써주면 위의 결과 같이 세분화 하여 출력할 수 있습니다.

 

 

2. IF

 

DECLARE @NUM INT, @NAME nvarchar(10)

SET @NUM = (select age from #TEST1 where Name = '이수민')

SET @NAME = (select name from #TEST1 where Name = '이수민')

IF(@NUM = 30)

PRINT @NAME + '은 30입니다.'

ELSE IF(@NUM=40)

PRINT @NAME + '은 40입니다'

ELSE

PRINT @NAME + '은 30이나 40이 아닙니다.'

위의 쿼리문을 실행하면 이와 같이 결과가 나옵니다.

이수민의 나이는 31이기 때문에 30이나 40살은 아닌거죠?

 

여기서 PRINT가 나오는데 PRINT 문은 메세지를 응용 프로그램으로 반환하는데 사용됩니다.

PRINT 문은 매개 변수로 문자 또는 유니코드 문자열 식을 사용하여 응용 프로그램에 이 문자열을 메세지로 반환합니다.

그래서 간단한 예문을 가져왔습니다. PRINT문은 SELECT 문과 어떤 식으로 다른지

 

 

DECLARE @NUM INT, @NAME nvarchar(10)

SET @NUM = (SELECT age FROM #TEST1 WHERE Name = '이수민')

SET @NAME = (SELECT name FROM #TEST1 WHERE Name = '이수민')

PRINT @NUM

PRINT @NAME

 

PRITN은 위와 같이 메세지 형태로 변환되어 한번에 반환해줍니다.

 

 

DECLARE @NUM INT, @NAME nvarchar(10)

SET @NUM = (SELECT age FROM #TEST1 WHERE Name = '이수민')

SET @NAME = (SELECT name FROM #TEST1 WHERE Name = '이수민')

SELECT @NUM

SELECT @NAME

 

근데 SELECT 문의 경우 SELECT 쿼리마다 반환하기 때문에 두개의 쿼리를 실행 했기 때문에 두개의 출력문이 존재하게 됩니다.

 

그리고 PRINT문의 조심해야 할 점을 설명하겠습니다.

 

 

 

 

DECLARE @NUM INT, @NAME nvarchar(10)

SET @NUM = (SELECT age FROM #TEST1 WHERE Name = '이수민')

SET @NAME = (SELECT name FROM #TEST1 WHERE Name = '이수민')

IF(@NUM = 30)

PRINT 30

PRINT @NAME + '은 30입니다.'

 

 

조건문 안에 PRINT 문으로 '30' 이라고 지정할 경우 PRINT 문이 반응하여 조건을 참으로 인식하여 그문을 실행시켜버립니다.

 

그래도 IF문만 쓸경우 발생하고 ELSE IF나 ELSE가 들어가면 오류가 나기 때문에 그렇게 많이 보는 것은 아닐겁니다.

그러나 코드가 길어지고 그러다 보면 실수 할 수 있기 때문에 적어습니다.

 

반응형