Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
348.doc
Скачиваний:
12
Добавлен:
30.04.2022
Размер:
2.67 Mб
Скачать

8.3.3. Подзапрос

Подзапрос – это запрос, который может входить в предикат условия выборки оператора SQL. К подзапросам применяется то ограничение, что результирующая таблица должна содержать в точности один столбец. Поскольку подзапрос всегда вложен в некоторый другой оператор SQL, то в качестве констант в арифметическом выражении выборки и логических выражениях разделов WHERE и HAVING можно использовать значения столбцов текущих строк таблиц, участвующих в (под) запросах более внешнего уровня.

8.3.4 Табличное выражение

Вычисление табличного выражения рассматривается как последовательное применение разделов FROM, WHERE, GROUP BY и HAVING к таблицам, заданным в списке FROM.

Раздел FROM

Раздел FROM имеет следующий синтаксис:

<from раздел> ::=

FROM <ссылка таблицы>

({,<ссылка таблицы>}...]

<ссылка таблицы> ::=

<имя таблицы> [<связанное имя>]

Результатом выполнения раздела FROM является расширенное декартово произведение таблиц, заданных списком таблиц раздела FROM.

Связанное имя – это некоторый синоним имени таблицы, который можно использовать в других разделах табличного выражения для ссылки на строки именно этого вхождения таблицы.

Раздел where

Синтаксис раздела WHERE следующий:

<where раздел> ::= WHERE <условие поиска>

Условие поиска содержит предикаты, связанные булевскими операциями AND, OR, NOT. Вычисление раздела WHERE производится по следующим правилам: пусть R – результат вычисления раздела FROM. Тогда условие поиска применяется ко всем строкам R и результатом раздела WHERE является таблица, состоящая из тех строк R, для которых результатом вычисления условия поиска является true. Если условие выборки включает подзапросы, то каждый подзапрос вычисляется для каждого кортежа таблицы R.

Поскольку SQL допускает наличие в базе данных неопределенных значений, то вычисление условия поиска производится не в булевой, а в трехзначной логике со значениями true, false и unknown (неизвестно). Булевские операции AND, OR и NOT работают в трехзначной логике следующим образом:

true AND unknown = unknown

unknown AND true = unknown

unknown AND unknown = unknown

true OR unknown = true

unknown OR true = true

unknown OR unknown = unknown

NOT unknown = unknown

Среди предикатов условия поиска могут находиться следующие предикаты: предикат сравнения, предикат between, предикат in, предикат like, предикат null, предикат с квантором и предикат exists.

Предикат сравнения

Синтаксис предиката сравнения определяется следующими правилами:

<предикат сравнения> ::=

<значение выражения> <операция>

{<значение выражения> | <подзапрос>}

<операция> ::=

= | <> | < | > | <= | >=

Арифметические выражения левой и правой частей предиката сравнения строятся по общим правилам построения арифметических выражений и могут включать в общем случае имена столбцов таблиц из раздела FROM и константы. Типы данных арифметических выражений должны быть сравнимыми.

Если правый операнд операции сравнения задается подзапросом, то мощность результата подзапроса должна быть не более единицы. Если хотя бы один из операндов операции сравнения имеет неопределенное значение или если правый операнд является подзапросом с пустым результатом, то значение предиката сравнения равно unknown.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]