SQL Server의 CASE 문 및 중첩 사례: T-SQL 예

⚡ 스마트 요약

CASE는 SQL Server에서 첫 번째 조건이 참으로 평가될 때 값을 반환하는 조건식입니다. 단순형과 검색형 형식을 제공하며, IF…ELSE, UPDATE, ORDER BY 내부에 중첩하여 사용할 수도 있습니다.

  • 🧭 조건부 값: CASE 표현식은 WHEN 조건 중 어느 조건이 먼저 참으로 평가되는지에 따라 값이 결정됩니다.
  • 1️⃣ 간단한 경우: 간단한 CASE 문은 하나의 표현식을 값 목록과 비교하고 각 WHEN 조건에 대해 같음 여부를 확인합니다.
  • 🔎 검색된 사례: 검색된 CASE 문은 각 WHEN 조건에 대해 별도의 부울 표현식을 평가하며, 범위 및 부등호 연산자를 지원합니다.
  • ELSE는 선택 사항입니다. WHEN 조건에 맞는 항목이 없고 ELSE가 생략된 경우, CASE 표현식은 NULL을 반환합니다.
  • 🪆 중첩: CASE 문은 다른 CASE 문 안에, 그리고 IF…ELSE 문 안에 중첩되어 다단계 논리를 구성할 수 있습니다.
  • 🔧 SELECT를 넘어서: CASE 절은 SELECT 절 외에도 UPDATE 및 ORDER BY 절과 함께 사용하여 조건부 업데이트 및 정렬을 수행합니다.

SQL Server에서 CASE 문과 중첩 CASE 문을 T-SQL 예제를 통해 살펴보세요.

실제 케이스 개요!

실생활에서도 우리는 다양한 상황의 결과에 따라 다른 행동을 취합니다. 좀 더 자세히 설명하자면, 아래 예를 살펴보겠습니다.

  • 비행기표가 100달러 미만이면 로스앤젤레스를 방문하겠습니다.
  • 항공권 가격이 100달러에서 200달러 사이라면 뉴욕에 가겠습니다.
  • 항공권 가격이 200달러에서 400달러 사이라면 유럽에 가겠습니다.
  • 그렇지 않으면 근처 관광지를 방문하는 것을 선호합니다.

위의 예시와는 별도로, 상황과 행동을 구분하여 분류하는 것을 생각해 보겠습니다.

항공권 이용 약관 조건이 참일 경우에만 동작이 수행됩니다.
Less $ 100보다 로스앤젤레스 방문
달러 사이 100에 $ 200 뉴욕 방문
달러 사이 200에 $ 400 유럽 ​​방문
위의 조건 중 어느 것도 충족되지 않음 인근 관광지

위 예시에서 볼 수 있듯이, 각 조건의 결과는 서로 다른 행동을 결정합니다. 예를 들어, 방문객은 항공권 가격이 100달러에서 200달러 사이일 때만 뉴욕을 방문하는 행동을 합니다. 마찬가지로, MS의 SQL CASE 문은 또한 서로 다른 조건의 결과에 따라 서로 다른 T-SQL 문을 실행할 수 있는 기능을 제공합니다.

SQL Server의 CASE 문이란 무엇입니까?

CASE 문 SQL 서버 는 의 확장입니다. 다른 경우라면 CASE 문은 IF…ELSE 문과 달리 최대 하나의 조건만 허용하는 것과 달리, MS SQL에서 여러 조건을 적용하여 다양한 작업을 수행할 수 있도록 합니다. CASE 문은 사용자가 정의한 조건에 해당하는 값을 반환합니다.

CASE 문을 사용하는 방법을 배워봅시다. SQL 그리고 다음 섹션에서 그 개념을 설명합니다. MS SQL에는 두 가지 유형의 CASE 문이 있습니다.

  • 간단한 사례
  • 검색된 CASE

간단한 사례

단순 사례에 대한 구문

CASE <Case_Expression>
     WHEN Value_1 THEN Statement_1
     WHEN Value_2 THEN Statement_2
     .
     .
     WHEN Value_N THEN Statement_N
     [ELSE Statement_Else]   
END AS [ALIAS_NAME]

