Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
944.59 Кб
Скачать

4. Условные выражения с оператором case

В обычных языках программирования имеются операторы услов­ного перехода, которые позволяют управлять вычислительным процессом в зависимости от того, выполняется или нет не условие. В языке SQL таким оператором является CASE (случай, обстоятельство, экземпляр). В SQL:2003 этот оператор возвращает значение и, следовательно, может использоваться в выражениях. Он имеет две основные формы.

4.1. Оператор case со значениями

Оператор CASE со значениями имеет следующий синтаксис:

CASE проверяемое_значение

WHEN значение1 THEN результат1

WHEN значение2 THEN результат2

WHEN значениеN THEN результатN

ELSE результатХ

END

В случае, когда проверяемое_значение равно значение1, опера­тор CASE возвращает значение результат1, указанное после клю­чевого слова THEN (то). В противном случае проверяемое_значение сравнивается с значение2, и если они равны, то возвра­щается значение результат2, в противном случае проверяемое_значение сравнивается со следующим значением, указанным по­сле ключевого слова WHEN (когда) и т.д. Если проверяемое_значение не равно ни одному из таких значений, то возвращается значение результатX, указанное после ключевого слова ELSE (иначе).

Ключевое слово ELSE не является обязательным. Если оно отсут­ствует и ни одно из значений, подлежащих сравнению, не равно проверяемому значению, то оператор case возвращает NULL.

Пример:

Допустим, на основе таблицы Клиенты требуется получить таблицу, в которой названия регионов заменены их ко­довыми номерами. Если в исходной таблице различных регионов не слишком много, то для решения данной задачи удобно вос­пользоваться запросом с оператором CASE:

SELECT Имя, Адрес,

CASE Регион

WHEN 'Москва' THEN '77'

WHEN 'Тверская область' THEN '69'

ELSE Регион

END

AS Код региона

FROM Клиенты;

4.2. Оператор case с условиями поиска

Вторая форма оператора CASE предполагает его использование при поиске в таблице тех записей, которые удовлетворяют опре­деленному условию:

CASE

WHEN условие1 THEN результат1

WHEN условие2 THEN результат2

WHEN условиеN THEN результатN

ELSE результатХ

END

Оператор CASE проверяет, истинно ли условие1 для первой записи в наборе, определенном оператором WHERE, или во всей таблице, если WHERE отсутствует. Если да, то CASE возвращает значение результат1. В противном случае для данной записи проверяется условие2. Если оно истинно, то возвращается значе­ние результат2 и т. д. Если ни одно из условий не выполняется, то возвращается значение результатX, указанное после ключево­го слова ELSE.

Ключевое слово ELSE не является обязательным. Если оно отсут­ствует и ни одно из условий не выполняется, оператор CASE воз­вращает NULL. После того как оператор, содержащий CASE, вы­полнится для первой записи, происходит переход к следующей записи. Так продолжается до тех пор, пока не будет обработан весь набор записей.

Пример:

Предположим, в таблице Книги (Название, Цена) столбец Цена имеет значение NULL, если соответствующей книги нет в наличии.

Следующий запрос возвращает таблицу, в которой вместо null отображается текст "нет в наличии":

SELECT Название,

CASE

WHEN Цена IS NULL THEN 'Нет в наличии'

ELSE CAST(Цена AS CHAR(8))

END

AS Цена FROM Книги;

Все значения одного и того же столбца должны иметь одинако­вые типы. Поэтому в данном запросе используется функция пре­образования типов cast для приведения числовых значений столбца цена к символьному типу.