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

실제 케이스 개요!

다시 말하지만, 실생활에서 우리는 다양한 조건의 결과에 따라 다양한 행동을 수행합니다.

더 자세히 설명하려면 아래 예를 고려하십시오.

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

아래의 위 예와 별도로 Condition 및 Action을 분류하는 것을 고려해 보겠습니다.

조건 – 항공권 수행된 작업, 조건이 다음과 같은 경우에만 TRUE
Less $ 100보다 로스앤젤레스 방문
달러 사이 100에 $ 200 뉴욕 방문
달러 사이 200에 $ 400 유럽 ​​방문
위의 조건 중 어느 것도 충족되지 않음 인근 관광지

위의 예에서 서로 다른 조건의 결과가 별도의 작업을 지배하는 것을 볼 수 있습니다. 예를 들어 방문자는 항공권 가격이 $100에서 $200 사이인 경우에만 뉴욕을 방문하는 행위를 수행합니다.

마찬가지로 MS SQL CASE 문은 다양한 조건의 결과에 따라 다양한 T-SQL 문을 실행하는 조치를 취하는 기능도 제공합니다.

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

SQL Server의 CASE 문 IF…ELSE 문의 확장입니다. 최대 하나의 조건만 허용되는 IF...ELSE와 달리 CASE를 사용하면 사용자가 여러 조건을 적용하여 MS SQL에서 다양한 작업 집합을 수행할 수 있습니다. 사용자가 정의한 조건과 관련된 해당 값을 반환합니다.

다음 섹션에서는 SQL에서 Case를 사용하는 방법과 개념에 대해 알아보겠습니다.

In MS의 SQL, CASE에는 두 가지 유형이 있습니다.

  1. 간단한 사례
  2. 검색된 CASE

간단한 사례

Simple 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]

여기

  • 매개 변수 사례_표현 우리가 결국 비교하게 될 표현을 나타냅니다. 값_1, 값_2, ...
  • 매개 변수 명령문_1, 명령문_2… Case_Expression인 경우 실행될 명령문을 나타냅니다. = Value_1, Case_Expression = Value_2, … 등등.
  • 간단히 말해서, 조건 Case_Expression 여부입니다. = Value_N 및 ACTION은 다음과 같은 경우 Statement_N의 실행입니다. 위의 결과는 사실입니다.
  • ALIAS_NAME 선택 사항이며 SQL Server CASE 문 결과에 지정된 별칭 이름입니다. SQL Server의 Select 절에서 Case를 사용할 때 주로 사용됩니다.

단순 사례에 대한 규칙

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

아래 다이어그램은 Simple Case의 실행 흐름을 보여줍니다.

간단한 Case 문 작업
간단한 Case 문 작업

인수: 테이블이 다음과 같다고 가정합니다. '구루99' 아래에 표시된 대로 2개의 열과 4개의 행으로 구성됩니다.

SQL Server의 간단한 사례

우리는 '구루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의 실행 흐름을 설명합니다.

SQL Server의 간단한 사례

쿼리 2: 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.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

결과 : 아래 다이어그램은 ELSE를 사용한 SIMPLE CASE의 실행 흐름을 설명합니다.

SQL Server의 간단한 사례

검색된 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로 평가될 표현식을 나타냅니다.
  • 매개변수 명령문_1, 명령문_2...는 해당 Boolean_Expression_1, Boolean_Expression_2 결과가 TRUE인 경우 실행될 명령문을 나타냅니다.
  • 간단히 말해서 Condition은 Boolean_Expression_1,…이고, ACTION은 위의 boolean_Expression_1이 TRUE인 경우Statement_N의 실행입니다.
  • ALIAS_NAME은 선택사항이며 CASE 문 결과에 부여되는 별칭 이름입니다. select 절에서 CASE를 사용할 때 주로 사용됩니다.

검색된 사례에 대한 규칙

  • 단순 케이스와 달리 Searched Case는 동등성 검사에만 국한되지 않고 Boolean 표현도 가능합니다.
  • 부울 표현식은 첫 번째 부울 표현식부터 시작하여 순서대로 평가됩니다(예: Boolean_expression_1). 다음은 실행 접근 방식입니다.
    • Boolean_expression_1이 TRUE이면 추가 WHEN…THEN 문을 건너뛰고 CASE 실행이 즉시 종료됩니다.
    • Boolean_expression_1이 FALSE이면 Boolean_expression_2가 TRUE 조건으로 평가됩니다. Boolean_expression을 평가하는 이 프로세스는 Boolean_expression 중 하나가 TRUE를 반환할 때까지 계속됩니다.
    • 일치하는 항목이 없으면 제어는 ELSE 문으로 이동하고,Statement_Else가 실행됩니다.
  • Simple Case와 마찬가지로 ELSE는 검색 케이스에서도 선택 사항입니다.
  • ELSE가 없고 Boolean_expression 중 어느 것도 TRUE를 반환하지 않으면 Null이 표시됩니다.

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

검색사례진술서 작업

