Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Топ:
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2017-11-17 | 93 |
5.00
из
|
Заказать работу |
|
|
В режиме запроса по образцу выводятся четыре типа соединений:
· Внутреннее соединение (или эквисоединение) обычно используется при создании запросов на выборку.
Access автоматически создает соединения между таблицами, если в них имеются поля с одинаковыми именами, одно из которых является ключевым, либо если соединение было задано в окне связей.
· Внешнее соединение используется для создания новой таблицы, которая содержит записи, исключая повторяющиеся, связанные поля которых совпадают. Внешнее соединение позволяет вывести данные одной из таблиц независимо от того, имеются ли соответствующие записи в другой таблице.
· Рекурсивное соединение связывает данные в одной таблице. Создание этого типа соединения выполняется путем добавления в запрос копии таблицы (Access назначает псевдоним для копии) и связывания полей идентичных таблиц.
· Соединение по отношению (или тэта-соединение ) связывает данные некоторым отношением (это может быть любое отношение, исключая равенство). Соединение по отношению выполняется с помощью предложения where, а не с помощью ключевого слова SQL join. Кроме того, в окне конструктора запросов соединения по отношению не выводятся, также как они не отображаются в окне схемы данных.
1.1 Создание внутреннего соединения по одному полю
Соединения, в которых участвует по одному полю из двух разных таблиц, называются внутренними соединениями по одному полю. В большинстве реляционных баз данных такие соединения реализуются на основе отношений "один-ко-многим".
Все соединения в базе данных "Борей", обозначенные линиями, которые соединяют имена полей (см. рис. 1), являются внутренними соединениями по одному полю, реализованные на основе отношений "один-ко-многим".
|
Чтобы построить запрос, в котором имеется внутреннее соединение одной таблицы с другой отношением "один-ко-многим", и связать имена клиентов с размещенными ими заказами:
|
1.2. Определение порядка сортировки результатов запроса
Access выводит результирующее множество, записи которого упорядочены по значению первичного ключа. Если первичный ключ включает несколько полей, то записи в динамическом наборе сортируются в порядке указания полей первичного ключа в бланке запроса, где поля, стоящие левее, имеют больший приоритет. Так как поле "Название" является крайним левым ключевым полем, заказы некоторой компании упорядочиваются по номеру заказа. Кроме того, можно явно указать порядок сортировки. Например, если требуется вывести первыми заказы, размещенные последними с упорядочением записей по убывающей дате заказа:
Нажмите кнопку "Конструктор" (Design View) для возврата в режим конструктора запроса.
1.3. Создание запросов на выборку данных из таблиц с косвенными связями
Запросы можно использовать для вывода косвенно связанных записей, например для отображения категорий товаров, закупленных некоторым клиентом. В запрос следует включить каждую таблицу, которая служит звеном в цепочке соединений. Для рассматриваемого примера необходимо включить все промежуточные таблицы, соединяющие таблицу "Клиенты" с таблицей "Типы". Тогда в цепочку входят следующие таблицы: "Клиенты", "Заказы", "Заказано", "Товары" и "Типы". Однако добавлять поля этих таблиц в бланк запроса не требуется — достаточно полей "Название" и "Категория".
Чтобы вывести в запросе данные косвенно связанных записей:
Добавленные таблицы появляются в верхней части окна запроса. Однако, если список полей таблицы не виден, воспользуйтесь вертикальной полосой прокрутки для вывода "скрытых" таблиц. Списки полей можно перетащить наверх, расположив их требуемым образом (рис. 7).
|
Запросы, соединяющие косвенно связанные записи, используются часто, особенно при анализе данных с помощью статистических функции SQL или перекрестных запросов Access.
1.4. Создание внутреннего соединения по нескольким полям
Между двумя таблицами может быть задано несколько соединений. Например, допустим, что требуется вывести имена клиентов, у которых совпадают официальный адрес и адрес доставки. Адрес клиента хранится в поле "Адрес" таблицы "Клиенты", а адрес доставки — в поле "АдресПолучателя" таблицы "Заказы". Таким образом, необходимо сопоставить поля "КодКлиента" в обеих таблицах, а также поля "Адрес" и "АдресПолучателя". Для этого требуется использовать внутреннее соединение по нескольким полям.
|
Для вывода имен клиентов, официальный адрес и адрес доставки которых совпадают:
perties), щелкните по пустому месту, чтобы вывести свойства запроса. Кроме того, можно щелкнуть правой кнопкой мыши по свободной области верхней части окна запроса и выбрать в контекстном меню команду "Свойства" (Properties)
2. Использование полей подстановок
|
Мастер подстановок позволяет заменить обычные поля таблиц полями со списком. Это позволяет создать для определенного поля список допустимых значении, при выборе элемента в котором в текущую запись автоматически заносится требуемая величина. Поля подстановки имеют следующие типы:
· Для поля, содержащего значения внешнего ключа, создастся список значении одного или нескольких полей связанной базовой таблицы. Например, таблица "Заказы" базы данных "Борей" имеет два поля внешнего ключа: "КодКлиента" и "Код Сотрудника".Для поля "КодКлиента" отображается список значений поля "Название" таблицы "Клиенты", а для поля "КодСотрудника" — список значений полей "Фамилия" и "Имя" таблицы "Сотрудники", разделенных запятой и пробелом. Для поля "КодКлиента" подстановка реализуется на основе простого запроса на выборку: select dictinctrow [КодКлиента], [Название] FROM [Клиенты] ORDER BY [Название];.
· Для любого другого поля, исключая поле простого первичного ключа, список содержит фиксированные значения.
Поле подстановки можно задать либо в режиме конструктора, либо в режиме таблицы. Однако в режиме конструктора подстановку можно определить только для существующего поля. В режиме таблицы всегда выводится поле со списком, даже если был задан простой список. Поле со списком или список отображается также в форме, для которой таблица
является источником записей. На практике чаще всего используется поле со списком, у которого значение свойства "Ограничиться списком" (Limit to List) равно Да. Ниже описывается, как связать списки подстановки значений внешнего ключа или фиксированных величин с полями таблицы.
2.1 Добавление списка, задающего значение внешнего ключа, при помощи Мастера подстановок
Рассмотрим построение списка подстановки значений внешнего ключа таблицы
"Персональные мероприятия", созданной в предыдущих главах. Чтобы заменить поле "Код Сотрудника" полем подстановки:
1. Выделите таблицу "Персональные мероприятия" в окне "База данных", а затем нажмите комбинацию клавиш <Ctrl>+<C> для копирования таблицы в Буфер обмена.
2. Нажмите комбинацию клавиш <Ctrl>+<V> для вывода диалогового окна "Вставка таблицы" (Paste Table As). Введите имя копии, например, "Персональные мероприятия (поля подстановки)" и нажмите кнопку ОК.
SELECT DISTINCTROW [Сотрудники].[КодСотрудника], [Сотрудники].[Фамилия], [Сотрудники].[Имя] FROM [Сотрудники];.
2.2 Добавление списка постоянных значений к полю таблицы
Добавление списка фиксированных значений к полю таблицы очень похоже на создание списка значений внешнего ключа, описанное в предыдущем разделе. Чтобы связать поле "Тип Мероприятия" копии таблицы "Персональные мероприятия" со списком постоянных величин:
"П"; "Принять"; "К"; "Квартальный отчёт"; "Г"; "Годовой отчёт"; "О"; "Изменить оклад".
3. Внешнее, рекурсивное соединения и соединение по отношению
В предыдущих заданиях лабораторной работы были созданы внутренние соединения. Внутренние соединения чаще других используются в базах данных. Однако Access позволяет задать еще три типа соединений, которые применяются реже: внешнее соединение, рекурсивное соединение и соединение по отношению.
3.1 Создание внешнего соединения
Внешние соединения позволяют вывести данные всех записей таблицы, участвующей в соединении, в независимости от того, имеются ли соответствующие им записи в связанной таблице. Внешние соединения могут быть левыми или правыми.
Запрос, в котором участвуют таблицы с левым внешним соединением (left join или *= в SQL), выводит все записи таблицы "один" с уникальным значением первичного ключа в независимости от того, имеются ли соответствующие им записи в таблице "многие". И наоборот, запрос, в котором участвуют таблицы с правым внешним соединением (right join или =* в SQL), выводит все записи таблицы "многие" в независимости от того, имеются ли соответствующие им записи в таблице "один". Обычно, но не обязательно, записи таблицы "многие", которые не подчиняются ни одной записи в таблице "один", являются "висячими" и могут быть связаны отношением "многие-к-одному" с записями другой таблицы.
Чтобы с помощью левого внешнего соединения создать запрос, который обнаруживает отсутствие записей для некоторого сотрудника в таблице "Персональные мероприятия":
Если бы не было задано условия на значение, то можно было бы добавить план мероприятии для несуществующего сотрудника и в результирующем множестве запроса с правым внешним соединением выводились бы персональные мероприятия с отсутствующими именами служащих.
3.2 Создание рекурсивного соединения
Рекурсивные соединения связывают поля одной таблицы. При этом требуется добавить в запрос копию таблицы, а затем задать соединение. В качестве примера рассмотрим запрос, в котором выводятся сотрудники, утвердившие мероприятия, за которые они ответственны, что запрещено внутренним распорядком компании "Борей".
Для создания рекурсивного соединения в таблице "Персональные мероприятия":
В рассматриваемом задании можно добавить в запрос таблицу "Сотрудники", чтобы вывести имя сотрудника. При этом необходимо создать дополнительное соединение между полем "КодСотрудника" исходной таблицы "Персональные мероприятия" и полем "КодСотрудника" таблицы "Сотрудники", а затем перетащить поле "Фамилия" в пятый столбец бланка запроса. Так как в соединении участвует поле первичного ключа, то в инструкцию SQL по умолчанию добавляется ключевое слово distinctrow
которое исключает отображение повторяющихся записей. На всякий случай присвойте значение Да свойству "Уникальные значения", нажав на панели инструментов кнопку "Свойства", либо дважды щелкнув по свободной области верхней части окна запроса, а затем выполните запрос.
Рекурсивные соединения используются весьма редко в полностью автоматических базах данных, т. к. заданные условия на значения и обеспечиваемая целостность данных сводят на нет необходимость применения таких связей.
3.3 Создание соединения по отношению
Большинство соединений основаны на полях с одинаковыми значениями. Однако в некоторых случаях требуется создать связь неравных полей. В режиме конструктора запросов отображаются только внутренние и внешние соединения. Связь, эквивалентную соединению по отношению, можно задать с помощью условия отбора, которое указывается для одного из двух полей, участвующих в соединении.
Как уже отмечалось выше, поиск клиентов, которые имеют разный официальный адрес и адрес доставки, является примером, в котором требуется использовать соединение по отношению. Для создания связи, эквивалентной данному соединению:
Если ввести в столбце поля "Адрес" выражение <> Заказы. АдресПолучателя, то будет получен идентичный результат. В инструкцию select добавляется предложение where Клиенты. Адрес <>[Заказы].[АдресПолучателя].
4. Использование запросов для обновления таблиц
Большинство запросов, свойство "Уникальные записи" которых имеет значение Да, могут использоваться для обновления данных, потому что в предложении SQL, связанном с ними, участвует ключевое слово distinctrow. Эти запросы создают объекты Recordset типа Dynaset, допускающими изменения. Результирующее множество можно обновить, только если в его конце имеется пустая запись (со звездочкой на кнопке выделения). Запросы, свойство "Уникальные значения" которых имеет значение Да, создают объекты Recordset типа Snapshot путем замены ключевого слова ANSI SQL distinct. Такие объекты не допускают ни обновления, ни редактирования имеющихся в них записей, ни добавления новых. Ниже описывается, как обновить запись таблицы, включенной в динамический набор запроса, а также как форматировать данные, используя бланк свойств поля запроса.
4.1 Требования к запросам на обновление
Добавление новых записей к таблицам или обновление данных таблиц, включенных в запрос, оказывается в некоторых случаях весьма удобным. Особенно полезной является возможность исправления ошибок с помощью запроса. К сожалению, большинство запросов не позволяют добавлять или изменять записи. Нельзя добавлять или изменять записи в запросах в следующих случаях:
· Свойство запроса "Уникальные значения" имеет значение Да.
· В запросе используются рекурсивные соединения.
· В запросе применяются статистические функции SQL, например Sum (). Следует отметить, что статистические функции SQL используются во всех перекрестных запросах.
· Если две таблицы связаны отношением "один-ко-многим", то в таблице "один" не задано полей первичного ключа, повторения значений которых не допускается.
При разработке запроса, используемого в качестве основы формы для ввода или редактирования данных, убедитесь, что ни одно из перечисленных условий нс выполняется.
Если ни одно из перечисленных условий нс выполняется для запроса или для всех таблиц, входящих в него, то можно добавить или обновить данные в следующих объектах:
· В таблице, которая является единственной в запросе
· В обеих таблицах, связанных отношением "один-к-одному"
· В таблице "многие", связанной с другой таблицей отношением
"один-ко-многим"
· В таблице "один", связанной с другой таблицей отношением "один-ко-многим", если ни одно поле таблицы "многие" не участвует в запросе
Обновление таблицы "один", связанной с другой таблицей отношением "один-ко-многим", требует особого рассмотрения. Для изменения данных в такой таблице:
шаге 2.
4. Сбросьте флажок "Вывод на экран" (Show) поля или полей таблицы "многие", так чтобы они не выводились в динамическом наборе записей запроса.
Выполнив эти действия, можно редактировать данные не ключевых полей таблицы "один". Однако нельзя изменять значения ключевых полей, которые связывают записи таблицы "один" с записями таблицы "многие". Это приведет к нарушению целостности данных. Кроме того, нельзя обновить значение вычисляемого поля запроса — таблицы не могут включать вычисляемые величины.
4.2 Определение формата вывода данных
Формат вывода данных запроса копируется из формата данных таблиц, на основе которых создается запрос. Чтобы изменить его, используется функция Format [Имя Поля, Формат}, которая создает вычисляемые поля.
5. Добавление в запрос всех полей таблицы
В большинстве запросов участвуют только отдельно выбранные поля. Чтобы добавить их в бланк запроса, можно либо ввести с клавиатуры их имя, либо выбрать из списка в ячейке строки "Поле", либо перетащить их из списка полей. Однако имеется возможность включить в запрос все поля таблицы. Для этого в Access имеются три способа.
5.1 Использование заголовка окна списка полей для добавления всех полей в запрос
Для включения всех полей таблицы в запрос используется заголовок окна списка полей или строка этого списка, помеченная звездочкой. Чтобы добавить в бланк запроса все поля вместе с их полными именами:
При этом предложение SQL, связанное с запросом, имеет следующий вид:
SELECT DISTINCTROW ИмяТаблицы.ПервоеПоле, ИмяТаблицы. ВтороеПоле,... ИмяТаблицы.ПоследнееПоле FROM ИмяТаблицы;
5.2 Использование строки, помеченной звездочкой, для добавления всех полей в запрос
Для включения всех полей таблицы в запрос без отображения их имен перетащите из списка полей звездочку на ячейку строки "Поле", начиная с которой необходимо вывести данные таблицы. Столбец со звездочкой эквивалентен инструкции SQL select DISTINCTROW * FROM ИмяТаблицы;.
Для столбца со звездочкой нельзя задать порядок сортировки и условие отбора. Однако, чтобы все-таки упорядочить записи и указать критерий отбора:
В запросе может участвовать неограниченное число столбцов со звездочкой. Поле, по значению которого упорядочиваются записи, задается в инструкции SQL предложением order by Имя Таблицы. ИмяПоля, а условие отбора предложением where УсловиеОтбора
5.3 Использование окна свойств для добавления всех полей в запрос
Обычно для обновления в формах или отчетах доступны только те поля, чьи имена указаны в бланке запроса. Все другие поля исключены из результирующего множества. Однако, чтобы изменять в форме или отчете данные всех полей таблицы, используемой в запросе, и не включать их имена в запрос, требуется присвоить значение Да свойству запроса "Вывод всех полей" (Output All Fields). Для задания значения свойства "Вывод всех полей":
Если в диалоговом окне "Параметры" сбросить флажок "Вывод всех полей" (Restrict Available Fields), то в инструкцию SQL после списка выбранных полей будет добавлена звездочка, которая определяет вывод всех полей заданных таблиц:
SELECT DISTINCTROW Клиенты.Название, Типы.Категория, * FROM-Клиенты, Типы;
Следует отметить, что при выводе всех полей таблицы выполнение запроса происходит медленнее, особенно если в результирующем множестве содержится большое количество записей.
6. Вычисления на подмножестве записей
Access позволяет практически мгновенно обобщить информацию, содержащуюся в записях таблиц. Эта информация является входными данными для большинства информационных систем. В этих системах можно получить ответы на типичные вопросы, такие, например, как "Какова сумма продаж на заданный день?" или "Как изменилась сумма продаж за текущий месяц по срав
|
|
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!