Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Создание подчиненных запросов

Читайте также:
  1. I. Создание Энергетического и Духовного Тел
  2. Автоматическое создание запросов с помощью мастеров
  3. Алгоритм 2.33. Создание нового фильтра
  4. В период инерционной фазы идет взаимное подчинение людей друг другу, происходит образование больших государств, создание и накопление материальных благ.
  5. В. В. Путин и "Единая Россия": мы обеспечим создание задела для построения в нашей стране национал-социалистического общества
  6. Воссоздание мгновенного "бесплатного тепла" в зонах раздражений - у поверхности кожи и в области больных клеток.
  7. ВОССОЗДАНИЕ СВОЕЙ РЕАЛЬНОСТИ

Инструкции 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 | Нарушение авторских прав


Читайте в этой же книге: Замечание | Зарезервированные слова Jet SQL | Эквивалентные типы данных Jet SQL и ANSI SQL | Подстановочные знаки при сравнении строк | Замечание | Создание запросов на объединение записей | Элемент управления Надпись | Элементы управления выбора: Выключатель, Переключатель, Флажок и Группа | Элемент управления Список | Замечание |
<== предыдущая страница | следующая страница ==>
Создание запроса к серверу| Панель элементов

mybiblioteka.su - 2015-2024 год. (0.007 сек.)