이리:

  • 매개변수 Case_Expression은 최종적으로 Value_1, Value_2 등과 비교될 표현식을 나타냅니다.
  • 매개변수 Statement_1, Statement_2…는 Case_Expression = Value_1, Case_Expression = Value_2 등이 성립할 경우 실행될 문장을 나타냅니다.
  • 간단히 말해, 조건은 Case_Expression이 Value_N과 같은지 여부이며, 위 결과가 TRUE이면 Statement_N을 실행하는 것이 동작입니다.
  • ALIAS_NAME은 선택 사항이며 SQL Server CASE 문 결과에 부여되는 별칭 이름입니다. 주로 SQL Server SELECT 절에서 CASE를 사용할 때 사용됩니다.

단순 사례에 대한 규칙

  • Simple Case는 Case_Expression과 Value_1부터 Value_N까지의 값에 대한 등가성 검사만 허용합니다.
  • Case_Expression은 첫 번째 값(즉, Value_1)부터 순서대로 값과 비교됩니다. 실행 방식은 다음과 같습니다.
  • Case_Expression이 Value_1과 동일하면 추가 WHEN…THEN 문을 건너뛰고 CASE 실행이 즉시 종료됩니다.
  • Case_Expression이 Value_1과 일치하지 않으면, Case_Expression은 Value_2와 비교하여 동일한지 확인합니다. Case_Expression과 Value_2를 비교하는 이 과정은 Case_Expression이 Value_1, Value_2 등의 집합에서 일치하는 값을 찾을 때까지 계속됩니다.
  • 일치하는 항목이 없으면 제어는 ELSE 문으로 이동하고 Statement_Else가 실행됩니다.
  • ELSE는 선택사항입니다.
  • ELSE가 없고 Case_Expression이 어떤 값과도 일치하지 않으면 NULL이 표시됩니다.

아래 다이어그램은 간단한 사례의 실행 흐름을 보여줍니다.

단순 CASE 문이 각 WHEN 값을 순서대로 평가하는 방식을 보여주는 순서도

'라는 이름의 테이블이 있다고 가정해 봅시다.Guru아래와 같이 Tutorial_ID와 Tutorial_name 두 개의 열과 네 개의 행으로 구성된 '99' 형식의 표입니다. 우리는 이 표를 사용할 것입니다.Guru다음 예시에서는 99' 테이블을 참조하십시오.

견본 GuruTutorial_ID와 Tutorial_name 열과 4개의 행으로 구성된 99개의 테이블

쿼리 1: NO ELSE 옵션이 있는 SIMPLE CASE

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

결과: 아래 다이어그램은 ELSE 문이 없는 SIMPLE CASE의 실행 흐름을 설명합니다.

ELSE 문이 없는 간단한 CASE 문의 결과입니다. Descript각 Tutorial_name에 대한 이온

쿼리 2: ELSE 옵션이 있는 단순 CASE

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

결과: 아래 다이어그램은 ELSE가 포함된 SIMPLE CASE의 실행 흐름을 설명합니다.

ELSE를 사용한 간단한 CASE 문의 결과로, 일치하지 않는 행에 대해서는 기본 텍스트를 반환합니다.

검색된 CASE

검색된 케이스의 구문

CASE 
     WHEN <Boolean_Expression_1> THEN Statement_1
     WHEN <Boolean_Expression_2> THEN Statement_2
     .
     .
     WHEN <Boolean_Expression_N> THEN Statement_N
     [ELSE Statement_Else]   
END AS [ALIAS_NAME]

이리:

  • 매개변수 Boolean_Expression_1…은 TRUE 또는 FALSE로 평가될 표현식을 나타냅니다.
  • 매개변수 Statement_1, Statement_2…는 해당 Boolean_Expression_1, Boolean_Expression_2 결과가 TRUE일 경우 실행될 문장을 나타냅니다.
  • 요약하자면, 조건은 Boolean_Expression_1…이고, 동작은 위의 Boolean_Expression_1이 TRUE일 경우 Statement_N을 실행하는 것입니다.
  • ALIAS_NAME은 선택 사항이며 CASE 문 결과에 부여되는 별칭입니다. 주로 SELECT 절에서 CASE를 사용할 때 사용됩니다.

