Читайте также:
|
|
Инструкции Jet SQL, такие как SELECT, SELECT... INTO, INSERT...INTO, DELETE или UPDATE позволяют для вычисления предиката в предложении WHERE использовать другой запрос. Этот запрос называется подчиненным запросом.
Подчиненный запрос включается в главный запрос одним из следующих способов:
где:
сравнение — выражение и оператор сравнения, который сравнивает это выражение с результатами подчиненного запроса;
выражение — выражение, для которого проводится поиск в результирующем наборе записей подчиненного запроса;
инструкцияSQL — инструкция SELECT, которая представляет подчиненный запрос.
Предикаты ANY или SOME являются синонимами и используются если в главном запросе нужно выбрать записи, удовлетворяющие сравнению со всеми записями, выбранными в подчиненном запросе. Ниже приведен пример запроса, который выбирает из таблицы "Товары" (Products) все товары, цена которых не ниже, чем цена товаров у конкурентов:
SELECT * FROM Товары WHERE Товары.Цена > ANY
(SELECT ТоварыКонкурентов.Цена FROM ТоварыКонкурентов)
Предикат ALL используется для выбора в главном запросе только тех записей, которые удовлетворяют сравнению со всеми записями, выбранными в подчиненном запросе. В следующем примере выбираются все заказы, сделанные в 1998 году, стоимость которых ниже стоимости любого заказа, размещенного в 1997 году:
SELECT DISTINCTROW
Заказы.КодЗаказа
FROM Заказы
WHERE Year(Заказы.ДатаРазмещения) = 1998
AND Заказы.СуммаЗаказа < ALL (SELECT Заказы.СуммаЗаказа FROM Заказы WHERE Year(Заказы.ДатаРазмещения) = 1997);
Предикат IN используется для выбора в главном запросе только тех записей, которые содержат значения, совпадающие с одним из значений, выбранных подчинен-ным_ запросом. Например, чтобы выбрать клиентов, которые разместили заказы в январе 1998 года, можно написать следующий запрос:
SELECT * FROM Клиенты WHERE КодКлиента IN
(SELECT КодКлиента FROM Заказы
WHERE ДатаРазмещения
BETWEEN #l/l/98# AND #31/1/981;
И наоборот, предикат NOT IN используется для выбора в главном запросе только тех записей, которые содержат значения, не совпадающие ни с одним из значений, отобранных подчиненным запросом.
Предикат EXISTS используется в логическом выражении для определения того, должен ли подчиненный запрос возвращать какие-либо записи. Например, чтобы выбрать всех поставщиков для товаров в некотором заказе, можно использовать следующую инструкцию SQL:
SELECT DISTINCTROW Поставщики.Название FROM Поставщики WHERE Exists (SELECT Заказано.КодТовара FROM Заказано
WHERE КодЗаказа = 121 AND Заказано.КодТовара = Поставщики.КодТовара); В подчиненном запросе можно-использовать псевдонимы таблиц для ссылки на таблицы, перечисленные в предложении FROM, расположенном вне подчиненного запроса. В следующем примере выбираются фамилии и имена сотрудников, чья зарплата равна или больше средней зарплаты сотрудников, имеющих ту же должность. В предыдущем примере можно присвоить таблице "Сотрудники" (Employees) псевдоним Т1, и тогда запрос будет выглядеть следующим образом:
SELECT DISTINCTROW Поставщики.Название
FROM Поставщики As П1
WHERE Exists
(SELECT Заказано.КодТовара
FROM Заказано
WHERE КодЗаказа = 121 AND Заказано.КодТовара = П1.КодТовара);
Некоторые подчиненные запросы можно использовать в перекрестных запросах как предикаты в предложении WHERE. Подчиненные запросы, применяемые для вывода результатов (в списке SELECT), нельзя применять в перекрестных запросах.
В отличие от запросов на объединение, подчиненный запрос можно создать в режиме Конструктора. В строке Условия отбора (Criteria) в качестве условия отбора следует указать, например, зарезервированное слово IN, а затем ввести инструкцию SELECT. А можно сначала создать в режиме Конструктора подчиненный запрос, переключиться в режим SQL, скопировать получившуюся инструкцию SQL в буфер
обмена, а затем создать главный запрос и скопировать в строку Условия отбора (Criteria) подчиненный запрос из буфера.
Выводы
Запросы являются основой для большинства разрабатываемых в Access форм и отчетов. Во многих случаях запросы создаются и сохраняются в базе данных исключительно для конкретной формы, отчета или страницы. Запросы, которые мы рассмотрели в этой главе, позволяют выполнять множественные изменения в таблицах, анализировать данные разными способами, автоматически сортировать и фильтровать данные.
Мы говорили о новых режимах, которые появились в Microsoft Access 2002 для просмотра содержимого таблиц и результатов запросов. И хотя сводные таблицы и диаграммы, получаемые в Access, немного отличаются от своих аналогов в Microsoft Excel, тем не менее, это уже большой шаг в усовершенствовании средств для анализа данных.
В последних разделах главы мы привели описание языка Jet SQL. Возможно, это изложение показалось вам недостаточно полным. Однако применение языка Jet SQL в приложениях Access все-таки является достаточно ограниченным. В большинстве случаев для создания запросов можно использовать графический интерфейс Конструктора запросов. И даже при написании программ на VBA, в которых используются инструкции SQL, можно сначала построить нужный запрос в Конструкторе, а потом просто скопировать его через буфер обмена из окна Режим SQL Конструктора запросов. Читателю, желающему основательно изучить SQL, мы рекомендуем обратиться к специальной литературе.
В дальнейших главах нашей книги мы будем рассматривать запросы для создания других объектов Access: форм, отчетов, страниц доступа к данным.
Глава 9.
Создание составных форм
Формы являются основным объектом, который обеспечивает пользователю удобный доступ к данным, поэтому им уделено большое внимание в настоящей книге,-В первой части мы показали несколько способов создания форм и детально описали основной инструмент разработки форм — Конструктор. Вы убедились, какое многообразие возможностей предоставляет этот инструмент для того, чтобы формы получились удобные и красивые. Однако в гл. 5 "Создание форм для ввода данных" мы рассмотрели лишь самые основные вопросы, относящиеся к работе с формами и элементами управления. Здесь мы поговорим об этом более подробно и обсудим более сложные вопросы, касающиеся создания и оформления составных форм — многотабличных и многостраничных, и рассмотрим применение элементов управления всех типов. Материал этой главы является продолжением гл. 5, поэтому рекомендуется ознакомиться с ней прежде, чем переходить к дальнейшему изучению. Часть материала о внедрении рисунков и других объектов в форму вынесена в гл. 15. Мы будем еще раз возвращаться к формам в гл. 11 и 13 при рассмотрении программирования в формах и отчетах с помощью макросов и процедур VBA.
Итак, в данной главе будут рассматриваться следующие вопросы:
Дата добавления: 2015-07-24; просмотров: 96 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Создание запроса к серверу | | | Панель элементов |