Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа_Оператор SELECT_1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
258.56 Кб
Скачать

7. Агрегатные функции

Агрегатные функции предназначены для выдачи итоговых значений. К агрегатным относятся функции:

COUNT (<выражение>) - подсчитывает число вхождений значения выражения во все записи результирующего НД;

• SUM(<выражение>) - суммирует значения выражения;

AVG (<выражение>) - находит среднее значение выражения;

МАХ(<выражение>) - определяет максимальное значение выражения;

МIN(<выражение>) - определяет минимальное значение выражения.

Если из группы одинаковых записей нужно учитывать только одну, перед выражением в скобках включают слово DISTINCT

COUNT(DISTINCT POKUP)

Чаще всего в качестве выражения выступают имена столбцов. Выражение может вычисляться и по значениям нескольких таблиц.

Пример. Подсчитать число покупателей, приобретавших товары на складе

SELECT COUNT(DISTINCT POKUP) AS COUNT_POKUP

FROM RASHOD

Пример. Вычислить общую стоимость отпущенных товаров за 10.01.97

SELECT SUM(R.KOLVO * T.ZENA) AS OBS_ZENA

FROM RASHOD R, TOVARY T

WHERE (R.TOVAR = T.TOVAR) AND

(R.DAT RASH = "10-JAN-1997")

8. Предложение where : задание сложных условий поиска

Ранее были рассмотрены простые варианты задания условия поиска в предложении WHERE (сравнение столбца с константой и внутреннее соединение). Однако условия поиска могут быть достаточно сложными, чему способствует и сам синтаксис оператора SELECT. Рассмотрим основные конструкции для построения сложных условий поиска.

8.1. Использование логических выражений

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

Пример. Выдать все записи из таблицы RASHOD, для каждого товара выдать его цену из таблицы TOVARY, для каждого покупателя выдать его город из таблицы POKUPATEL.

SELECT R.*, T.ZENA, P.ADRES

FROM RASHOD R, TOVARY T, POKUPATELI P

WHERE (R.TOVAR = T.TOVAR) AND (R.POKUP = P.POKUP)

Пример. Выдать записи из таблицы RASHOD плюс соответствующую каждому товару цену из таблицы TOVARY. При этом количество отпуска товара должно быть не больше 30 или должно быть не меньше 3000, и название покупателя должно присутствовать.

SELECT R.*, T.ZENA FROM RASHOD R, TOVARY T

WHERE (R.TOVAR = T.TOVAR) AND ((R.KOLVO <=30) OR (R.KOLVO >= 3000)) AND (R.POKUP IS NOT NULL)

ORDER BY R.KOLVO

8.2. Сравнение столбца с результатом вычисления выражения

Условие поиска в предложении WHERE может быть сформулировано при помощи выражения:

<выражение> <оператор> <столбец>

Может использоваться и другой способ написания условия поиска, <столбец> <оператор> <выражение>

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

Пример. Выдать из таблицы RASHOD дату, товар, стоимость отпущенного товара. При этом показывать только записи, у которых стоимость отпущенного товара больше 120

SELECT R.DAT_RASH, R.TOVAR, (R.KOLVO * T.ZENA) AS STOIM FROM RASHOD R, TOVARY T

WHERE (R.TOVAR = T.TOVAR) AND ((R.KOLVO * T.ZENA) > 120)

ORDER BY R.DAT_RASH