Обзор дела в реальной жизни!
Опять же, в реальной жизни мы выполняем разные действия в зависимости от исхода разных условий.
Чтобы уточнить подробнее, рассмотрим пример ниже:
- Если билеты на самолет будут стоить менее 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.
- Простой случай
- Искал дело
Простой случай
Синтаксис для простого случая
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 следует оператор WHEN, а между CASE и WHEN нет выражения. Например: |
В простом случае VALUE существует для каждого оператора WHEN. Это Значения: Value_1, Value_2… Сравниваются с одним CASE_Expression последовательно. Результат получает оценку для условия ИСТИНА / ЛОЖЬ для каждого оператора WHEN. Например: |
В поисковом случае Boolean_Expression существует для каждого оператора WHEN. Это Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,… оценивает условие TRUE / FALSE для каждого оператора WHEN. Например: |
Simple Case поддерживает только проверку на равенство. Т.е. CASE_Expression = VALUE_1, VALUE_2… Например: |
С Boolean_Expression_N, Search 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-оператор, а в случае, если 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.