Когато включите няколко източника на данни в заявка на Access, можете да използвате съединения, за да ограничите записите, които искате да видите, въз основа на това как източниците на данни са свързани помежду си. Можете също да използвате съединения, за да комбинирате записи от двата източника на данни, така че всяка двойка записи от източниците да стане един запис в резултатите от заявката.
В тази статия се обсъждат различните типове съединения и ви показва как да ги използвате в заявка. По подразбиране се създава автоматично съединение, ако вече има релация между два източника на данни, които използвате в заявка. Създава се и съединение, ако има полета, които ясно си съответстват. Можете да изтриете автоматично създадено съединение. Тази статия предоставя основна информация за релациите между таблиците, включително как да създадете такива.
Забележка: Можете да съедините заявките по същия начин, по който съединявате таблици, и можете също да съединявате и двете.
В тази статия
Общ преглед
Базата данни е колекция от таблици с данни, които имат логически релации помежду си. Можете да използвате релации, за да свържете таблици по полета, които са общи за тях. Таблицата може да бъде част от произволен брой релации, но всяка релация винаги има точно две таблици. В заявка релацията се представя от съединение.
Когато добавяте таблици към заявка, Access създава съединения, базирани на релации, които са дефинирани между таблиците. Можете ръчно да създавате съединения в заявки дори ако те не представят релации, които вече са дефинирани. Ако използвате други заявки (вместо или в допълнение към таблици) като източници на данни за заявка, можете да създадете съединения между заявките източници, както и между тези заявки и всички таблици, които използвате като източници на данни.
Съединенията имат поведение по подобие на критериите за заявки по това, че установяват правила, с които данните трябва да съвпадат, за да бъдат включени в операциите на заявката. За разлика от критериите, съединенията също указват, че всяка двойка редове, които удовлетворяват условията на съединението, ще се комбинират в набора записи, за да формират един ред.
Има четири основни типа съединения: вътрешни съединения, външни съединения, кръстосани съединения и неравни съединения. Тази статия разглежда всеки тип съединение, което можете да използвате, защо използвате всеки тип и как да създадете съединенията.
Съединенията са към заявки какви релации има към таблиците: индикация за това как данните в два източника могат да се комбинират въз основа на стойностите на данните, които са общи за тях. Ето илюстрация на съединение в изглед за проектиране на заявки с отворени свойства на съединението в диалогов прозорец:
Тази линия между таблиците представя съединението. Щракнете двукратно върху съединение, за да отворите диалоговия прозорец Свойства на съединението (описан) и да прегледате или промените съединението.
Съединенията понякога са насочващи. Тази област на диалоговия прозорец ви показва коя таблица е съединяващата и кои полета се използват за съединяване на таблиците.
Тази област определя типа на съединението: опция 1 е вътрешно съединение, 2 е ляво външно съединение, а 3 е дясно външно съединение.
Полетата от двете таблици могат да се използват и данните, които се отнасят за дадена задача, се показват от всяка. Във вътрешното съединение не се включват други данни. Във външно съединение несвързаните записи от една таблица също се включват в резултатите от заявката.
Типове съединения
Има четири основни типа съединения: вътрешни съединения, външни съединения, кръстосани съединения и неравни съединения. Кръстосаните съединения и неравните съединения са разширени типове съединения и рядко се използват, но би трябвало да знаете за тях, за да разберете напълно как работят съединенията.
Вътрешни съединения: комбинират се само свързани данни от двете таблици
Вътрешното съединение е такова, в което Access включва данни от таблица само ако има съответстващи данни в свързаната таблица, и обратно. През повечето време ще използвате вътрешни съединения. Когато създавате съединение и не зададете какъв вид съединение е то, Access предполага, че искате вътрешно съединение. Вътрешните съединения са полезни, защото ви позволяват да комбинирате данни от два източника въз основа на споделени стойности, така че виждате данни само когато има пълна картина.
Външни съединения: всички свързани данни са комбинирани правилно, както и всички останали записи от една таблица
Външното съединение е като вътрешно съединение, но добавя останалите редове от една от таблиците. Външните съединения са по посока: лявото външно съединение включва всички записи от лявата таблица – първата таблица в съединението – а дясното външно съединение включва всички записи от дясната таблица – втората таблица в съединението.
Пълни външни съединения: всички данни, комбинирани, където е възможно
В някои системи външното съединение може да включва всички редове от двете таблици, като редовете са комбинирани, когато съответстват. Това се нарича пълно външно съединение и Access не ги поддържа изрично. Можете обаче да използвате кръстосано съединение и критерии, за да постигнете същия ефект.
Кръстосани съединения: всички данни, комбинирани по всеки възможен начин
В повечето моменти кръстосаното съединение е страничен ефект на добавянето на две таблици към заявка и след това забравянето им да се съединят. Access интерпретира това в смисъл, че искате да виждате всеки запис от една таблица в комбинация с всеки запис от другата таблица – всяка възможна комбинация от записи. Тъй като не могат да се комбинират данни, този вид съединение рядко дава полезни резултати. Но има няколко случая, когато кръстосаната връзка е точно това, което ви трябва.
Неравни съединения: като обикновено съединение, но използване на различно сравнение за комбиниране на редове
Неравните съединения използват оператор, различен от знака за равенство (=), за да сравняват стойности и да определят дали и как да комбинират данните. Неравните съединения не се поддържат изрично, но можете да използвате кръстосано съединение и критерии, за да постигнете същия ефект.
Показване на редовете, където съществува обща стойност и в двете съединени таблици
Ако искате да покажете само тези редове, които имат съответстващи стойности в съединяващото поле, използвайте вътрешно съединение. Access създава автоматично вътрешните съединения.
Вътрешните съединения са най-често срещаният тип съединение. Те казват на заявката, че редовете от една от съединените таблици съответстват на редовете в другата таблица въз основа на данните в съединените полета. Когато се изпълнява заявка с вътрешно съединение, само тези редове, за които съществува обща стойност и в двете съединени таблици, ще бъдат включени в операциите на заявката.
Как да използвам вътрешно съединение?
През повечето време не е нужно да правите нищо, за да използвате вътрешно съединение. Ако таблиците, които добавяте към заявка, вече имат релации, Access автоматично създава вътрешно съединение между всяка двойка свързани таблици, когато добавяте таблиците. Ако е наложена цялост на връзките, Access показва също "1" над линията на съединение, за да покаже коя таблица е от страната "един" на релация "един към много", и символа за безкрайност (∞), за да покаже коя таблица е от страната "много".
Дори ако не сте създали релации, Access автоматично създава вътрешни съединения, ако добавите две таблици към заявка и всяка от тези таблици има поле с един и същ или съвместим тип данни, а едно от полетата за съединение е първичен ключ. Символите "един" и "много" не се показват в този случай, защото не е наложена цялост на връзките.
Ако добавите заявки към вашата заявка и не сте създали релации между тези заявки, Access не създава автоматично вътрешни съединения между тези заявки или между заявки и таблици. По принцип трябва да ги създадете сами. Можете да създадете вътрешно съединение, като плъзнете поле от един източник на данни в поле в друг източник на данни. Access показва линия между двете полета, за да покаже, че е създадено съединение.
SQL синтаксис за вътрешно съединение
Вътрешните съединения са зададени в SQL в клаузата FROM, както е показано по-долу:
FROM таблица1 INNER JOIN таблица2 ON таблица1.поле1 сравнете таблица2.поле2
Операцията INNER JOIN има следните части:
Част |
Описание |
таблица1, таблица2 |
Имената на таблиците, от които се комбинират записи. |
поле1, поле2 |
Имена на полетата, които са съединени. Ако не са числови, полетата трябва да бъдат от един и същ тип данни и да съдържат данни от еднакъв вид, но не е необходимо да имат едни и същи имена. |
сравнение |
Всеки релационен оператор за сравнение: "=," "<," ">," "<=," ">=" или "<>." |
За повече информация относно синтаксиса на вътрешното съединение вж. темата INNER JOIN Operation.
Показване на всички редове от една таблица и съответните редове от другата таблица
Външните съединения указват на заявката, че въпреки че някои от редовете от двете страни на съединението съответстват точно, заявката трябва да включва всички редове от едната таблица, както и тези редове от другата таблица, които имат обща стойност от двете страни на съединението.
Външните съединения могат да бъдат оставени външни съединения или да са десни външни съединения. В лявото външно съединение заявката включва всички редове от първата таблица в клаузата FROM на SQL командата и само тези редове от другата таблица, където съединяващото поле съдържа общи за двете таблици стойности. В дясното външно съединение заявката включва всички редове от втората таблица в клаузата FROM на SQL командата и само тези редове от другата таблица, където съединяващото поле съдържа общи за двете таблици стойности.
Забележка: Лесно можете да разберете коя таблица е лявата или дясната таблица в дадено съединение, като щракнете двукратно върху съединението и след това погледнете в диалоговия прозорец Свойства на съединението . Можете също да превключите към SQL изглед и след това да прегледате клаузата FROM.
Тъй като някои от редовете от едната страна на външно съединение няма да имат съответстващи редове от другата таблица, някои от полетата, върнати в резултатите от заявката от тази друга таблица, ще бъдат празни, когато редовете не съответстват.
Как да използвам външно съединение?
Можете да създадете външно съединение чрез модифициране на съществуващо вътрешно съединение. Ако не съществува вътрешно съединение, трябва да го създадете и след това да го промените на външно съединение.
Промяна на вътрешно съединение към външно съединение
-
В изглед за проектиране на заявки щракнете двукратно върху съединението, което искате да промените.
Появява се диалоговият прозорец Свойства на съединението.
-
В диалоговия прозорец Свойства на съединението обърнете внимание на възможностите, изброени до опция 2 и опция 3.
-
Щракнете върху опцията, която искате да използвате, и след това щракнете върху OK.
-
Access показва съединението и показва стрелка, която сочи от източника на данни, където всички редове ще бъдат включени към източника на данни, където ще бъдат включени само тези редове, които удовлетворяват условието за съединение.
Нееднозначни външни съединения
Ако създадете заявка, която съдържа LEFT JOIN и INNER JOIN, е възможно Access да не успее да определи коя операция за съединение да изпълни първо. Тъй като резултатите са различни в зависимост от това дали първо се извършва лявото или вътрешното съединение, Access показва съобщение за грешка:
За да коригирате тази грешка, трябва да модифицирате заявката, така че да е ясно кое съединение да се изпълни първо.
SQL синтаксис за външно съединение
Външните съединения са зададени в SQL в клаузата FROM, както е показано по-долу:
FROM таблица1 [ LEFT | RIGHT ] JOIN таблица2
ON таблица1.поле1 сравнение таблица2.поле2Операциите LEFT JOIN и RIGHT JOIN имат следните части:
Част |
Описание |
таблица1, таблица2 |
Имената на таблиците, от които се комбинират записи. |
поле1, поле2 |
Имената на полетата, които се свързват. Полетата трябва да бъдат от един и същ тип данни и да съдържат данни от един и същ вид, но не е необходимо да имат едни и същи имена. |
сравнение |
Всеки релационен оператор за сравнение: "=," "<," ">," "<=," ">=" или "<>." |
За повече информация относно синтаксиса на външно съединение вж. темата LEFT JOIN, RIGHT JOIN Operations.
Показване на всички редове от двете таблици и присъединяване към тях, където съществува обща стойност
Когато искате да покажете всички редове от две таблици и да ги съедините въз основа на общи стойности, използвате пълно външно съединение. Access не поддържа изрично пълни външни съединения, но можете да постигнете същия ефект с помощта на заявка за обединение. Следващата процедура обяснява как да направите това, но ако искате повече информация за заявките за обединение, вижте раздела Вж. също .
За да използвате заявка за обединение, за да изпълните пълно външно съединение:
-
Създайте заявка, която има ляво външно съединение в полето, което искате да използвате за пълно външно съединение.
-
В раздела Начало, в групата Изгледи щракнете върху Изглед, а след това щракнете върху SQL изглед.
-
Натиснете CTRL+C, за да копирате SQL кода.
-
Изтрийте точка и запетая в края на клаузата FROM и след това натиснете клавиша ENTER.
-
Въведете UNION и натиснете ENTER.
Забележка: Не използвайте ключовата дума ALL, когато използвате заявка за обединение, за да изпълните пълно външно съединение.
-
Натиснете CTRL+V, за да поставите SQL кода, който копирахте в стъпка 3.
-
В кода, който сте поставили, променете LEFT JOIN на RIGHT JOIN.
-
Изтрийте точка и запетая в края на втората клауза FROM и след това натиснете КЛАВИША ENTER.
-
Добавете клауза WHERE, която указва, че стойността на полето за съединение е NULL в първата таблица, посочена в клаузата FROM (лявата таблица).
Ако например клаузата FROM е:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Трябва да добавите следната клауза WHERE:
WHERE Products.ID IS NULL
-
Въведете точка и запетая (;) в края на клаузата WHERE, за да укажете края на заявката за обединение.
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
Кръстосани съединения
Кръстосаните съединения са различни от вътрешните и външните съединения по това, че не са изрично представени в Access. При кръстосано съединение всеки ред от една таблица се комбинира с всеки ред от друга таблица, в резултат на което се получава така наречения кръстосан продукт или декартов продукт. Всеки път, когато изпълнявате заявка, която има таблици, които не са изрично съединени, резултатът е кръстосан продукт. Кръстосаните съединения обикновено са неволни, но има случаи, в които те могат да бъдат полезни.
Защо да използвам кръстосана връзка?
Ако искате да прегледате всяка възможна комбинация от редове между две таблици или заявки, използвайте кръстосано съединение. Да предположим например, че вашата фирма е имала впечатляваща година и обмисляте да дадете отстъпки на клиентите си. Можете да създадете заявка, която сумира покупките на всеки клиент, да създадете малка таблица, която има няколко възможни процента на отстъпки, и да комбинирате двете в друга заявка, която извършва кръстосано съединение. Завършвате със заявка, която показва набор от хипотетични отстъпки за всеки клиент.
Как да използвам кръстосано съединение?
Кръстосано съединение се създава всеки път, когато включите таблици или заявки във вашата заявка, и не създавате поне едно явно съединение за всяка таблица или заявка. Access комбинира всеки ред от всяка таблица или заявка, която не е изрично присъединена към друга таблица или заявка към всеки друг ред в резултатите. Да разгледаме сценария за отстъпки от предходния параграф. Да предположим, че имате 91 клиенти и искате да видите пет възможни процента на отстъпки. Вашето кръстосано съединение създава 455 реда (произведението на 91 и 5).
Както можете да си представите, неволните кръстосани съединения могат да създадат огромен брой редове в резултатите от заявката. Нещо повече, тези резултати обикновено са безсмислени, защото ако всъщност не възнамерявате да комбинирате всеки ред с всеки друг ред, повечето от комбинираните редове, които се появяват в резултатите, няма да имат смисъл. И накрая, изпълнението на заявки, които използват неволни кръстосани съединения, може да отнеме много време.
1. Полетата в кръг трябва да се съединяват един към друг.
1. Обърнете внимание на много големия брой записи.
1. Обърнете внимание, че броят на записите е много по-малък.
Съединяване на таблици въз основа на неравенство между стойностите на полетата
Не е необходимо съединенията да се основават на еквивалентността на съединените полета. Съединението може да се базира на всеки оператор за сравнение, като например по-голямо от (>), по-малко от (<) или не е равно на (<>). Съединенията, които не са базирани на еквивалентност, се наричат неравни съединения.
Ако искате да комбинирате редовете от два източника на данни въз основа на стойности на полета, които не са равни, използвайте неравно съединение. Обикновено неравните съединения се базират или на операторите за сравнение по-голямо от (>), по-малко от (<), по-голямо или равно на (>=), или по-малко или равно на (<=). Unequal joins that are based on the does not equal (<>) operator can return almost as cross joins, and the results can be difficult to interpret.
Как да използвам неравно съединение?
Не се поддържат неравни съединения в изглед за проектиране. Ако искате да ги използвате, трябва да го направите с помощта на SQL изглед. Можете обаче да създадете съединение в изглед за проектиране, да превключите на SQL изглед, да намерите оператора за сравнение е равно на (=) и да го промените на оператора, който искате да използвате. След като направите това, можете отново да отворите заявката в изглед за проектиране само ако първо върнете оператора за сравнение обратно на равно на (=) в SQL изглед.
Изтриване на съединение
Ако Access автоматично създаде съединение, което не искате, или ако създадете съединение по погрешка – например съединение между две полета, които имат различни типове данни – можете да изтриете съединението.
-
В мрежата за проектиране на заявки щракнете върху съединението, което искате да премахнете.
-
Натиснете DELETE.
-или-
-
В мрежата за проектиране на заявки щракнете с десния бутон върху съединението, което искате да премахнете, и след това щракнете върху Изтрий.