2.1 CASE 문

SQL에서 명령문을 작성하는 방법에는 두 가지가 있습니다 CASE. 첫 번째 항목은 Java 언어의 스위치처럼 보이고 두 번째 형식은 복수형에 가깝습니다 if-else.

스위치의 아날로그 인 첫 번째 옵션부터 시작하겠습니다. 일반적인 형식은 다음과 같습니다.

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

와 매우 유사하지만 switch단어만 약간 다릅니다.

SQL 자바
케이스 x 스위치(x) {
때 값 케이스 값:
그런 다음 결과 반환 결과;
그렇지 않으면 결과 기본값: 결과 반환;
}

Java에서 SQL로 예제를 번역해 보겠습니다.

자바 SQL
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

2.2 CASE 문의 두 번째 버전

두 번째 버전의 연산자도 있는데 CASE위에서 언급한 것처럼 복수형에 더 가깝습니다 if-else. 일반적인 형식은 다음과 같습니다.

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

여기에서 조건은 단순히 순차적으로 확인되며, 그 중 하나라도 참이면 지정된 결과가 반환됩니다. 어떤 조건도 참이 아니면 에 지정된 값입니다 ELSE.

Java에서 SQL로 예제를 번역해 보겠습니다.

자바 SQL
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

2.3 CASE 문을 사용하여 문제 해결

몇 가지 흥미로운 쿼리를 적어 보겠습니다. "EXPIRED!" 라는 단어를 추가하는 작업이 있었습니다. 작업 표의 과거 작업 이름으로 . 로 쉽게 할 수 있습니다 CASE.

마감일 필드 의 경우 두 번째 버전의 진술처럼 보입니다 CASE.


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

연산자를 사용하는 전체 쿼리의 예 CASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

이 쿼리의 결과는 다음과 같습니다.

ID employee_id 이름 마감 시간
1 1 만료! 프런트엔드의 버그 수정 2022-06-01
2 2 백엔드의 버그 수정 2022-06-15
5 커피를 사다 2022-07-01
4 5 커피를 사다 2022-08-01
5 5 커피를 사다 2022-09-01
6 (없는) 사무실을 청소하다 (없는)
7 4 즐거운 삶 (없는)
8 6 즐거운 삶 (없는)