В этой статье мы рассмотрим выражение CASE языка Transact-SQL, Вы узнаете, что это за выражение, его синтаксис, а также мы разберем несколько примеров использования выражения CASE.
CASE в Transact-SQL
CASE – это инструкция, которая проверяет список условий и возвращает соответствующий результат. Если говорить в целом о программировании, то CASE – это что-то вроде многократного использования конструкции IF-ELSE, во многих языках есть похожая конструкция SWITCH, так вот CASE, как я уже отметил, делает примерно то же самое.
Выражение CASE можно использовать практически в любой инструкции T-SQL, где есть возможность использовать допустимые выражения, например: SELECT, UPDATE, WHERE, SET и даже в ORDER BY.
CASE имеет два так называемых формата:
- Простое выражение CASE – это простое сравнение значения (выражения) с набором других значений (выражений);
- Поисковое выражение CASE – в данном случае CASE содержит набор логических выражений, которые вычисляются, чтобы вернуть результат.
Синтаксис CASE в Transact-SQL
Простое выражение CASE
CASE input_expression WHEN when_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
Поисковое выражение CASE
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
Описание параметров:
- input_expression — выражение, которое необходимо проверить в простом формате CASE;
- WHEN when_expression — выражение, с которым сравнивается input_expression, в случае с простым форматом. Тип данных when_expression должен быть такой же, как и у input_expression, или хотя бы неявно преобразовываться;
- THEN result_expression — выражение, которое будет возвращено, если текущее условие выполняется;
- ELSE else_result_expression – дополнительный параметр ELSE, который предназначен для случаев, когда ни одно из перечисленных в CASE условий не выполнилось. Это необязательный параметр. Если ELSE не указано, а условия не выполнились, вернётся NULL;
- WHEN Boolean_expression — логическое выражение, используемое в поисковом формате CASE, которое служит для вычисления результата. Это своего рода проверочное условие и таких условий может быть несколько.
CASE возвращает результат первого выражения (THEN result_expression), условие которого выполнилось, т.е. WHEN возвращает TRUE. Таким образом, если CASE содержит несколько эквивалентных условий WHEN, которые будут возвращать TRUE, вернется результат (указанный в THEN) первого выражения.
Тип данных возвращаемого результата выражением CASE, будет соответствовать наиболее приоритетному типу данных из набора типов в выражениях result_expressions и else_result_expression.
Примеры CASE в Transact-SQL
Сейчас давайте рассмотрим несколько примеров использования выражения CASE, но сначала разберем исходные данные, которые я буду использовать в примерах, чтобы было более понятно и наглядно.
Исходные данные для примеров
Допустим, что у нас есть таблица с товарами, она имеет следующую структуру и данные.
--Создание таблицы CREATE TABLE TestTable( [ProductId] [INT] IDENTITY(1,1) NOT NULL, [ProductName] [VARCHAR](100) NOT NULL, [Price] [Money] NULL ) GO --Добавление строк в таблицу INSERT INTO TestTable(ProductName, Price) VALUES ('Системный блок', 300), ('Монитор', 200), ('Клавиатура', 100), ('Мышь', 50), ('Принтер', 200) GO --Выборка данных SELECT * FROM TestTable
Заметка! Если Вы не знаете, что делает вышеуказанная инструкция, рекомендую посмотреть мой видеокурс «T-SQL. Путь программиста от новичка к профессионалу. Уровень 1 – Новичок», который предназначен для начинающих. В нем подробно рассмотрены все базовые конструкции языка SQL, включая все вышеперечисленные.
Пример простого выражения CASE в инструкции SELECT
В этом примере мы проверяем значение столбца ProductId, если оно равняется одному из перечисленных значений в выражении WHEN, то будет выводиться соответствующее значение из выражения THEN. Если нам встретится значение, которого мы не указали, CASE вернет пусто, т.е. значение из ELSE.
--Простое выражение CASE SELECT CASE ProductId WHEN 1 THEN 'Один' WHEN 2 THEN 'Два' WHEN 3 THEN 'Три' WHEN 4 THEN 'Четыре' WHEN 5 THEN 'Пять' ELSE '' END AS IdText, ProductId, ProductName, Price FROM TestTable
Пример поискового выражения CASE в инструкции SELECT
Следующий запрос эквивалентен предыдущему, но в нем используется уже поисковый формат CASE.
--Пример поискового выражения CASE SELECT CASE WHEN ProductId = 1 THEN 'Один' WHEN ProductId = 2 THEN 'Два' WHEN ProductId = 3 THEN 'Три' WHEN ProductId = 4 THEN 'Четыре' WHEN ProductId = 5 THEN 'Пять' ELSE '' END AS IdText, ProductId, ProductName, Price FROM TestTable
Как видим, результат точно такой же.
Давайте немного усложним запрос, добавим в него некий анализ цены (Price). Также я здесь покажу, что в случае, если по факту у нас может выполниться несколько условий, результат будет возвращен первого выражения с TRUE (т.е. условие выполнилось), выражения, идущие после, не обрабатываются.
--Пример поискового выражения CASE SELECT CASE WHEN Price > 100 THEN 'Больше 100' WHEN Price = 100 THEN 'Равно 100' WHEN Price < 100 THEN 'Меньше 100' WHEN Price = 300 AND ProductId = 1 THEN 'Цена равна 300 и Id равен 1' ELSE 'Нет подходящего условия' END AS IdText, ProductId, ProductName, Price FROM TestTable
Как видите, условие WHEN Price = 300 AND ProductId = 1 с виду выполняется, но CASE вернул результат первого выражения, после которого анализ был прекращен, и дело до следующих условий не дошло.
Пример выражения CASE в инструкции SET
Как я уже отмечал, CASE можно использовать во многих инструкциях, например, в SET для установки значений переменных. В следующем примере мы проверяем значение одной переменной, чтобы записать соответствующее текстовое значение в другую переменную.
Примечание! Про основы программирования на языке T-SQL в Microsoft SQL Server можете почитать в материале «Основы программирования на T-SQL».
--Пример выражения CASE в инструкции SET DECLARE @TestVar VARCHAR(10); DECLARE @Id INT = 1; SET @TestVar = CASE WHEN @Id = 1 THEN 'Один' WHEN @Id = 2 THEN 'Два' WHEN @Id = 3 THEN 'Три' ELSE '' END; SELECT @TestVar AS TestVar
У меня на этом все, пока!
Приглашаю всех желающих пройти мои онлайн-курсы по изучению языка T-SQL – https://self-learning.ru/courses/t-sql
На курсах используется моя авторская последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL. Каждый курс включает огромное количество материалов: видео, текстовый материал, тесты, домашние задания, скрипты, а также сертификат о прохождении.
На курсах Вы можете заниматься в комфортном для себя темпе не выходя из дома в любое удобное для Вас время.