А.В. Золотарюк Построение 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