검색사례진술서 작업

쿼리 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

결과 : 아래 다이어그램 실행 흐름을 설명합니다검색된 사례다른 것은 없습니다.

SQL Server에서 검색된 CASE 예

쿼리 2: 검색된 사례 와 더불어 싫다면 옵션을 선택합니다.

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

결과 : 아래 다이어그램 실행 흐름을 설명합니다 of 검색된 사례또 다른.

SQL Server에서 검색된 CASE

실행 접근 방식의 차이점: SIMPLE과 SEARCH 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

여기 '튜토리얼_이름' SQL의 CASE 표현식의 일부입니다. 그 다음에 '튜토리얼_이름' 값은 각각 비교됩니다. WHEN 값, 즉, 'SQL'… 'Tutorial_name'이 WHEN 값과 일치할 때까지.

반대로, 검색 사례 예에는 없습니다 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.

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

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

예 :
사례
WHEN 값_1 THEN 문_1…

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

예 :
언제의 경우 THEN 문_1…

단순 사례에서는 각 WHEN 문에 대해 VALUE가 존재합니다. 이 값: Value_1, Value_2… 단일 CASE_Expression과 순차적으로 비교됩니다. 결과는 각 WHEN 문에 대한 TRUE/FALSE 조건을 평가합니다.

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

Searched Case에는 WHEN 문마다 Boolean_Expression이 존재합니다. 이 Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,…은 각 WHEN 문에 대한 TRUE/FALSE 조건을 평가합니다.

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

Simple Case는 동등성 검사만 지원합니다. 즉, CASE_Expression = VALUE_1, VALUE_2…

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

Boolean_Expression_N을 사용하면 Search Case는 Boolean 값을 생성하는 모든 연산을 지원합니다. 여기에는 equal 및 not equal 연산자가 포함됩니다.

예 :
사례 언제 THEN Statement_1… 위의 예에서 Boolean_Expression_1은 A = B, A != B와 같이 '같음'과 '같지 않음' 연산자를 모두 포함할 수 있습니다.

중첩된 CASE: IF ELSE의 CASE

우리는 사용할 수 있습니다 IF ELSE 내부의 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 문이 실행되고 Case 조건이 SQL 서버 False이면 ELSE 문이 실행됩니다.

그 밖에 SQL에 중첩된 CASE 문이 들어 있습니다. 항공권 가격에 따라 다음 결과 중 하나가 표시됩니다.

  • 항공권 가격이 $400를 초과하는 경우 시스템은 '인근 관광지 방문'을 인쇄합니다.
  • 항공권 가격이 $0에서 $100 사이인 경우 시스템은 'Visit Los Angeles'를 인쇄합니다.
  • 항공권 가격이 $101에서 $200 사이인 경우 시스템은 'Visit New York'을 인쇄합니다.
  • 항공권 가격이 $201에서 $400 사이인 경우 시스템은 'Visit Europe'을 인쇄합니다.

SQL Server의 중첩된 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가 실행됩니다.

항공권 가격에 따라 다음 결과 중 하나가 표시됩니다.

  • 항공권 가격이 $400를 초과하는 경우 시스템은 '인근 관광지 방문'을 인쇄합니다.
  • 항공권 가격이 $0에서 $100 사이인 경우 시스템은 'Visit Los Angeles'를 인쇄합니다.
  • 항공권 가격이 $101에서 $200 사이인 경우 시스템은 'Visit New York'을 인쇄합니다.
  • 항공권 가격이 $201에서 $400 사이인 경우 시스템은 'Visit Europe'을 인쇄합니다.

SQL Server의 중첩 CASE 예

업데이트가 포함된 사례

가정: 아래에 표시된 것처럼 두 개의 열과 네 개의 행으로 구성된 'Guru99'라는 테이블이 있다고 가정합니다.

SQL Server의 UPDATE가 포함된 CASE

추가 예제에서는 'Guru99' 테이블을 사용합니다.

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
	)

위의 예에서는 CASE가 UPDATE 문에 사용되었습니다.

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'으로 업데이트합니다.

SQL Server의 UPDATE가 포함된 CASE

업데이트된 값을 확인하기 위해 Guru99 테이블을 쿼리해 보겠습니다.

SQL Server의 UPDATE가 포함된 CASE

CASE(주문 기준)

Order By와 함께 CASE를 사용할 수 있습니다. 다음은 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로 설정되고 첫 번째 부울 식이 TRUE로 평가되면 Order by Condition에 Tutorial_ID가 선택됩니다.

SQL Server에서 Order by가 포함된 CASE

흥미로운 사실!

  • CASE는 다른 CASE는 물론 다른 IF…ELSE 문에도 중첩될 수 있습니다.
  • SELECT 외에 CASE도 함께 ​​사용할 수 있습니다. SQL UPDATE, ORDER BY와 같은 절.

요약

  • MS SQL에는 단순 CASE와 검색 CASE의 두 가지 유형의 CASE가 있습니다.
  • ELSE는 CASE 문에서 선택 사항입니다.