공부/인프런 - Rookiss

Part 5-2-6. SQL 입문 : CASE

셩잇님 2024. 2. 5. 12:39
반응형

 

 

💅 SQL 입문

 

 지난 시간에는 DATETIME을 이용하여 시간, 시간 연산, 시간 범위 등 시간과 관련된 다양한 내용에 대해서 알아보았다. 오늘은 CASE문에 대해서 학습해 볼 것이다. 

 


 

🧑‍⚖️ 첫 번째 방법

 

 C#에서 사용하는 switch-case문과 같은 방법이다.

 

SELECT birthMonth,
	CASE birthMonth -- 여기서부터
		WHEN 1 THEN N'겨울'
		WHEN 2 THEN N'겨울'
		WHEN 3 THEN N'봄'
		WHEN 4 THEN N'봄'
		WHEN 5 THEN N'봄'
		WHEN 6 THEN N'여름'
		WHEN 7 THEN N'여름'
		WHEN 8 THEN N'여름'
		WHEN 9 THEN N'가을'
		WHEN 10 THEN N'가을'
		WHEN 11 THEN N'가을'
		WHEN 12 THEN N'겨울'
		ELSE N'몰라요'
	END -- 여기까지의 결과를
	AS birthSeason -- birthSeason 으로 칭하겠다.
FROM players;

 

위의 코드는 birthMonth와 birthSeason 열을 출력하는 코드이다.

 



  • CASE + 값을 따질 열
  • WHEN + 값 : if(값)
  • THEN + 참이면 실행할 내용
  • ELSE : (C# switch-case 의 default 와 같음)

 

CASE birthMonth WHEN 3 은 if(birthMonth == 3) 과도 같다. THEN은 이 if문이 참일 때 실행하는 부분과도 같다.

 

  • C#에서의 switch-case 와는 달리 WHEN에 해당되면 그 THEN 을 실행하고 바로 종료된다. C#에서는 그 밑에도 다 실행되기 때문에 break가 필요함.
  • SELECT 문 말고도 다른 예약어 안에서도 쓰일 수 있다.

 

🧑‍⚖️  번째 방법

 

 비교 연산자를 사용하는 방법이다.

 

SELECT birthMonth,
	CASE
		WHEN birthMonth <= 2 THEN N'겨울'
		WHEN birthMonth <= 5 THEN N'봄'
		WHEN birthMonth <= 8 THEN N'여름'
		WHEN birthMonth <= 11 THEN N'가을'
		ELSE N'겨울'
	END 
	AS birthSEASON
FROM players;

 

 비교 연산자를 이용하여 위와 같이 구분하여 사용할 수 있다. 결과는 첫 번째 코드와 동일한 값을 나타낸다.

 


 

🧑‍⚖️ NULL

 

SELECT birthMonth,
	CASE birthMonth
		WHEN 1 THEN N'겨울'
		WHEN 2 THEN N'겨울'
		WHEN 3 THEN N'봄'
		WHEN 4 THEN N'봄'
		WHEN 5 THEN N'봄'
	END 
	AS birthSeason
FROM players;

 

 만약 값이 6 이상이면 WHEN에 해당하는 것이 없고 ELSE문 또한 없기 때문에 NULL 값으로 출력이 된다.

SELECT birthMonth,
	CASE
		WHEN birthMonth <= 2 THEN N'겨울'
		WHEN birthMonth <= 5 THEN N'봄'
		WHEN birthMonth <= 8 THEN N'여름'
		WHEN birthMonth <= 11 THEN N'가을'
		WHEN birthMonth IS NULL THEN N'몰라요'
		ELSE N'겨울'
	END 
	AS birthSEASON
FROM players;

 

NULL은 이전시간에 학습한 것과 같이 값 자체와 비교하는 것이 불가능하기 때문에 IS NULL 을 이용하여 사용하여야 한다.

 



반응형