검색된 사례에 대한 규칙

  • 단순 사례와 달리 검색 사례는 단순히 같음 비교에만 국한되지 않고 부울 표현식도 허용합니다.
  • 부울 표현식은 첫 번째 부울 표현식(즉, Boolean_Expression_1)부터 순서대로 평가됩니다. 실행 방식은 다음과 같습니다.
  • Boolean_Expression_1이 TRUE이면 이후의 WHEN…THEN 문은 건너뛰고 CASE 실행이 즉시 종료됩니다.
  • Boolean_Expression_1이 FALSE이면 Boolean_Expression_2가 TRUE인지 평가됩니다. 이러한 부울 표현식 평가 과정은 두 표현식 중 하나가 TRUE를 반환할 때까지 계속됩니다.
  • 일치하는 항목이 없으면 제어는 ELSE 문으로 이동하고 Statement_Else가 실행됩니다.
  • 단순 사례와 마찬가지로 검색 사례에서도 ELSE는 선택 사항입니다.
  • ELSE 문이 없고 부울 표현식 중 어느 것도 TRUE를 반환하지 않으면 NULL이 표시됩니다.

아래 다이어그램은 검색된 사례의 실행 흐름을 보여줍니다.

검색된 CASE 문이 각 부울 표현식을 순서대로 평가하는 방식을 보여주는 순서도

쿼리 1: NO ELSE 옵션을 사용한 SEARCHED CASE

SELECT Tutorial_ID, Tutorial_name,
CASE 
 	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

결과: 아래 다이어그램은 ELSE가 없는 SEARCHED CASE의 실행 흐름을 설명합니다.

ELSE 문이 없는 검색된 CASE의 결과이며, 각 Tutorial_name을 다음과 일치시킵니다. Descript이온

쿼리 2: ELSE 옵션이 있는 검색된 사례

SELECT Tutorial_ID, Tutorial_name,
CASE 
	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

결과: 아래 다이어그램은 ELSE가 포함된 검색된 CASE의 실행 흐름을 설명합니다.

ELSE를 사용한 CASE 검색 결과이며, SQL 이외의 언어에 대해서는 기본 텍스트를 반환합니다.

실행 방식의 차이점: 단순 실행 방식과 검색 실행 방식

아래의 간단한 예시를 살펴보겠습니다.

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

여기서 'Tutorial_name'은 SQL의 CASE 표현식의 일부입니다. 그런 다음 'Tutorial_name' 값은 각 WHEN 값(즉, 'SQL')과 비교됩니다. 'Tutorial_name'이 WHEN 값과 일치할 때까지 이 과정이 반복됩니다.

반대로, SEARCH CASE 예제에는 CASE 표현식이 없습니다.

SELECT Tutorial_ID, Tutorial_name,
CASE 
 	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

여기서 각 WHEN 문은 자체적인 조건 부울 표현식을 가지고 있습니다. Tutorial_name = 'SQL'…과 같은 각 부울 표현식은 TRUE/FALSE로 평가되며, TRUE로 평가되는 첫 번째 부울 표현식이 나올 때까지 계속됩니다.

단순 사례와 검색 사례의 차이점

간단한 케이스 검색된 사례
CASE 키워드 바로 뒤에 CASE_Expression이 오고 WHEN 문 앞에 옵니다.

예 :
사례
WHEN 값_1 THEN 문_1…

CASE 키워드 다음에는 WHEN 문이 오고, CASE와 WHEN 사이에는 표현식이 없습니다.

예 :
어떤 경우 그러면 진술_1…

간단한 경우, 각 WHEN 문에는 VALUE 값이 존재합니다. 이러한 값들(Value_1, Value_2…)은 순차적으로 하나의 CASE_Expression과 비교됩니다. 결과는 각 WHEN 문의 TRUE/FALSE 조건에 대해 평가됩니다.

예 :
사례
WHEN 값_1 THEN 문_1…
WHEN 값_2 THEN 문_2…

검색된 케이스에서는 각 WHEN 문에 대해 Boolean_Expression이 존재합니다. 이러한 Boolean_Expression(Boolean_Expression_1, Boolean_Expression_2…)은 각 WHEN 문의 TRUE/FALSE 조건을 평가합니다.

예 :
CASE
언제 THEN 문_1…
언제 THEN 문_2…

단순 케이스는 등호 비교만 지원합니다. 즉, CASE_Expression이 VALUE_1, VALUE_2 등과 같은지 여부를 확인합니다.

예 :
사례 Value_1이 1이면 Statement_1…
위 예시에서 시스템이 수행하는 유일한 작업은 Case_Expression = Value_1인지 확인하는 것입니다.

