
- •Среда программирования vb.
- •Лабораторная работа №2 (проверочная) Рабочее задание:
- •Лабораторная работа №3.
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Создание таблицы.
- •Первичные и внешние ключи.
- •Изменение таблицы, которая уже была создана.
- •Исключение таблицы.
- •Лабораторная работа №12 «Создание запросов»
- •Команда Select.
- •Реляционные операторы.
- •Булевы операторы.
- •Специальные операторы.
- •Использование выражений в командах Select.
- •Работа с данными с помощью функций агрегирования.
- •Использование множества таблиц в одном запросе.
- •Вложение запросов.
- •Использование агрегатных функций в подзапросах.
- •Применение подзапросов, которые формируют множественные строки с помощью in.
- •Связанные подзапросы.
- •Представления (view).
- •Групповые представления.
- •Удаление представлений.
Использование агрегатных функций в подзапросах.
Как видно из рассмотренного ранее лекционного материала, одним из видов функций, которые автоматически выдают в результате единственное значение для любого количества строк, являются агрегатные функции. Любой запрос, использующий единственную агрегатную функцию без предложения GROUP BY, дает в результате единственное значение для использования его в основном предикате (условии).
Например, если необходимо узнать про все заказы, стоимость которых превышает среднюю стоимость заказов за 4 октября 1990 г., то используя функцию AVG запрос будет выглядеть:
SELECT * FROM Orders
WHERE kol >
(SELECT AVG(kol)
FROM Orders
WHERE data=’04.10.90’);
Сгруппированные, то есть примененные с предложением GROUP BY, агрегатные функции могут дать в результате множество значений. Поэтому так их нельзя применять в подзапросах. Такие команды отвергаются в принципе, не смотря на то, что применение GROUP BY в некоторых случаях дает единственную группу в качестве выходных данных подзапроса. Для исключения ненужных групп следует применить единственную агрегатную функцию с предложением WHERE.
!!!!! То, что сейчас вы прочитали, может привести вас к выводу, что результатом подзапросов может быть только единственное значение, но в sql можно сформировать несколько строк, используя оператор IN.
Применение подзапросов, которые формируют множественные строки с помощью in.
Можно формулировать подзапросы, в результате выполнения которых получается любое количество строк, применяя специальный оператор IN. Операторы BETWEEN, LIKE, IS NULL в подзапросах применять нельзя. IN определяет множество значений, которые тестируются на совпадение с другими значениями для определения истинности предиката. Когда IN применяется в подзапросе, SQL просто строит это множество из выходных данных подзапроса. Например, найти все заявки для продавцов из Киева:
SELECT * FROM Orders
WHERE person_n IN
(SELECT person_n
FROM PRODAV
WHERE city=’Киев’;
Применять IN можно и для получения единственного значения, и там, где применим реляционный оператор сравнения. В отличии от реляционных операторов IN не не приводит к ошибке выполнения команды, когда в результате выполнения запроса получается не одно, а несколько значений выходных данных.
Примечание!
Общая черта всех рассмотренных подзапросов состоит в том, что они выбирают единственный столбец. Это существенно, так как выходные данные вложенного SELECT – предложения сравниваются с единственным значением. Из этого следует, что вариант SELECT * нельзя использовать в подзапросе. Исключением из этого правила являются подзапросы с оператором EXISTS, который рассмотри позднее.
В предложении подзапроса SELECT можно использовать выражения, основанные на столбцах, а не сами столбцы. Это можно сделать, применяя операторы отношения или IN. Например, следующий запрос использует оператор отношения = :
SELECT * FROM Pokypat
WHERE ynik_n =
(SELECT person_n + 1000
FROM Prodav
WHERE comm > 0.2);
Данный запрос находит всех покупателей, для которых работают продавцы, персональный номер которых начинается с 1001 и комиссионные которых больше 0,20.