Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Выражения с переключателем

Булевские выражения

К булевским выражениям относятся выражения, вырабатывающие значения булевского типа (напомним, что булевский тип языка SQL содержит три логических значения – true, false и unknown). Булевские выражения определяются следующими синтаксическими правилами:

 

boolean_value_expression::= boolean_term
| boolean_value_expression OR boolean_term

 

boolean_term::= boolean_factor
| boolean_term AND boolean_factor

 

boolean_factor::= [ NOT ] boolean_test

 

boolean_test::= boolean_primary [ IS [ NOT ] truth_value ]

 

truth_value::= TRUE | FALSE | UNKNOWN

 

boolean_primary::= predicate
| (boolean_value_expression)
| value_expression_primary

 

Выражения вычисляются слева направо с учетом приоритетов операций (наиболее приоритетна унарная операция NOT, следующим уровнем приоритета обладает “мультипликативная” операция конъюнкции AND, и самый низкий приоритет у “аддитивной” операции дизъюнкции OR) и круглых скобок. Операции IS и IS NOT определяются следующими таблицами истинности:

 

IS TRUE FALSE UNKNOWN
TRUE TRUE FALSE FALSE
FALSE FALSE TRUE FALSE
UNKNOWN FALSE FALSE TRUE

 

IS NOT TRUE FALSE UNKNOWN
TRUE FALSE TRUE TRUE
FALSE TRUE FALSE TRUE
UNKNOWN TRUE TRUE FALSE

 

 

Выражения с переключателем в некотором смысле ортогональны рассмотренным выше видам выражений, поскольку разные выражения с переключателем могут вырабатывать значения разных типов в зависимости от типа данных элементов. Поскольку мы еще вообще не рассматривали этот вид выражений, обсудим их более подробно. Как обычно, начнем с синтаксиса:

 

case_expression::= case_abbreviation
| case_specification

 

case_abbreviation::= NULLIF (value_expression, value_expression)
| COALESCE (value_expression_comma_list)

 

case specification::= simple_case | searched_case

 

simple_case::= CASE value_expression simple_when_clause_list
[ ELSE value_expression ] END

 

searched_case::= CASE searched_when_clause_list
[ ELSE value_expression ] END

 

simple_when_clause::= WHEN value_expression
THEN value_expression

 

searched_when_clause::= WHEN conditional_expression
THEN value_expression

 

Наиболее общим видом выражения с переключателем является выражение с поисковым переключателем (searched_case). Правила вычисления выражений этого вида состоят в следующем. Вычисляется логическое выражение, указанное в первом разделе WHEN списка (searched_when_clause_list). Если значение этого логического выражения равняется true, то значением всего выражения с поисковым переключателем является значение выражения, указанного в первом разделе WHEN после ключевого слова THEN. Иначе аналогичные действия производятся для второго раздела WHEN и т.д. Если ни для одного раздела WHEN при вычислении логического выражения не было получено значение true, то значением всего выражения с поисковым переключателем является значение выражения, указанного в разделе ELSE. Типы всех выражений, значения которыми могут являться результатом выражения с поисковым переключателем, должны быть совместимыми, и типом результата является “наименьший общий” тип набора типов выражений-кандидатов на выработку результата.* Если в выражении отсутствует раздел ELSE, предполагается наличие раздела ELSE NULL.

 

В выражении с простым переключателем (simple_case) тип данных операнда переключателя (выражения, непосредственно следующего за ключевым словом CASE; назовем его CO – Case Operand) должен быть совместим с типом данных операнда каждого варианта (выражения, непосредственно следующего за ключевым словом WHEN; назовем WO – When Operand). Выражение с простым переключателем

 

CASE CO WHEN WO1 THEN result1
WHEN WO2 THEN result2
.......
WHEN WOn THEN resultn
ELSE result
END

 

эквивалентно выражению с поисковым переключателем

 

CASE WHEN CO = WO1 THEN result1
WHEN CO = WO2 THEN result2
.......
WHEN CO = WOn THEN resultn
ELSE result
END

 

Выражение NULLIF (V1, V2) эквивалентно следующему выражению с переключателем:

 

CASE WHEN V1 = V2 THEN NULL ELSE V1 END.

 

Выражение COALESCE (V1, V2) эквивалентно следующему выражению с переключателем:

 

CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END.

 

Выражение COALESCE (V1, V2,... Vn) для n ≥ 3 эквивалентно следующему выражению с переключателем:

 

CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2,... n) END.

 

<== предыдущая лекция | следующая лекция ==>
Выражения даты-времени | Семантика оператора выборки
Поделиться с друзьями:


Дата добавления: 2014-01-03; Просмотров: 366; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.045 сек.