Boolean_Expression_N을 사용하면 검색된 케이스는 부울 값을 반환하는 모든 연산을 지원합니다. 여기에는 같음 및 같지 않음 연산자가 포함됩니다.

예 :
어떤 경우 그러면 진술_1…
위 예시에서 Boolean_Expression_1은 A = B, A != B와 같이 '같음' 및 '같지 않음' 연산자를 모두 포함할 수 있습니다.

중첩된 CASE: IF ELSE의 CASE

IF…ELSE 문 안에서 CASE 문을 사용할 수 있습니다. CASE 문을 선언합니다. 변수 항공권의 경우 해당 값에 따라 분기합니다. 다음은 MS-SQL 코드 예시입니다.

DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 190;
IF @Flight_Ticket > 400
   PRINT 'Visit Nearby Tourist Location';
ELSE 
BEGIN
    SELECT
	CASE 
	WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
	WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
	WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
	END AS Location	
END

위 예시에서 CASE 문은 IF…ELSE 문 안에 중첩되어 있습니다. 먼저 IF 문이 실행되고, SQL Server에서 CASE 조건이 거짓이면 ELSE 문이 실행됩니다. ELSE 부분에는 SQL에서 중첩된 CASE 문이 포함되어 있습니다. 항공권 가격에 따라 다음 결과 중 하나가 표시됩니다.

  • 항공권 가격이 400달러를 초과하면 시스템에서 '근처 관광지 방문'이라는 안내를 출력합니다.
  • 항공권 가격이 0달러에서 100달러 사이인 경우 시스템에서 '로스앤젤레스 방문'이라고 출력합니다.
  • 항공권 가격이 101달러에서 200달러 사이일 경우 시스템에서 '뉴욕 방문'이라고 출력합니다.
  • 항공권 가격이 201달러에서 400달러 사이일 경우 시스템에서 '유럽 방문'이라는 문구를 출력합니다.

아래 결과는 중첩된 CASE 문이 ELSE 분기 내에서 실행될 때 반환되는 위치를 보여줍니다.

IF…ELSE 문 안에 CASE 문이 중첩되어 있는 경우, 티켓의 방문 위치를 출력합니다.

중첩된 CASE: CASE 내부 CASE

SQL에서는 CASE 절 안에 또 다른 CASE 절을 사용할 수 있습니다. 다음은 MS-SQL 예시 코드입니다.

DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 250;
SELECT
CASE 
WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.'
WHEN @Flight_Ticket < 400 THEN 
    	CASE 
		WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
		WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
		WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
		END	
END AS Location

위 예시에서 CASE 문은 또 다른 CASE 문 안에 중첩되어 있습니다. 시스템은 먼저 바깥쪽 CASE 문을 실행하고, Flight_Ticket이 400달러 미만이면 안쪽 CASE 문을 실행합니다. 반환되는 위치는 이전 예시와 동일한 티켓 가격 범위를 따르므로, 250달러짜리 티켓은 201~400달러 범위에 속하여 '유럽 방문'을 반환합니다.

아래 결과는 250달러 티켓에 대해 내부 CASE에서 반환된 위치 정보를 보여줍니다.

CASE 안에 또 다른 CASE가 중첩되어 실행된 결과입니다. 유럽 방문 티켓 가격은 250입니다.

업데이트가 포함된 사례

다시 말해, 우리가 '를 가지고 있다고 가정해 봅시다.Guru아래와 같이 두 열과 네 행으로 구성된 99' 테이블:

GuruCASE UPDATE 이전의 99번째 테이블은 원래 Tutorial_Name 값을 보여줍니다.

UPDATE와 함께 CASE를 사용할 수 있습니다. 다음은 MS-SQL 코드의 예입니다.

UPDATE Guru99
SET Tutorial_Name = 
	(
	CASE
	WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.'
	WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL'
	WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.'
	WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.'
	END
	)

위 예시에서는 UPDATE 문에서 CASE 절이 사용되었습니다. Tutorial_Name 값에 따라 Tutorial_Name 열은 THEN 문 값으로 업데이트됩니다.

  • Tutorial_Name이 'SQL'인 경우 Tutorial_Name을 '구조화된 쿼리 언어'로 업데이트합니다.
  • Tutorial_Name이 'PL/SQL'인 경우 Tutorial_Name을 '로 업데이트합니다.Oracle PL/SQL'.
  • Tutorial_Name이 'MSSQL'인 경우 Tutorial_Name을 '로 업데이트합니다.Microsoft SQL'.
  • Tutorial_Name이 'Hadoop'인 경우 Tutorial_Name을 'Apache Hadoop'으로 업데이트합니다.

