Условное выражение в части выборки sql предложения
Обновлено: 04.11.2024
Если возможностей этих условных выражений оказывается недостаточно, вероятно, имеет смысл перейти к написанию хранимых процедур на более мощном языке программирования.
9.17.1. CASE
Предложения CASE можно использовать везде, где допускаются выражения. Каждое условие в нём представляет собой выражение, возвращающее результат типа boolean . Если результатом выражения оказывается true, значением выражения CASE становится результат , следующий за условием, а остальная часть выражения CASE не вычисляется. Если же условие не выполняется, за ним таким же образом проверяются все последующие предложения WHEN . Если не выполняется ни одно из условий WHEN , значением CASE становится результат , записанный в предложении ELSE . Если при этом предложение ELSE отсутствует, результатом выражения будет NULL.
Типы данных всех выражений результатов должны приводиться к одному выходному типу. Подробнее это описано в Разделе 10.5.
Существует также « простая » форма выражения CASE , разновидность вышеприведённой общей формы:
В такой форме сначала вычисляется первое выражение , а затем его результат сравнивается с выражениями значений в предложениях WHEN , пока не будет найдено равное ему. Если такого не значения не находится, возвращается результат предложения ELSE (или NULL). Эта форма больше похожа на оператор switch , существующий в языке C.
Показанный ранее пример можно записать по-другому, используя простую форму CASE :
В выражении CASE вычисляются только те подвыражения, которые необходимы для получения результата. Например, так можно избежать ошибки деления на ноль:
Примечание
Как было описано в Подразделе 4.2.14, всё же возможны ситуации, когда подвыражения вычисляются на разных этапах, так что железной гарантии, что в « CASE вычисляются только необходимые подвыражения » , в принципе нет. Например, константное подвыражение 1/0 обычно вызывает ошибку деления на ноль на этапе планирования, хотя эта ветвь CASE может вовсе не вычисляться во время выполнения.
9.17.2. COALESCE
Функция COALESCE возвращает первый попавшийся аргумент, отличный от NULL. Если же все аргументы равны NULL, результатом тоже будет NULL. Это часто используется при отображении данных для подстановки некоторого значения по умолчанию вместо значений NULL:
Этот запрос вернёт значение description , если оно не равно NULL, либо short_description , если оно не NULL, и строку (none) , если оба эти значения равны NULL.
Как и выражение CASE , COALESCE вычисляет только те аргументы, которые необходимы для получения результата; то есть, аргументы правее первого отличного от NULL аргумента не вычисляются. Эта функция соответствует стандарту SQL, а в некоторых других СУБД её аналоги называются NVL и IFNULL .
9.17.3. NULLIF
Функция NULLIF возвращает значение NULL, если значение1 равно значение2 ; в противном случае она возвращает значение1 . Это может быть полезно для реализации обратной операции к COALESCE . В частности, для примера, показанного выше:
Если аргумент value равен (none) , результатом выражения будет NULL, а в противном случае — значение аргумента value .
9.17.4. GREATEST и LEAST
Функции GREATEST и LEAST выбирают наибольшее или наименьшее значение из списка выражений. Все эти выражения должны приводиться к общему типу данных, который станет типом результата (подробнее об этом в Разделе 10.5). Значения NULL в этом списке игнорируются, так что результат выражения будет равен NULL, только если все его аргументы равны NULL.
Заметьте, что функции GREATEST и LEAST не описаны в стандарте SQL, но часто реализуются в СУБД как расширения. В некоторых других СУБД они могут возвращать NULL, когда не все, а любой из аргументов равен NULL.
Читайте также: