Учебники

12) CASE заявление

Обзор дела в реальной жизни!

Опять же, в реальной жизни мы выполняем разные действия в зависимости от исхода разных условий.

Чтобы уточнить подробнее, рассмотрим пример ниже:

  • Если билеты на самолет будут стоить менее 100 долларов, я приеду в Лос-Анджелес.
  • Если билеты на самолет стоят от 100 до 200 долларов, я приеду в Нью-Йорк
  • Если билеты на самолет стоят от 200 до 400 долларов, я приеду в Европу
  • Еще, я предпочту посетить какое-нибудь соседнее туристическое место.

Давайте рассмотрим категоризацию Условие и Действие отдельно от приведенного ниже примера:

Условия — Авиабилеты Действия выполнены , только если Условие ИСТИНА
Менее 100 долларов Посетите Лос-Анджелес
От 100 до 200 долларов Посетите Нью-Йорк
От 200 до 400 долларов Посетите Европу
Ни одно из вышеуказанных условий не выполнено Рядом туристическое место

В приведенном выше примере мы можем видеть, что результатом различных условий является управление отдельными действиями. Например, Посетитель будет выполнять акт посещения Нью-Йорка только при условии, что стоимость авиабилета составляет от 100 до 200 долларов.

Аналогично, оператор MS SQL CASE также предоставляет возможность выполнять действия по выполнению различных операторов T-SQL на основе результатов различных условий.

В этом уроке вы узнаете:

Что такое СЛУЧАЙ?

CASE является продолжением оператора IF … ELSE. В отличие от IF… ELSE, где допускается только максимум одно условие, CASE позволяет пользователю применять несколько условий для выполнения различных наборов действий в MS SQL. Давайте изучим эту концепцию подробно в следующих разделах.

В MS SQL есть два типа CASE.

  1. Простой случай
  2. Искал дело

Простой случай

Синтаксис для простого случая

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 и ACTION является выполнение Statement_N если выше результат ИСТИНА .
  • ALIAS_NAME является необязательным и представляет собой псевдоним, который присваивается результату оператора CASE. В основном используется, когда мы используем CASE в предложении select.

Правила для простого случая:

  • Простой случай позволяет только проверку равенства Case_Expression с Value_1 до Value_N.
  • Case_Expression сравнивается со значением в порядке, начиная с первого значения, т. Е. Значения_1. Ниже приведен подход к исполнению:
    • Если 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.

Работа простого описания случая

Примеры:

Предположение: Предположим, что у нас есть таблица «Guru99» с двумя столбцами и четырьмя строками, как показано ниже:

Мы будем использовать таблицу «Guru99» в следующих примерах

Запрос 1: ПРОСТОЙ СЛУЧАЙ с опцией NO ELSE

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

Результат: диаграмма ниже объясняет ход выполнения ПРОСТОГО СЛУЧАЯ без ОТЛИЧИЯ.

Запрос 2: ПРОСТОЙ СЛУЧАЙ с опцией ELSE.

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.

Искал дело

Синтаксис для искомого регистра

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,… и ACTION — выполнение Statement_N, если выше boolean_Expression_1 — TRUE.
  • ALIAS_NAME является необязательным и является псевдонимом, заданным в результате выполнения оператора CASE. В основном используется, когда мы используем CASE в предложении select.

Правила для искомого дела:

  • В отличие от простого случая, Searched Case не ограничивается только проверкой равенства, но допускает логическое выражение.
  • Булево выражение вычисляется в порядке, начиная с первого логического выражения, т. Е. Boolean_expression_1. Ниже приведен подход к исполнению:
    • Если Boolean_expression_1 имеет значение TRUE, дальнейшие операторы WHEN … THEN пропускаются, и выполнение CASE немедленно завершается.
    • Если Boolean_expression_1 равен FALSE, тогда Boolean_expression_2 оценивается для ИСТИННОГО условия. Этот процесс оценки Boolean_expression будет продолжаться до тех пор, пока одно из Boolean_expression не вернет TRUE.
    • Если ничего не найдено, управление переходит к оператору ELSE и выполняется Statement_Else.
  • Как и в простом случае, ELSE также необязателен в случае поиска.
  • Если ELSE отсутствует, и ни одно из выражений Boolean_expression не возвращает TRUE, будет отображаться Null.

