Понякога процесът на създаване и използване на заявки в Access се състои просто от избиране на полета от таблица, може би прилагане на някои критерии и след това преглед на резултатите. Но какво да направите, ако, както по-често се случва, данните, които ви трябват, са разпръснати в няколко таблици? За щастие можете да създадете заявка, която комбинира данни от множество източници. Тази тема разглежда някои сценарии, в които извличате данни от няколко таблици, и показва как да го направите.
Какво искате да направите?
Използване на данни от свързана таблица за подобряване на информацията във вашата заявка
Може да има случаи, в които заявка, базирана на една таблица, ви дава необходимата информация, но извличането на данни от друга таблица би ви помогнало да направите резултатите от заявката още по-ясни и по-полезни. Да предположим например, че имате списък с идентификатори на служители, които се показват в резултатите от заявката ви. Осъзнавате, че би било по-полезно да виждате името на служителите в резултатите, но имената на служителите се намират в друга таблица. За да се покажат имената на служителите в резултатите от заявката, трябва да включите и двете таблици във вашата заявка.
Използване на съветника за заявки за създаване на заявка от основна и свързана таблица
-
Уверете се, че таблиците имат дефинирани релация в Прозорец за релации.
Как?
-
В раздела Инструменти за бази данни, в групата Показване/скриване щракнете върху Релации.
-
В раздела Проектиране, в групата Релации щракнете върху Всички релации.
-
Идентифицирайте таблиците, за които трябва да има дефинирана релация.
-
Ако таблиците се виждат в прозореца "Релации", проверете дали вече е дефинирана релация.
Релацията се показва като линия, свързваща двете таблици в общо поле. Можете да щракнете двукратно върху линия на релация, за да видите кои полета в таблиците са свързани от релацията.
-
Ако таблиците не се виждат в прозореца "Релации", трябва да ги добавите.
В раздела Проектиране, в групата Показване/скриване щракнете върху Имена на таблици.
Щракнете двукратно върху всяка от таблиците, които искате да покажете, след което щракнете върху Затвори.
-
-
Ако не откриете релация между двете таблици, създайте такава, като плъзнете поле от едната таблица в поле от другата таблица. Полетата, в които създавате релацията между таблиците, трябва да имат идентични типове данни.
Забележка: Можете да създадете релация между поле, което е от Тип данни "Автономериране", и поле, което е от Числов тип данни, ако това поле има дълъг размер на цяло число. Това често ще бъде така, когато създавате релация "един към много".
Появява се диалоговият прозорец Редактиране на релации.
-
Щракнете върху Създай, за да създадете релацията.
За повече информация относно опциите, с които разполагате, когато създавате релация, вижте статията Създаване, редактиране или изтриване на релация.
-
Затворете прозореца за релации.
-
-
В раздела Създаване, в групата Заявки щракнете върху Съветник за заявки.
-
В диалоговия прозорец Нова заявка щракнете върху Съветник за прости заявки и след това щракнете върху OK.
-
В разгъващия се списък Таблици/заявки щракнете върху таблицата, съдържаща основната информация, която искате да включите във вашата заявка.
-
В списъка Налични полета щракнете върху първото поле, което искате да включите във вашата заявка, след което щракнете върху бутона с една стрелка надясно, за да преместите полето в списъка Избрани полета. Направете същото с всяко допълнително поле от тази таблица, което искате да включите във вашата заявка. Това може да са полета, които искате да бъдат върнати в резултата от заявката, или полета, които искате да използвате за ограничаване на редовете в резултата чрез прилагане на критерии.
-
В разгъващия се списък Таблици/заявки щракнете върху таблицата, съдържаща свързаните данни, които искате да използвате, за да подобрите резултатите от заявката.
-
Добавете полетата, които искате да използвате за подобряване на резултатите от заявката, в списъка Избрани полета и след това щракнете върху Напред.
-
Под Каква заявка искате – подробна или резюме? щракнете или върху Подробен, или върху Резюме.
Ако не искате заявката ви да изпълнява агрегатни функции (Sum, Avg, Min, Max, Count, StDev или Var), изберете подробна заявка. Ако искате заявката да изпълнява агрегатна функция, изберете резюме. След като направите своя избор, щракнете върху Напред.
-
Щракнете върху Готово, за да видите резултатите.
Пример, който използва примерната база данни на Northwind
В следващия пример ще използвате съветника за заявка, за да създадете заявка, която показва списък с поръчки, таксата за експедиране на всяка поръчка и името на служителя, обработил поръчката.
Забележка: Този пример включва промяна на примерната база данни на Northwind. Ако искате, можете да направите резервно копие на примерната база данни на Northwind и след това да следвате примера, като използвате това резервно копие.
Използване на съветника за заявки за създаване на заявката
-
Отворете примерната база данни на Northwind. Затворете формуляра за влизане.
-
В раздела Създаване, в групата Заявки щракнете върху Съветник за заявки.
-
В диалоговия прозорец Нова заявка щракнете върху Съветник за прости заявки и след това щракнете върху OK.
-
В разгъващия се списък Таблици/заявки щракнете върху Таблица: Поръчки.
-
В списъка Налични полета щракнете двукратно върху ИД на поръчката, за да преместите това поле в списъка Избрани полета. Щракнете двукратно върху Такса за експедиране, за да преместите това поле в списъка Избрани полета.
-
В разгъващия се списък Таблици/заявки щракнете върху Таблица: Служители.
-
В списъка Налични полета щракнете двукратно върху Собствено име, за да преместите това поле в списъка Избрани полета. Щракнете двукратно върху Фамилно име, за да преместите това поле в списъка Избрани полета. Щракнете върху Напред.
-
Тъй като създавате списък на всички поръчки, искате да използвате подробна заявка. Ако искате да сумирате таксата за експедиране по служител или да извършите друга агрегатна функция, трябва да използвате резюме. Щракнете върху Подробен (показва всяко поле на всеки запис), след което щракнете върху Напред.
-
Щракнете върху Готово, за да видите резултатите.
Заявката връща списък с поръчки, всяка със своята такса за експедиране, както и собственото и фамилното име на служителя, който я е обработил.
Свързване на данните в две таблици с помощта на техните релации с трета таблица
Често данните в двете таблици са свързани помежду си чрез трета таблица. Това обикновено е така, защото данните в първите две таблици са свързани чрез релация "много към много". Често е добра практика за проектиране на база данни да се раздели релация "много към много" между две таблици на две релации "един към много", включващи три таблици. Можете да направите това, като създадете трета таблица, наречена свързваща таблица или релационна таблица, която има първичен ключ и външен ключ за всяка от другите таблици. След това се създава релация "един към много" между всеки външен ключ в свързващата таблица и съответния първичен ключ на една от другите таблици. В такива случаи трябва да включите и трите таблици във вашата заявка дори ако искате да извлечете данни само от две от тях.
Създаване на заявка за избиране чрез таблици с релация "много към много"
-
В раздела Създаване, в групата Заявки щракнете върху Проектиране на заявка.
-
Щракнете двукратно върху двете таблици, съдържащи данните, които искате да включите във вашата заявка, както и върху свързващата таблица, която ги свързва, и след това щракнете върху Затвори.
И трите таблици се показват в работната област за проектиране на заявка, свързани в съответните полета.
-
Щракнете двукратно върху всяко от полетата, които искате да използвате в резултатите от заявката. След това всяко от полета се показва в мрежата за проектиране на заявка.
-
В мрежата за проектиране на заявка използвайте реда Критерии, за да въведете критериите за полета. За да използвате критерий за поле, без да показвате полето в резултатите от заявката, махнете отметката от квадратчето в реда Покажи за това поле.
-
За да сортирате резултатите по стойностите в поле, в мрежата за проектиране на заявка щракнете върху Възходящо или Низходящо (в зависимост от начина, по който искате да сортирате записите) в реда Сортиране за това поле.
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
Access показва резултата от заявката в изглед на лист с данни.
Пример, който използва примерната база данни на Northwind
Забележка: Този пример включва промяна на примерната база данни на Northwind. Ако искате, можете да направите резервно копие на примерната база данни на Northwind и след това да следвате примера, като използвате резервното копие.
Да предположим, че имате нова възможност: доставчик в София е открил вашия уеб сайт и може да иска да работи с вас. Въпреки това той функционира само в София и Карлово. Доставчикът доставя всяка категория хранителни продукти, които вие предлагате. Бизнесът на доставчика е доста голям и искат от вас гаранции, че можете да им осигурите достъп до достатъчно потенциални продажби, така че да си заслужава: поне 5000,00 лв годишно в продажби (около 3000,00 щ.д.). Можете ли да им осигурите необходимия пазар?
Данните, които са ви необходими, за да отговорите на този въпрос, се намират на две места: таблица "Клиенти" и таблица "По-подробно за поръчките". Тези таблици са свързани помежду си чрез таблица "Поръчки". Релациите между таблиците вече са дефинирани. В таблицата "Поръчки" всяка поръчка може да има само един клиент, свързан с таблица "Клиенти" в полето "ИД на клиента". Всеки запис в таблицата "По-подробно за поръчките" е свързан само с една поръчка в таблицата "Поръчки" в полето "ИД на поръчката". По този начин един клиент може да има много поръчки, всяка от които има много подробности за поръчката.
В този пример ще създадете кръстосана заявка, която показва общата сума годишните продажби в градовете София и Карлово.
Създаване на заявката в режим на проектиране.
-
Отворете базата данни на Northwind. Затворете формуляра за влизане.
-
В раздела Създаване, в групата Заявки щракнете върху Проектиране на заявка.
-
Щракнете двукратно върху Клиенти, Поръчки и след товаВърху Подробни данни за поръчката.
И трите таблици се показват в работната област за проектиране на заявка.
-
В таблицата "Клиенти" щракнете двукратно върху полето "Град", за да го добавите в мрежата за проектиране на заявка.
-
В колоната Град на мрежата за проектиране на заявка, в реда Критерии въведете In ("София";"Карлово"). По този начин в заявката ще бъдат включени само тези записите, за които клиентът се намира в един от тези два града.
-
В таблицата "По-подробно за поръчките" щракнете двукратно върху полетата "Дата на отпускане" и "Единична цена".
Полетата се добавят в мрежата за проектиране на заявка.
-
В колоната Дата на отпускане на мрежата за проектиране на заявка изберете реда Поле. Заместете [Дата на отпускане] с Година: Format([Дата на отпускане];"гггг"). Това създава псевдоним на полето, Година, което ви позволява да използвате само частта за годината от стойността в полето "Дата на отпускане".
-
В колоната Единична цена на мрежата за проектиране на заявка изберете реда Поле. Заместете [Единична цена] с Продажби: [По-подробно за поръчките].[Единична цена]*[Количество]-[По-подробно за поръчките].[Единична цена]*[Количество]*[Отстъпка]. Това създава псевдоним на полето, Продажби, с което се изчисляват продажбите за всеки запис.
-
В раздела Проектиране, в групата Тип на заявката щракнете върху Кръстосана.
Два нови реда, Общо и Кръстосана, се появяват в мрежата за проектиране на заявка.
-
В колоната Град на мрежата за проектиране на заявка щракнете върху реда Кръстосана и след това щракнете върху Заглавие на ред.
По този начин стойностите за град ще се покажат като заглавия на редовете (т.е. заявката ще върне по един ред за всеки град).
-
В колоната Година щракнете върху реда Кръстосана и след това щракнете върху Заглавие на колона.
По този начин стойностите за година ще се покажат като заглавия на колоните (т.е. заявката ще върне по една колона за всяка година).
-
В колоната Продажби щракнете върху реда Кръстосана и след това щракнете върху Стойност.
По този начин стойностите за продажбите ще се покажат в пресечната точка между редовете и колоните (т.е. заявката ще върне по една стойност за продажби за всяка комбинация от град и година).
-
В колоната Продажби щракнете върху реда Общо и след това щракнете върху Sum.
По този начин заявката ще сумира стойностите в тази колона.
Можете да оставите реда Общо за другите две колони със стойността по подразбиране Групиране по, защото искате да видите всяка стойност за тези колони, а не сумирани стойности.
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
Вече имате заявка, която връща общата сума на продажбите по година в София и Карлово.
Преглед на всички записи от две подобни таблици
Понякога може да искате да комбинирате данни от две таблици, които са идентични по структура, но една от тях се намира в друга база данни. Обмислете сценария, описан по-долу.
Да предположим, че сте анализатор, който работи с данни за ученици. Включвате се в инициатива за споделяне на данни между вашето училище и друго училище, за да могат и двете училища да подобрят учебните си програми. За някои от въпросите, които искате да проучите, би било по-добре да прегледате заедно всички записи и от двете училища, вместо да преглеждате записите от всяко училище поотделно.
Можете да импортирате данните от другото училище в нови таблици във вашата база данни, но тогава промените в данните на другото училище няма да бъдат отразени във вашата база данни. По-добро решение би било да създадете връзка към таблиците на другото училище и след това да създадете заявки, които да комбинират данните, когато ги изпълните. Ще можете да анализирате данните като един общ набор, вместо да извършвате два анализа и да се опитвате да ги интерпретирате като един.
За да прегледате всички записи от две таблици с идентична структура, трябва да използвате заявка за обединение.
Заявките за обединение не могат да се покажат в режим на проектиране. Трябва да ги създадете с помощта на SQL команди, които въвеждате в раздел за обекти в SQL изглед.
Създаване на заявка за обединение с помощта на две таблици
-
В раздела Създаване, в групата Заявки щракнете върху Проектиране на заявка.
-
В раздела Проектиране, в групата Тип на заявката щракнете върху Обединение.
Заявката превключва от режим на проектиране в SQL изглед. В този момент разделът за обекти в SQL изглед е празен.
-
В SQL изгледа въведете SELECT, последвано от списък на полетата от първата от таблиците, които искате в заявката. Имената на полетата трябва да са оградени с квадратни скоби и разделени със запетаи. Когато приключите с въвеждането на имената на полетата, натиснете ENTER. Курсорът се премества един ред надолу в SQL изгледа.
-
Въведете FROM, последвано от името на първата от таблиците, които искате в заявката. Натиснете клавиша ENTER.
-
Ако искате да зададете критерий за поле от първата таблица, въведете WHERE, последвано от името на полето, оператор за сравнение (обикновено знак за равенство (=)) и критерия. Можете да добавите допълнителни критерии в края на клаузата WHERE, като използвате ключовата дума AND и същия синтаксис, използван за първия критерий; например WHERE [Ниво на клас]="100" AND [Кредитни часове]>2. Когато приключите със задаването на критерии, натиснете ENTER.
-
Въведете UNION и натиснете ENTER.
-
Въведете SELECT, последвано от списък на полетата от втората таблица, която искате в заявката. Трябва да включите същите полета от тази таблица, които включихте и от първата таблица, и в същия ред. Имената на полетата трябва да са оградени с квадратни скоби и разделени със запетаи. Когато приключите с въвеждането на имената на полетата, натиснете ENTER.
-
Въведете FROM, последвано от името на втората таблица, която искате да включите в заявката. Натиснете клавиша ENTER.
-
Ако желаете, добавете клаузата WHERE, както е описано в стъпка 6 от тази процедура.
-
Въведете точка и запетая (;), за да укажете края на вашата заявка.
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
Резултатите се показват в изглед на лист с данни.