해당 명령문을 실행하면 아래와 같이 일치하는 행이 업데이트됩니다.

CASE UPDATE 문의 실행 결과 Guru99 표

'를 조회해 보겠습니다.Guru업데이트된 값을 확인하려면 99' 테이블을 참조하세요.

GuruCASE UPDATE 후 99번째 테이블에 새로운 Tutorial_Name 값이 표시됩니다.

CASE(주문 기준)

CASE 절과 ORDER BY 절을 함께 사용할 수 있습니다. 다음은 MS-SQL 코드 예시입니다.

Declare @Order Int;
Set @Order = 1
Select * from Guru99 order by 
CASE 
	WHEN @Order = 1 THEN Tutorial_ID
	WHEN @Order = 2 THEN Tutorial_Name
	END
DESC

여기서는 CASE 절이 ORDER BY 절과 함께 사용됩니다. @Order는 1로 설정되어 있고, 첫 번째 WHEN 부울 표현식이 TRUE로 평가되므로 Tutorial_ID가 ORDER BY 조건에 따라 선택됩니다. 결과는 아래와 같습니다.

CASE 표현식을 사용한 ORDER BY 결과 (정렬 기준) GuruTutorial_ID별 99개 테이블

흥미로운 사실!

  • CASE 문은 다른 CASE 문 안에 중첩될 수 있으며, IF…ELSE 문 안에도 중첩될 수 있습니다.
  • SELECT 외에도 CASE 절은 UPDATE 및 ORDER BY와 같은 다른 SQL 절과 함께 사용할 수 있습니다.

자주 묻는 질문

IIF() 함수는 두 가지 결과를 반환하는 CASE 표현식의 축약형입니다. 조건이 참일 때는 한 값을, 거짓일 때는 다른 값을 반환합니다. 완전한 CASE 표현식은 더 유연하며 하나의 문장에서 여러 WHEN 조건을 테스트할 수 있습니다.

네. CASE 문은 값을 반환하기 때문에 SELECT 절, WHERE 절, HAVING 절, ​​GROUP BY 절에 모두 사용할 수 있습니다. WHERE 절에서 CASE 문을 사용하면 다른 열 값에 따라 다른 필터 논리를 적용할 수 있습니다.

예. SUM(), COUNT() 또는 AVG()는 조건부 집계를 수행하여 각 WHEN 조건과 일치하는 행만 합산하거나 계산합니다. 이 기법은 피벗 테이블 스타일의 요약 보고서를 작성하는 데 자주 사용됩니다.

COALESCE와 ISNULL은 리스트에서 첫 번째 NULL이 아닌 값만 반환합니다. CASE 표현식은 더 광범위합니다. 임의의 부울 조건 또는 값 일치를 평가하고 참인 첫 번째 분기의 결과를 반환합니다.

CASE 식은 단일 데이터 형식을 반환합니다. SQL Server는 모든 THEN 및 ELSE 결과의 데이터 형식 우선순위를 통해 이를 결정하므로 변환 오류를 방지하려면 모든 분기에서 호환 가능한 형식을 반환해야 합니다.

예. CASE 표현식은 뷰의 SELECT 문은 물론 저장 프로시저, 함수, 트리거 내부 어디에서든 사용할 수 있습니다. 동일한 표현식 구문이 이러한 모든 개체에서 작동합니다.

예. GitHub 부조종사 자연어 프롬프트에서 중첩 CASE 및 UPDATE 내부에 CASE를 포함한 단순 CASE 및 검색 CASE 표현식을 작성할 수 있습니다. 쿼리를 실행하기 전에 항상 WHEN 조건, 분기 순서 및 ELSE 처리를 검토하십시오.

AI 및 머신러닝 기반 도우미는 일반 영어 규칙을 간단하거나 검색된 CASE 표현식으로 변환하고, 누락된 WHEN 분기를 제안하며, 중복되는 부분을 표시합니다.ping 또는 도달할 수 없는 조건입니다. 개발자는 배포하기 전에 각 제안의 정확성을 검토합니다.

이 게시물을 요약하면 다음과 같습니다.