Как из двух таблиц сделать одну в access?
В простейшем случае запрос реализует выбор из одной таблицы нужных полей, записей, соответствующих заданным условиям отбора, и просмотр результатов выполнения запроса.
Конструирование запросов на выборку с условиями отбора
Рассмотрим запросы на выборку в Access на примере получения информации из таблицы ТОВАР базы данных Поставка товаров.
Задача 1. Пусть необходимо выбрать ряд характеристик товара по его наименованию.
- Для создания запроса в окне базы данных выберите вкладку ленты — Создание (Create) и в группе Запросы (Queries) нажмите кнопку Конструктор запросов (Query Design). Откроется пустое окно запроса на выборку в режиме конструктора — ЗапросN (QueryN) и диалоговое окно Добавление таблицы (Show Table) (рис. 4.2).
- В окне Добавление таблицы (Show Table) выберите таблицу ТОВАР и нажмите кнопку Добавить (Add). Выбранная таблица будет отображена в области схемы данных запроса. Закройте окно Добавление таблицы (Show Table), нажав кнопку Закрыть (Close).
В результате выполненных действий в окне конструктора запросов (рис. 4.1) в верхней панели появится схема данных запроса, которая включает выбранные для данного запроса таблицы. В данном случае одну таблицу ТОВАР. Таблица представлена списком полей. Первая строка в списке полей таблицы, отмеченная звездочкой (*), обозначает все множество полей таблицы. Нижняя панель является бланком запроса, который нужно заполнить.
Кроме того, на ленте появляется и автоматически активизируется новая вкладка Работа с запросами | Конструктор (Query Tools | Design) (на рис. 4.3 представлена на часть этой вкладки), на которой цветом выделен тип созданного запроса — Выборка (Select). Таким образом, по умолчанию всегда создается запрос на выборку. Команды этой вкладки представляют инструментарий для выполнения необходимых действий при создании запроса. Эта вкладка открывается, когда в режиме конструктора создается новый запрос или редактируется существующий.
- Для удаления любой таблицы из схемы данных запроса установите на нее курсор мыши и нажмите клавишу . Для добавления ― нажмите кнопку Отобразить таблицу ( Show Table) в группе Настройка запроса (Query Setup) на вкладке Работа с запросами | Конструктор (Query Tools | Design) или выполните команду Добавить таблицу (Show Table) в контекстном меню, вызываемом на схеме данных запроса.
- В окне конструктора (рис. 4.4) последовательно перетащите из списка полей таблицы ТОВАР поля НАИМ_ТОВ, ЦЕНА, НАЛИЧИЕ_ТОВ в столбцы бланка запроса в строку Поле (Field).
- Для включения нужных полей из таблицы в соответствующие столбцы запроса можно воспользоваться следующими приемами:
- в первой строке бланка запроса Поле (Field) щелчком мыши вызвать появление кнопки списка и выбрать из списка нужное поле. Список содержит поля таблиц, представленных в схеме данных запроса;
- дважды щелкнуть на имени поля таблицы в схеме данных запроса;
- для включения всех полей таблицы можно перетащить или дважды щелкнуть на символе * (звездочка) в списке полей таблицы в схеме данных запроса.
- Если вы по ошибке перетащили в бланке запроса ненужное поле, удалите его. Для этого переместите курсор в область маркировки столбца сверху, где он примет вид черной стрелки, направленной вниз, и щелкните кнопкой мыши. Столбец выделится. Нажмите клавишу или выполните команду Удалить столбцы (Delete Columns) в группе Настройка запроса (Query Setup).
- В строке Вывод на экран (Show) отметьте поля, иначе они не будут включены в таблицу запроса.
- Запишите в строке Условия отбора (Criteria) наименование товара, как показа-но в бланке запроса на рис. 4.4. Так как выражение в условии отбора не содержит оператора, то по умолчанию используется оператор =. Используемое в выражении текстовое значение вводится в двойных кавычках, которые добавляются автоматически.
- Выполните запрос, щелкнув на кнопке Выполнить (Run) или на кнопке Режим (View) в группе Результаты (Results). На экране появится окно запроса в режиме таблицы с записью из таблицы ТОВАР, отвечающей заданным условиям отбора.
ЗАМЕЧАНИЕ
Окно запроса в режиме таблицы аналогично окну просмотра таблицы базы данных. Через некоторые таблицы запроса может производиться изменение данных базовой таблицы, лежащей в основе запроса. Запрос, просматриваемый в режиме таблицы, в отличие от таблицы базы данных Access 2010, не имеет столбца Щелкнуть для добавления (Click to Add), предназначенного для изменения структуры таблицы. В этом режиме на вкладке ленты Главная (Home) доступны те же кнопки, что и при открытии таблицы базы данных.
- Если при вводе сложного наименования товара вы допустили неточность, товар не будет найден в таблице. Использование операторов шаблона — звездочка (*) и вопросительный знак (?) (стандарт ANSI-89, используемый для запросов по умолчанию) или знак процента (%) и подчеркивания (_) (ANSI-92, рекомендуемый как стандарт для SQL Server), упрощает поиск нужных строк и позволяет избежать многих ошибок. Введите вместо полного имени товара Корпус* или Корпус%. Выполните запрос. Если в поле наименования товара одно значение начинается со слова «Корпус», результат выполнения запроса будет таким же, как в предыдущем случае. После выполнения запроса введенное выражение будет дополнено оператором Like «Корпус*». Этот оператор позволяет использовать символы шаблона при поиске в текстовых полях.
- Если необходимо найти несколько товаров, используйте оператор In. Он позволяет выполнить проверку на равенство любому значению из списка, который задается в круглых скобках. Запишите в строке условий отбора In («Корпуc MiniTower»;»HDD Maxtor 20GB»;»FDD 3,5″). В таблице запроса будет выведено три строки. В операторе In не допускается использование символов шаблона.
- Сохраните запрос, щелкнув на вкладке Файл (File) и выполнив команду Сохранить (Save). В окне Сохранение (Save As) введите имя запроса Пример1. Заметим, что имя запроса не должно совпадать не только с именами имеющихся запросов, но и с именами таблиц в базе данных.
- Закройте текущий запрос по команде контекстного меню Закрыть (Close) или нажав кнопку окна запроса Закрыть (Close).
- Выполните сохраненный запрос, выделив запрос в области навигации и выбрав в контекстном меню команду Открыть (Open).
- Для редактирования запроса выделите его в области навигации и выполните в контекстном меню команду Конструктор (Design View).
Задача 2. Пусть надо выбрать товары, цена которых не более 1000 руб., и НДС не более 10%, а также выбрать товары, цена которых более 2500 руб. Результат должен содержать наименование товара (НАИМ_ТОВ), его цену (ЦЕНА) и НДС (СТАВКА_НДС).
- Создайте новый запрос в режиме конструктора, добавьте таблицу ТОВАР. В окне конструктора (рис. 4.5) последовательно перетащите из списка полей таблицы ТОВАР в бланк запроса поля НАИМ_ТОВ, ЦЕНА, СТАВКА_НДС.
- Запишите Условия отбора (Criteria), как показано в бланке запроса на рис. 4.5. Между условиями, записанными в одной строке, выполняется логическая операция AND. Между условиями, записанными в разных строках, выполняется логическая операция OR.
- Выполните запрос, щелкните на кнопке Выполнить (Run) в группе Результаты (Results). На экране появится окно запроса в режиме таблицы с записями из таблицы ТОВАР, отвечающими заданным условиям отбора.
- Сохраните запрос, выполнив соответствующую команду в контекстном меню запроса, которое вызывается при установке курсора на заголовок запроса. Дайте ему имя Пример2.
Задача 3. Пусть надо выбрать все накладные за заданный период. Результат должен содержать номер накладной (НОМ_НАК), код склада (КОД_СК), дату отгрузки (ДАТА_ОТГР) и общую стоимость отгруженного товара (СУММА_НАКЛ).
- Создайте новый запрос в режиме конструктора, добавьте таблицу НАКЛАДНАЯ. В окне конструктора последовательно перетащите из списка полей таблицы НАКЛАДНАЯ в бланк запроса все необходимые поля.
- Для поля ДАТА_ОТГР в строке Условия отбора (Criteria) запишите Between #11.01.2008# And #31.03.2008#. Оператор Between задает интервал дат (в ANSI-92 вместо знака # используются одинарные кавычки ‘). Кроме того, этот оператор позволяет задать интервал для числового значения.
Для закрепления смотрим видеоурок:
Вычисляемые поля в запросах Access далее.
Конструктор не распознает некоторые редкие методы языка SQL. Их можно применить, только откорректировав команду SQL в Режиме SQL, и после внесения этих изменений вы больше не сможете просмотреть ваш запрос в Конструкторе (пока позже не удалите неподдерживаемое изменение).
Запрос на объединение (union query) — один из примеров запросов, временами очень полезных, но не поддерживаемых в Конструкторе запросов. Запрос на объединение объединяет результаты из нескольких таблиц и затем представляет их на общем листе данных.
По сути, запрос на объединение составляется из двух (или нескольких) отдельных запросов на выборку. Тонкость заключается в том, что структура результатов всех запросов на выборку должна быть одинаковой. Таким образом, следует извлечь аналогичные столбцы из каждой таблицы в одном и том же порядке. Если вы выполнили все перечисленные требования, остается только вставить слово union между двумя запросами.
Далее приведен запрос на объединение, который представляет список имен и фамилий, полученный из двух таблиц — Customers и Employees:
SELECT Customers.FirstName, Customers.LastName
FROM Customers
UNION
SELECT Employees . FirstName, Employees . LastName
FROM Employees
Этот запрос функционирует, несмотря на то, у таблиц Customers и Employees разная структура. Но гораздо важнее то, что структура результатов запросов к обеим таблицам, в данном случае поля FirstName и LastName, совпадает.
ПРИМЕЧАНИЕ
Создать запрос на объединение можно, даже если имена столбцов отличаются — если в таблице Employees содержатся столбцы с именами F_Name и L_Name, запрос все равно будет выполняться. Программа Access просто использует имена столбцов из первого запроса при выводе результатов на лист данных.
В данном примере, когда вы просматриваете результаты запроса, на экран выводится список имен и фамилий клиентов, за которым следует список имен и фамилий сотрудников, хотя вы не сможете с уверенностью определить, где заканчивается одна таблица и начинается другая. Вы также не сможете редактировать данные — запросы на объединение предназначены исключительно для просмотра сведений, а не для их изменения. Программа Access не позволит вам редактировать запросы на объединение в Конструкторе запросов. Если вы щелкнете правой кнопкой мыши заголовок вкладки и выберете Конструктор, вместо конструктора вы попадете в Режим SQL.
Программа помещает запросы па объединение в группу Несвязанные объекты (Unrelated Objects) в области переходов и применяет для их обозначения пиктограмму, отличающуюся от пиктограммы обычного запроса (рис. 6.14).
Примечание
Если в результатах запроса на объединение выявляются совпадения, на экран выводится одна копия. Это поведение можно изменить, если заменить слово UNION словосочетанием UNION ALL. В предыдущем примере этот шаг вызовет повторное отображение в объединенных результатах человека, являющегося и клиентом, и сотрудником.
Рис. 6.15. На рисунке в области Зависимости объектов анализируется таблица Products. Отображены три таблицы, связанные с Products, и четыре запроса, использующие таблицу Products. В любой объект можно углубиться, щелкнув кнопкой мыши квадратик со знаком «плюс» (+), расположенный рядом с именем объекта. (Щелкните кнопкой мыши + рядом с именем TopProducts, чтобы выяснить, используют ли другие объекты БД данный запрос.) В конце списка находится раздел Пропущенные объекты. В нем отображен запрос на объединение CustomersAndEmployees, и это свидетельствует о том, что у программы Access нет данных о его зависимостях Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта. |
Так же как и в запросах в базе данных Access, можно создавать разные типы объединений таблиц:
- внутренние, когда из обеих таблиц отбираются только те записи, у которых совпадают значения связанных полей;
- внешние, когда в одной из таблиц выбираются все записи, а в другой — только связанные.
Существует три типа внешних объединений:
- левое внешнее объединение, когда выбираются все строки из левой таблицы;
- правое внешнее объединение, когда выбираются все строки из правой таблицы;
- полное внешнее объединение, когда выбираются строки из обеих таблиц.
По умолчанию используется внутреннее объединение таблиц. Если нужно изменить тип объединения, щелкните правой кнопкой мыши по линии связи (удобнее всего по ромбику в центре связи) и выберите соответствующую команду в контекстном меню. В представлении «Products by Category» (Товары по типам) (см. рис. 17.36) это будут команды:
- Выделить все строки с Categories (Select All Rows from Categories);
- Выделить все строки с Products (Select All Rows from Product).
Или можно выбрать из контекстного меню команду Свойства (Properties) и открыть диалоговое окно Свойства (Properties) .
Флажки в группе Включить строки (Include rows) позволяют установить любой тип внешнего соединения между таблицами. При изменении типа соединения меняется значок на связи — дополняется ромб справа или слева до квадрата.
Как видно из рис. 17.38, записи в таблицах могут связываться не только по условию равенства связанных полей. Для связи можно использовать любой из операторов сравнения (>, =,