Построение SQL

advertisement
А.В. Золотарюк
Построение SQL-запросов
При построении SQL-запросов есть 2 варианта.
1-й вариант
Выражение после конструкции Select строится, исходя из полей одной (!!!)
таблицы. Здесь проблем нет никаких.
Для вычисляемого поля, в котором приведено выражение, следует в строке
Условия отбора указать одну из инструкций (смотря что мы ищем):
<(Select Avg (выражение) from имя таблицы)
Вывод записей со значениями в столбце
меньше среднего, посчитанного
выражением
>=(Select Avg (выражение) from имя таблицы)
Вывод записей со значениями в столбце
не меньше среднего (больше или равно
среднему), посчитанного выражением
(Select Min (выражение) from имя таблицы)
Вывод записей с минимальным
значением в столбце, посчитанного
выражением
>(Select Min (выражение) from имя таблицы)
Вывод записей со значениями в столбце
большими минимального,
посчитанными выражением
=(Select Max (выражение) from имя таблицы)
Вывод записей с максимальным
значением в столбце, посчитанного
выражением
=(Select Count (выражение) from имя таблицы)
Вывод количества записей (например,
покупок конкретного клиента)
2-й вариант
Выражение после конструкции Select строится, исходя из полей нескольких (!!!)
таблиц. Например, есть база данных из 3-х таблиц (см. Схему базы данных на рис. 1).
1
А.В. Золотарюк
Рисунок 1 Схема базы данных
Требуется, например, найти сведения о максимальном заказе, т.е. вычислить
выражение в строке Поле (Рис. 2):
СТ_ЗАКАЗА: [описание]![цена (ед)]*[заказы]![количество]
Рисунок 2. Бланк Конструктора построения SQL-запроса
В строке Условие отбора (см. Рис.2) введем SQL-инструкцию:
(Select Max([цена (ед)] *[количество] ) from [заказы], [описание] Where
[описание].[код товара] =[заказы].[код товара] )
2
А.В. Золотарюк
Обратите внимание!!!
После From мы указали две таблицы через запятую: [заказы], [описание].
Далее указали описание Where и условие, что ключевые поля из двух таблиц
должны совпасть:
[описание].[код товара] =[заказы].[код товара]
Условие формируем путем вставки ключевых полей из таблиц, связав их знаком =
(равно) и заменяем между именем таблицы и именем поля знак ! на знак . точки.
При вы полнении запроса получим одну запись с максимальным значением
выражения (рис. 3).
Рисунок 3. Результат выполнения запроса
Выводы.
1.
Конструкцию Where с указанием равенства значений ключевых полей
следует указывать всегда, если в выражении используются поля более
одной таблицы.
2.
Если не указать конструкцию Where, при использовании нескольких
таблиц берется не число записей для выборки, а комбинация пересечения
полей – большое число, в результате экстремальные значения в запросе
не выводятся, а среднее вычисляется с ошибкой.
3
А.В. Золотарюк
Дополнение.
1. Конструкцию Select можно указывать и в новой вычисляемой строке Поле.
Например:
Сред_знач_кр_руб_по_всем: (select
avg([Подробности_кредитного_договора]![Сумма кредита] * [Валюта]![Курс]) from
[Подробности_кредитного_договора], [Валюта], [Кредитные договоры] Where
[Валюта].[Код валюты]=[Кредитные договоры].[Код валюты] And
[Подробности_кредитного_договора].[Номер кредитного договора] = [Кредитные
договоры].[Номер кредитного договора] )
Это позволит получить и вывести вычисляемое значение для всех выводимых
записей.
2. Конструкцию Select можно указывать в строке Условие отбора с указанием
данного поля как Условие (не отображаемого).
Рисунок 4. Бланк Конструктора для запроса с Select в строках Поле и в Условии
4
А.В. Золотарюк
Рисунок 5. Результат выполнения запроса
5
Download