
- •Лабораторная работа «Оператор select»
- •1. Простейший вид оператора select
- •2. Использование предложения where
- •2.1. Сравнение значения столбца с константой
- •2.2. Сравнение значения столбца из одной таблицы со значением столбца из другой таблицы (внутреннее соединение)
- •3. Использование псевдонимов таблиц
- •4. Предложение order by - определение сортировки
- •5. Устранение повторяющихся значений
- •6. Расчет значений результирующих столбцов на основе арифметических выражений
- •7. Агрегатные функции
- •8. Предложение where : задание сложных условий поиска
- •8.1. Использование логических выражений
- •8.2. Сравнение столбца с результатом вычисления выражения
- •Задание:
- •Проверить выполнение всех перечисленных вариантов запросов к своей бд с помощью утилиты ibExpert.
- •Повторить п.1 с использованием утилиты sql ibExpert.
- •Результаты выполнения всех пунктов отразить в отчете.
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