Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bazy_dannykh_teoria_Avtosokhranenny.docx
Скачиваний:
52
Добавлен:
23.03.2015
Размер:
7.75 Mб
Скачать

5)Применение агрегатных функций в операторе выбора select. Привести примеры.

В SQL добавлены дополнительные функции, которые позволяют вычислять обобщенные групповые значения.

Агрегатные функции вычисляют одиночное значение для всей группы таблицы. Список этих функций представлен в табл. 5.7.

Таблица 5.7. Агрегатные функции

Функция

Результат

COUNT

Количество строк или непустых значений полей, которые выбрал запрос

SUM

Сумма всех выбранных значений данного поля

AVG

Среднеарифметическое значение всех выбранных значений данного поля

MIN

Наименьшее из всех выбранных значений данного поля

MAX

Наибольшее из всех выбранных значений данного поля

Функция AVG возвращает среднее значение аргумента в выборке.

Формат вызова:

SELECT AVG ( expression ) FROM tables WHERE predicates;

Expressionможет быть числовым полем (numberic field) или формулой.

Функция SUMвозвращает сумму аргументов в выборке.

Формат вызова:

SELECT SUM(expression ) FROM tables WHERE predicates;

Expressionможет быть числовым полем (numberic field) или формулой.

Функция MAXвозвращает максимальное значение аргумента в выборке.

Формат вызова:

SELECT MAX(expression ) FROM tables WHERE predicates;

Функция MINвозвращает минимальное значение аргумента в выборке.

Формат вызова:

SELECT MIN(expression ) FROM tables WHERE predicates;

Функция COUNTвозвращает количество строк, соответствующих запросу.

Формат вызова:

SELECT COUNT(expression ) FROM tables WHERE predicates;

COUNTучитывает только те строки, для которыхexpressionNOTNULL

Посчитать количество клиентов, зарегистрированных системой:

SELECT count(n_client) FROM computation(начисления абонентов);

или

SELECT count(*) FROM computation;

Посчитать минимальный, максимальный и средний долг за февраль:

SELECT min(n_debt(долг на начало периода)), max(n_debt), avg(n_debt)

FROM computation

WHERE to_char(d_computation,’MONTH’) = ’ФЕВРАЛЬ’

1

2

SELECT SUM(Students)

FROM Universities

6)Использование подзапросов языке sql. Привести примеры.

Подзапрос - это оператор выбора, который содержится внутри другого оператора выбора, вставки, обновления или удаления, внутри условного оператора или внутри другого подзапроса.

Использование подзапроса

На слайде внутренний запрос определяет оклад служащего под номером 7566. Внешний запрос использует результат внутреннего запроса для вывода списка всех служащих, зарабатывающих больше этой суммы.

Указания по использованию подзапросов

Подзапрос должен быть заключен в скобки.

Подзапрос должен находиться справа от оператора сравнения.

Подзапросы не могут содержать предложение ORDER BY. В команде SELECT может быть только одно предложение ORDER BY. Если предложение ORDER BY используется, оно должно быть последним в главной команде SELECT.

В подзапросах используются операторы сравнения двух типов: однострочные и многострочные.

Типы подзапросов

Однострочные подзапросы: запросы, в которых внутренняя команда SELECT возвращает только одну строку

Многострочные подзапросы : запросы, в которых внутренняя команда SELECT возвращает более одной строки

Многостолбцовые запросы: запросы в которых внутренняя команда SELECT возвращает более одного столбца

Однострочные подзапросы

Внутренняя команда SELECT, возвращающая только одну строку, называется однострочным подзапросом. В подзапросах такого типа используются однострочные операторы. На слайде показан список однострочных операторов.

Пример

Вывод списка служащих с такой же должностью, как у служащего под номером 7369.

> SELECT ename, job 2

FROM emp 3

WHERE job = 4

(SELECT job 5

FROM emp 6

WHERE empno = 7369) ;

Выполнение однострочных подзапросов

Команду SELECT можно рассматривать как блок запроса. На слайде показан запрос для вывода списка служащих, которые работают в той же должности, что служащий номер 7369, и имеют оклад больше, чем у служащего номер 7876.

Пример состоит из трех блоков запроса: одного внешнего и двух внутренних. Сначала выполняются внутренние блоки. Их результаты -CLERK и 1100. Затем выполняется внешний блок. Для создания условий поиска он использует результаты внутренних запросов.

Оба внутренних запроса возвращают по одному значению - CLERK и 1100, поэтому данная команда SQL называется однострочным подзапросом.

Примечание: внешний и внутренний подзапросы могут выбирать данные из разных таблиц.

Использование групповых функций в подзапросах

Подзапрос в внешнем запросе может использовать групповую функцию

для получения результата в виде одной строки. Подзапрос заключается

в круглые скобки и помещается после оператора сравнения.

В вышеуказанном примере показан вывод фамилий, должностей и

окладов всех служащих, чей оклад равен минимальному. Групповая

функция MIN возвращает во внешний запрос только одно значение -

800.

Предложение HAVING с подзапросами

Подзапросы можно использовать не только в предложении WHERE, но и в предложении HAVING. Сервер Oracle выполняет подзапрос, и результаты возвращаются в предложение HAVING главного запроса.

Команда SQL на слайде выводит список отделов, минимальные оклады в которых превышают минимальный оклад

Многострочные подзапросы

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

SELECT ename, sal, deptno 2

FROM emp 3

WHERE sal IN (SELECT MIN(sal) 4

FROM emp 5

GROUP BY deptno);

Многострочные подзапросы (продолжение)

Оператор ANY (и его синоним SOME) сравнивает значение с любым значением, возвращаемым подзапросом. Запрос на слайде возвращает список служащих, которые не являются клерками и оклады которых меньше, чем у любого клерка. Максимальный оклад клерка - 1300 долларов. Команда SQL возвращает список служащих, которые не являются клерками, но зарабатывают менее 1300 долларов.

<ANY означает "меньше, чем максимум". >ANY означает "больше, чем максимум". =ANY - эквивалент IN.

Многострочные подзапросы (продолжение)

Оператор ALL сравнивает значение с каждым значением, возвращаемым подзапросом. Запрос на слайде возвращает список служащих, чей оклад превышает средний оклад любого из отделов. Самый высокий средний оклад по отделу - 2916.66 долларов, поэтому запрос возвращает список служащих с окладами больше 2916.66 долларов.

>ALL означает "больше, чем максимум". <ALL означает "меньше, чем максимум". Оператор NOT не может использоваться с операторами IN, ANY и ALL .

Заключение

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

Характеристики подзапросов:

Могут передавать одну строку данных в главный запрос, содержащий однострочный оператор (=, <>, >, >=, < или <=)

Могут передавать более одной строки данных в главный запрос, содержащий многострочный оператор (например, IN)

Сервер Oracle обрабатывает их первыми, а затем их результаты используются в предложении WHERE или HAVING

Может содержать групповые функции

Использование подзапроса в предложении FROM

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