Диаграмма ниже иллюстрирует ход выполнения поиска .

Работа с искомым делом

Примеры:

Запрос 1: ПОИСКОВЫЙ СЛУЧАЙ с опцией NO 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.'
END AS Description
FROM Guru99 

Результат: Ниже схема объясняет поток выполнения в обыскали СЛУЧАЙ с NO ELSE.

Запрос 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.

Разница между подходом к исполнению: ПРОСТО и ПОИСК.

Давайте посмотрим на простой пример ниже:

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’ является частью выражения 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.

Например:
CASE <Case_Expression>
WHEN Value_1 THEN Statement_1 …

За ключевым словом Case следует оператор WHEN, а между CASE и WHEN нет выражения.

Например:
CASE WHEN <Boolean_Expression_1> THEN Statement_1…

В простом случае VALUE существует для каждого оператора WHEN. Это Значения: Value_1, Value_2… Сравниваются с одним CASE_Expression последовательно. Результат получает оценку для условия ИСТИНА / ЛОЖЬ для каждого оператора WHEN.

Например:
CASE <Case_Expression>
WHEN Value_1 THEN Statement_1 …
WHEN Value_2 THEN Statement_2 …

В поисковом случае Boolean_Expression существует для каждого оператора WHEN. Это Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,… оценивает условие TRUE / FALSE для каждого оператора WHEN.

Например:
CASE
WHEN <Boolean_Expression_1> THEN Statement_1…
WHEN <Boolean_Expression_2> THEN Statement_2…

Simple Case поддерживает только проверку на равенство. Т.е. CASE_Expression = VALUE_1, VALUE_2…

Например:
CASE <Case_Expression> WHEN Value_1 THEN Statement_1 … В приведенном выше примере единственной операцией, выполняемой системой, является проверка, если Case_Expression = Value_1

С Boolean_Expression_N, Search Case поддерживает любую операцию, которая приводит к логическому значению. Включает в себя равные и не равные оператору.

Например:
CASE WHEN <Boolean_Expression_1> THEN Statement_1… В приведенном выше примере Boolean_Expression_1 может содержать операторы «равно» и «не равно», например A = B, A! = B.

Вложенный случай: случай в случае, если еще

Мы можем использовать СЛУЧАЙ внутри, ЕСЛИ ЕЩЕ . Ниже приведен пример кода 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-оператор, а в случае, если Condition имеет значение False, выполняется ELSE-оператор.

Остальное содержит вложенный CASE внутри. В зависимости от стоимости билета будет отображаться один из следующих результатов:

  • Система напечатает «Посещение ближайшего туристического местоположения», если стоимость авиабилетов> 400 долларов
  • Система напечатает «Визит в Лос-Анджелес», если стоимость авиабилетов составляет от 0 до 100 долларов США.
  • Система напечатает «Посетите Нью-Йорк», если билеты на самолет стоят между 101 и 200 долларами.
  • Система напечатает «Посетите Европу», если билеты на самолет стоят между $ 201 и $ 400

Вложенный случай: случай внутри случая

Мы можем использовать 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 долларов США.
  • Система напечатает «Посетите Нью-Йорк», если билеты на самолет стоят между 101 и 200 долларами.
  • Система напечатает «Посетите Европу», если билеты на самолет стоят между $ 201 и $ 400

ДЕЛО с ОБНОВЛЕНИЕМ

Предположение: Предположим, что у нас есть таблица «Guru99» с двумя столбцами и четырьмя строками, как показано ниже:

Мы будем использовать таблицу «Guru99» в следующих примерах

Мы можем использовать CASE с UPDATE. Ниже приведен пример кода 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 Statement.

  • Если 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’

Давайте запросим таблицу Guru99, чтобы проверить обновленное значение:

СЛУЧАЙ с Заказом по

Мы можем использовать 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, и, когда первое логическое выражение оценивается как TRUE, Tutorial_ID выбирается для Order by Condition

Интересные факты!

  • CASE может быть вложен в другой CASE, а также в другой оператор IF… ELSE.
  • В дополнение к SELECT, CASE может использоваться с другим предложением SQL, таким как UPDATE, ORDER BY.

Резюме:

  • В MS SQL есть два типа CASE: простой CASE и поисковый CASE
  • ELSE является необязательным в операторе CASE.