Табличное выражение, спецификация запроса и выражение запросов
Табличным выражением (table_expression) называется конструкция table_expression ::= FROM table_reference_commalist [ WHERE conditional_expression ] [ GROUP BY column_name_commalist ] [ HAVING conditional_expression ]Спецификацией запроса (query_specification) называется конструкция query_specification SELECT [ ALL | DISTINCT ] select_item_commalist table_expressionНаконец, выражением запросов (query_expression) называется конструкция query_expression ::= [ with_clause ] query_expression_bodyquery_expression_body ::= { non_join_query_expression | joined_table }non_join_query_expression ::= non_join_query_term | query_expression_body { UNION | EXCEPT }[ ALL | DISTINCT ] [ corresponding_spec ] query_term query_term ::= non_join_query_term | joined_tablenon_join_query_term ::= non_join_query_primary | query_term INTERSECT [ ALL | DISTINCT ] [ corresponding_spec ] query_primaryquery_primary ::= non_join_query_primary | joined_tablenon_join_query_primary ::= simple_table | (non_join_query_expression)simple_table ::= query_specification | table_value_constructor | TABLE table_namecorresponding_spec ::= CORRESPONDING [ BY column_name_comma_list ]Если не обращать внимания на не обсуждавшиеся пока конструкции joined_table и table_value_constructor, синтаксические правила показывают, что выражение запросов строится из выражений, значениями которых являются таблицы, с использованием «теоретико-множественных»129) операций UNION (объединение), EXCEPT (вычитание) и INTERSECT (пересечение). Операция пересечения является «мультипликативной» и обладает более высоким приоритетом, чем «аддитивные» операции объединения и вычитания. Вычисление выражения производится слева направо с учетом приоритетов операций и круглых скобок. При этом действуют следующие правила.
129 Мы использовали кавычки, поскольку таблицы, к которым применяются операции, в общем случае могут содержать строки-дубликаты, т.е. являться мультимножествами. 130 Другими словами, при отсутствии спецификации CORRESPONDING требуется, чтобы заголовки таблиц-операндов совпадали за исключением, возможно, порядка следования столбцов. 131 С учетом возможности неявного приведения типов.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|