Программирование >>  Построение запросов sql 

1 ... 38 39 40 [ 41 ] 42 43 44 ... 101


FAILURENM

ACCOUNTCD

ACCOUNTCD1

Засорилась водогрейная колонка

005488

115705

Засорилась водогрейная колонка

005488

080270

Засорилась водогрейная колонка

005488

136169

Засорилась водогрейная колонка

115705

136169

Засорилась водогрейная колонка

080270

115705

Засорилась водогрейная колонка

080270

136169

Не горит АГВ

080047

443069

Не горит АГВ

080047

443069

Плохое поступление газа на горелку плиты

080613

136160

Плохое поступление газа на горелку плиты

005488

080613

Плохое поступление газа на горелку плиты

005488

136160

Туго поворачивается пробка крана плиты

136160

136169

При закрытии краника горелка плиты не гаснет

005488

080270

Неизвестна

015527

136159

Рис. 3.77. Результат соединения таблицы со своей копией и другой таблицей

3.3.2. Запросы с вложенными запросами 3.3.2.1. Виды вложенных запросов

Вложенный запрос - это запрос, заключенный в круглые скобки и вложенный в предложение WITH, SELECT, FROM, WHERE или HAVING основного (внешнего) запроса SELECT или других запросов, использующих эти предложения. Вложенный запрос также называют подзапросом. Вложенный запрос в своих предложениях может содержать другой вложенный запрос и т. д.

Условно подзапросы подразделяют на три типа, каждый из которых является сужением предыдущего:

<табличный подзапрос> ::= запрос SELECT, возвращающий набор строк и столбцов;

<подзапрос столбца> ::= запрос SELECT, возвращающий значения только одного столбца, но, возможно, в нескольких строках;

<скалярный подзапрос> ::= запрос SELECT, возвращающий значение одного столбца в одной строке.

Использование подзапросов в предложении WITH имеет следующий вид:

WITH [RECURSIVE]

имя производной таблицы1 [(<список столбцов>)] AS (<табличный подзапрос> ) [, имя производной таблицы2 [(<список столбцов>)] AS (<табличный подзапрос>)]... .



При использовании вложенных запросов в предложении SELECT синтаксис возвращаемых элементов имеет следующий вид: <возвращаемый элемент> :: =

{ [<таблица>].* [<таблица>.] столбец константа <выражение> (<скалярный подзапрос>) } .

При использовании вложенных запросов в предложении FROM его синтаксис имеет следующий вид:

FROM <производная таблица1> [,<производная таблица2> где <производная таблица>

(<табличный подзапрос>) [[AS] псевдоним] [(<список столбцов>)] .

При использовании вложенных запросов в предложениях WHERE и HAVING изменяется синтаксис некоторых условий поиска. Простое сравнение при использовании вложенного запроса реализуется следующей конструкцией:

<значение> <операция сравнения> { <значение1>

(<скалярный подзапрос>) {aNY ALL} (<подзапрос столбца>)}.

Проверка на членство в множестве реализуется следующей конструкцией:

<значение> [NOT] IN ({<значение1> [ , <значение2> <подзапрос столбца>} ).

Также при использовании вложенных запросов есть возможность осуществлять проверку на существование с помощью предиката EXISTS и проверку на возврат подзапросом единственного значения с помощью предиката SINGULAR. Условие поиска с проверкой существования представляется в следующем виде:

NOT] EXISTS (<табличный подзапрос>).

Условие поиска с проверкой на единственное возвращаемое значение представляется в следующем виде: SINGULAR (<табличный подзапрос>).

Использование конструкций FIRST, SKIP, PLAN, ORDER BY и ROWS разрешено для любого подзапроса.

Существуют простые и соотнесенные (связанные) вложенные запросы. В предложениях SELECT, WHERE и HAVING могут использоваться и простые, и соотнесенные вложенные запросы, а в предложении FROM только простые вложенные запросы. В предложение WHERE (или HAVING) как простые, так и соотнесенные вложенные запросы включаются с помощью предикатов IN, EXISTS или одной из операций сравнения ( = <> < <= > >= ). Следует отметить, что выражения, содержащие подзапрос в предложениях WHERE или HAVING, используются наиболее часто.

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



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

Связанным вложенным запросом называется такой, результат которого зависит от результата внешнего запроса. Подзапрос является связанным, когда в нем (в предложениях WHERE, HAVING) указан столбец таблицы внешнего запроса. Такое обращение к столбцам внешнего запроса называется внешней ссылкой. Если быть точнее, внешняя ссылка - это имя столбца одной из таблиц, указанных в предложении FROM внешнего запроса, но не входящего ни в одну из таблиц предложения FROM подзапроса. В связанных подзапросах следует указывать полные имена столбцов, причем если во внешнем и вложенном запросах используется одна и та же таблица, то для столбцов должны быть заданы псевдонимы. Запросы со связанными вложенными запросами обрабатываются в обратном порядке ( сверху-вниз ), т. е. сначала выбирается первая строка рабочей таблицы, сформированная основным запросом. Затем из нее выбираются значения тех столбцов, которые используются в подзапросе (подзапросах). Если эти значения удовлетворяют условиям вложенного запроса, то выбранная строка включается в результат. После этого во внешнем запросе выбирается вторая строка и т. д., пока в результат не будут включены все строки, удовлетворяющие подзапросу (последовательности подзапросов).

3.3.2.2. Запросы с простыми подзапросами 3.3.2.2.1. Простые подзапросы в предложении WITH

Производные таблицы, возвращаемые табличным подзапросом, могут быть определены в предложении WITH, которое записывается перед основным запросом SELECT.

Синтаксис использования предложения WITH следующий:

WITH [RECURSIVE]

имя производной таблицы1 [(<список столбцов>)] AS (<табличный подзапрос> ) [, имя производной таблицы2 [(<список столбцов>)] AS (<табличный подзапрос>)]...

Как следует из приведенного синтаксиса, в предложении WITH может быть определено несколько подзапросов. Сами предложения WITH не могут быть вложенными.

Подзапросы в предложении WITH могут быть нерекурсивными и рекурсивными. Если используется рекурсивный подзапрос, то в предложении WITH указывается ключевое слово RECURSIVE.



1 ... 38 39 40 [ 41 ] 42 43 44 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика