Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
16.04.2013
Размер:
1.04 Mб
Скачать
    1. Подзапросы и другие операции.

Бог в нас самих” Платон 428-347 гг. до н.э.

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

Подзапрос с проверкой на равенство.

SELECT столб_1_1, столб_1_2, столб_1_3, столб_1_4

FROM табл_1

WHERE столб_1_5 =

(SELECT столб_2_1

FROM табл_2

WHERE столб_2_2 = ‘корп.1106’);

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

Подзапросы с обобщающими функциями.

SELECT столб_1, столб_2 – (SELECT avg(столб_2) FROM табл) AS столб

FROM табл

WHERE столб_2 >

( SELECT столб_2

FROM табл);

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

Правила и ограничения использования подзапросов.

Подзапросы должны удовлетворять следующим правилам и ограничениям.

  1. В них не должна использоваться фраза ORDER BY, хотя она и допускается для внешнего запроса.

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

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

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

Подзапрос с предикатом IN.

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

SELECT столб_1_1, столб_1_2, столб_1_3, столб_1_4

FROM табл_1

WHERE столб_1_5 IN

(SELECT столб_2_1

FROM табл_2

WHERE столб_2_2 =

(SELECT табл_3_2

FROM табл_3

WHERE столб_3_1 = ‘корп.1106’));

Ключевые слова ANY и ALL.

Данные ключевые слова используются в случаях, когда возвращается столбец чисел. Если подзапросу предшествует ALL, то сравнение будет считаться выполненым, если оно выполняется для всех значений в результирующем столбце подзапроса. Если предшествует словоANY, то условие считается выполненым, если оно удовлетворяет хотя бы одному значению в векторе. Пустой результат считается дляALL выполненым, а дляANY – нет. Ключевое слово SOME – синонимANY.

Использование ключевых слов ANY и SOME.

SELECT столб_1, столб_2, столб_3, столб_4, столб_5

FROM табл

WHERE столб_5 > SOME

(SELECT столб_5

FROM табл

WHERE столб_6 = ‘B3’);

Использование ключевого слова ALL.

SELECT столб_1, столб_2, столб_3, столб_4, столб_5

FROM табл

WHERE столб_5 > ALL

(SELECT столб_5

FROM табл

WHERE столб_6 = ‘B3’);

Соседние файлы в папке УП_ОПТ2