Перейти к основному контенту
Office
Объединение таблиц и запросов

Объединение таблиц и запросов

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

При включении нескольких источников данных в запрос Access вы можете использовать соединения для отбора записей, которые нужно просмотреть, в зависимости от того, как источники данных связаны друг с другом. Соединения также используются для объединения записей из источников данных, так что каждая пара записей из источников становится одной записью в результатах запроса.

В этой статье описаны различные типы соединений и показано, как их использовать в запросе. По умолчанию соединение создается автоматически, если в запросе уже есть связь между двумя источниками данных, которые вы используете. Соединение также создается, если есть поля, которые четко соответствуют друг другу. Вы можете удалить автоматически созданное соединение. В этой статье приводятся основные сведения о связях между таблицами, в том числе о том, как ее создать.

Примечание: Вы можете присоединяться к запросам таким же образом, как и к таблицам, а также присоединяться к ним.

В этой статье

Обзор

Типы соединений

Показывать строки, в которых есть общее значение в обеих Объединенных таблицах

Показать все строки из одной таблицы и соответствующие строки другой таблицы

Показать все строки из обеих таблиц и присоединиться к ним, где есть общее значение

Перекрестные соединения

Объединение таблиц на основе неравенства значений полей

Удаление соединения

Обзор

База данных — это набор таблиц с данными, которые являются логическими связями друг с другом. Связи используются для соединения таблиц с помощью полей, которые они используют чаще всего. Таблица может быть частью любого количества связей, но каждая связь всегда имеет ровно две таблицы. В запросе связь представляется соединением.

При добавлении таблиц в запрос Access создает соединения, основанные на отношениях, заданных между таблицами. Вы можете вручную создавать соединения в запросах, даже если они не представляют собой связи, которые уже были определены. Если вы используете другие запросы (вместо или в дополнение к таблицам) в качестве источников данных для запроса, вы можете создавать соединения между исходными запросами, а также между этими запросами и таблицами, которые используются в качестве источников данных.

Объединение работает аналогично условиям запроса в том случае, если они устанавливают правила, которым данные должны соответствовать для включения в операции запроса. В отличие от условий, соединения также указывают на то, что каждая пара строк, удовлетворяющая условиям соединения, будет объединена в наборе записей для формирования одной строки.

Существует четыре основных типа соединений: внутренние соединения, внешние соединения, перекрестные соединения и неодинаковые соединения. В этой статье рассказывается о каждом типе соединения, который можно использовать, зачем использовать каждый из них, а также создавать соединения.

Соединения предназначены для запроса связей с таблицами: сведения о том, как данные в двух источниках можно сочетать на основе значений данных, которые они используют. Ниже приведена иллюстрация соединения в режиме конструктора запросов с диалоговым окном свойств соединения, которое открывается в окне.

Окно "Параметры объединения".

Эта строка между таблицами представляет соединение. Дважды щелкните соединение, чтобы открыть диалоговое окно Свойства соединения (показано) и просмотреть или изменить соединение.

Иногда соединения являются направленными. В этой области диалогового окна показано, какая таблица, в которой выполняется объединение, и какие поля используются для присоединения к таблицам.

В этой области определяется тип соединения: вариант 1 — это внутреннее соединение, 2 — левое внешнее соединение, а 3 — правое внешнее соединение.

Можно использовать поля из обеих таблиц, и данные, относящиеся к определенной задаче, отображаются в каждом из них. При внутреннем соединении никакие другие данные не включаются. При внешнем объединении несвязанные записи из одной таблицы также включаются в результаты запроса.

К началу страницы

Типы соединений

Существует четыре основных типа соединений: внутренние соединения, внешние соединения, перекрестные соединения и неодинаковые соединения. Перекрестные соединения и неодинаковые соединения — это сложные типы объединений, которые редко используются, но вам следует знать, чтобы они могли понять, как работают соединения.

Внутренние соединения: объединены только связанные данные из обеих таблиц.

Внутреннее соединение — это один из них, в котором Access включает только данные из таблицы, если есть соответствующие данные в связанной таблице, и наоборот. В большинстве случаев вы будете использовать внутреннее соединение. Если вы создаете соединение и не указали тип соединения, то Access считает, что вы хотите использовать внутреннее соединение. Внутренние соединения удобны, так как они позволяют объединять данные из двух источников на основе общих значений, так что вы видите данные только при полном рисунке.

Внешние соединения: все связанные данные правильно объединены и все оставшиеся записи из одной таблицы

Внешнее соединение аналогично внутреннему соединению, но суммирует оставшиеся строки из одной из таблиц. Внешние соединения являются направленными: левое внешнее соединение включает в себя все записи из левой таблицы — первая таблица в соединении — и правое внешнее соединение включает все записи из таблицы справа — Вторая таблица в соединении.

Полные внешние соединения: все данные, в сочетании с возможными возможностями

В некоторых системах внешнее соединение может включать все строки из обеих таблиц с объединением строк, в которых они совпадают. Это называется полным внешним соединением, и Access не поддерживает их явным образом. Однако вы можете использовать перекрестное соединение и условия, чтобы добиться того же эффекта.

Перекрестные соединения: все данные объединены каждый из возможных способов

В большинстве случаев перекрестное соединение является побочным эффектом добавления двух таблиц в запрос и последующего их присоединения. Access считает это таким образом, что вы хотите, чтобы все записи из одной таблицы отображались вместе с каждой записью из другой таблицы — каждое из возможных сочетаний записей. Поскольку никакие данные нельзя объединять, этот вариант соединения редко дает полезные результаты. Однако существует несколько случаев, когда перекрестное соединение является именно тем, что вам нужно.

Объединение по несовпадению: как обычное соединение, но с использованием другого сравнения для объединения строк

Соединения "неодинаковые" используют оператор, отличный от знака равенства (=), для сравнения значений и определения того, следует ли комбинировать данные. Неодинаковые соединения не поддерживаются явно, но вы можете использовать перекрестное соединение и условия для достижения такого эффекта.

Показывать строки, в которых есть общее значение в обеих Объединенных таблицах

Если вы хотите, чтобы в присоединенном поле отображались только те строки, которые содержат совпадающие значения, используется внутреннее соединение. Microsoft Access автоматически создает внутреннее соединение.

Внутреннее объединение — это самый распространенный тип объединения. Они указывают на то, что строки из одной из Объединенных таблиц соответствуют строкам другой таблицы на основе данных в Объединенных полях. При выполнении запроса с внутренним соединением в операции запроса будут включены только те строки, в которых есть общее значение в обеих Объединенных таблицах.

Как использовать внутреннее соединение?

В большинстве случаев вам не нужно ничего делать, чтобы использовать внутреннее соединение. Если таблицы, добавленные в запрос, уже имеют отношения, Access автоматически создает внутреннее соединение между каждой парой связанных таблиц при добавлении таблиц. Если используется целостность данных, Access также отображает "1" над линией соединения, чтобы показать, какая таблица находится на стороне "один" элемента отношение "один-ко-многим" и символ бесконечности (), чтобы показать, какая таблица находится на стороне "многие".

Даже если вы не создали связи, Access автоматически создает внутреннее соединение при добавлении двух таблиц в запрос, и эти таблицы содержат поле с одинаковым или совместимым типом данных, а одно из полей объединения — первичный ключ. В этом случае символы "один" и "многие" не отображаются, так как целостность данных не применяется.

Если вы добавите запросы в запрос и не создали связь между этими запросами, Access не будет автоматически создавать внутренние соединения между этими запросами или между запросами и таблицами. Как правило, вы должны создать их самостоятельно. Вы можете создать внутреннее соединение, перетащив поле из одного источника данных в поле другого источника данных. Access добавит линию между двумя полями, чтобы показать, что они соединены.

Синтаксис SQL для внутреннего соединения

Внутренние соединения задаются в SQL в предложении FROM, как показано ниже.

FROM таблица1 INNER JOIN таблица2 ON таблица1.field1 сравнить Table2.поле2

Операция INNER JOIN состоит из следующих элементов:

Часть

Описание

таблица1, таблица2

Имена таблиц, содержащих объединяемые записи.

поле1, поле2

Имена Объединенных полей. Если они не являются числовыми, поля должны быть одного и того же тип данных и содержать данные одного и того же типа, но они не должны иметь одинакового имени.

compare

Любой оператор сравнения: (=, <, >, <=, >= или <>)

Дополнительные сведения о синтаксисе INNER JOIN можно найти в разделе Операция INNER JOINдля темы.

К началу страницы

Показать все строки из одной таблицы и соответствующие строки другой таблицы

Внешние соединения сообщают, что хотя некоторые строки на обеих сторонах соединения точно соответствуют друг другу, в запросе должны содержаться все строки из одной таблицы, а также строки другой таблицы, которые имеют общее значение на обеих сторонах соединения.

Внешние соединения могут быть левыми внешними соединениями или раздельными внешними соединениями. В левом внешнем соединении запрос включает все строки из первой таблицы в предложении SQL FROM, и только те строки из другой таблицы, в которых присоединено поле, содержащее значения, которые являются общими для обеих таблиц. В правом внешнем соединении запрос включает все строки из второй таблицы в предложении SQL FROM, и только те строки из другой таблицы, в которых присоединено поле, содержащее значения, которые являются общими для обеих таблиц.

Примечание: Вы можете легко узнать, какая таблица является левой или правой таблицей в данном соединении, дважды щелкнув соединение и просматривая диалоговое окно " Свойства объединения ". Вы также можете переключиться в режим SQL, а затем проверить предложение FROM.

Так как некоторые строки на одной стороне внешнего соединения не будут содержать соответствующие строки из другой таблицы, некоторые поля, возвращенные в результатах запроса из этой таблицы, будут пустыми, если строки не соответствуют друг другу.

Как использовать внешнее соединение?

Вы создаете внешнее соединение, изменяя существующее внутреннее соединение. Если внутреннее соединение не существует, создайте его, а затем измените на внешнее соединение.

Изменение внутреннего объединения на внешнее соединение

  1. В режиме конструктора запроса дважды щелкните соединение, которое вы хотите изменить.

    Откроется диалоговое окно Параметры соединения.

  2. В диалоговом окне Свойства объединения Обратите внимание на варианты, указанные в разделе Параметры 2 и 3.

  3. Выберите нужный вариант и нажмите кнопку ОК.

  4. Приложение Access выведет соединение и отобразит стрелку, указывающую на источник данных, в который будут включены все строки, в которых будут включены только те строки, которые удовлетворяют условию соединения.

Неоднозначные внешние соединения

Если вы создаете запрос с левым СОЕДИНЕНИЕм и ВНУТРЕННим СОЕДИНЕНИЕм, Access не сможет определить, какую операцию соединения нужно выполнить в первую очередь. Так как результаты различаются в зависимости от того, выполняется ли левое соединение или внутреннее соединение, Access выводит сообщение об ошибке:

Чтобы исправить эту ошибку, измените запрос так, чтобы он не был понятен для выполнения первой операции.

Синтаксис SQL для внешнего соединения

Внешние соединения задаются в SQL в предложении FROM, как показано ниже.

FROM Таблица1 [Left | RIGHT] Join Таблица2
для Table1. field1 Compare Table2. поле2

Операции LEFT JOIN и RIGHT JOIN состоят из следующих элементов:

Часть

Описание

таблица1, таблица2

Имена таблиц, содержащих объединяемые записи.

поле1, поле2

Имена Объединенных полей. Поля должны быть одного и того же тип данных и содержать данные одного и того же типа, но они не должны иметь одинакового имени.

compare

Любой оператор сравнения: (=, <, >, <=, >= или <>)

Дополнительные сведения о синтаксисе OUTER JOIN можно найти в разделе Выполнение операций соединения LEFT JOIN и RIGHT JOIN.

К началу страницы

Показать все строки из обеих таблиц и присоединиться к ним, где есть общее значение

Если вы хотите отобразить все строки из двух таблиц и присоединиться к ним на основе часто используемых значений, используйте полное внешнее соединение. Приложение Access явно не поддерживает полные внешние соединения, но вы можете добиться того же эффекта с помощью запроса на объединение. В приведенной ниже процедуре объясняется, как это сделать, но если вам нужны дополнительные сведения о запросах на объединение, ознакомьтесь с разделом " см .

Использование запроса на объединение для выполнения полного внешнего соединения:

  1. Создайте запрос, который содержит левое внешнее соединение в поле, которое вы хотите использовать для полного внешнего объединения.

  2. На вкладке Главная в группе Режимы выберите команду Режим, а затем — Режим SQL.

  3. Нажмите клавиши CTRL + C, чтобы скопировать код SQL.

  4. Удалите точку с запятой в конце предложения FROM и нажмите клавишу ВВОД.

  5. Введите слово UNION и нажмите клавишу ВВОД.

    Примечание: Не используйте ключевое слово ALL при выполнении полного внешнего соединения с помощью запроса на объединение.

  6. Нажмите клавиши CTRL + V, чтобы вставить код SQL, скопированный в действии 3.

  7. В коде, который вы вставили, измените левое соединение на right.

  8. Удалите точку с запятой в конце второго предложения FROM и нажмите клавишу ВВОД.

  9. Добавьте предложение WHERE, которое указывает, что значение поля соединения равно NULL в первой таблице, указанной в предложении FROM (Левая таблица).

    Например, если предложение FROM имеет следующее:

    FROM Products RIGHT JOIN [Order Details] 
    ON Products.ID = [Order Details].[Product ID]

    Вы добавите следующее предложение WHERE:

    WHERE Products.ID IS NULL

  10. Введите точку с запятой (;) в конце предложения WHERE, чтобы обозначить конец запроса на объединение.

  11. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Перекрестные соединения

Перекрестные соединения отличаются от внутренних и внешних объединений тем, что они не представлены явным образом в Access. В перекрестном соединении каждая строка из одной таблицы объединяется с каждой строкой из другой таблицы, что приводит к перекрестному продукту или декартово произведение. Каждый раз при выполнении запроса с таблицами, которые не присоединены явным образом, результат может быть перекрестным продуктом. Перекрестные соединения обычно непреднамеренно, но в некоторых случаях они могут быть полезными.

Зачем использовать перекрестное соединение?

Если вы хотите проверить все возможные сочетания строк между двумя таблицами или запросами, используйте перекрестное соединение. Например, предположим, что у вашей компании есть спектакулар год, и вы собираетесь предоставить клиентам бонусные бонусы. Вы можете создать запрос, который суммирует продажи каждого клиента, создавать небольшие таблицы с несколькими возможными процентами бонусов и объединять два из них в другом запросе, выполняющем перекрестное соединение. Вы закончите запрос, отображающий набор гипотетических бонусов для каждого клиента.

Как использовать перекрестное соединение?

Перекрестное соединение создается, когда вы включаете в запрос таблицы или запросы и не создаете по крайней мере одно явное соединение для каждой таблицы или запроса. Microsoft Access объединяет все строки из каждой таблицы или запроса, которые не были явно объединены с другими таблицами или запросами в другие строки результатов. Рассматривайте ситуацию с бонусом из предыдущего абзаца. Предположим, что у вас есть клиенты 91 и хотите просмотреть пять возможных процентов бонусов. Перекрестное соединение формирует строки 455 (произведение 91 и 5).

Как вы можете представить, непреднамеренное перекрестное соединение может создать огромное количество строк в результатах запроса. Кроме того, эти результаты, как правило, не имеют смысла, так как если вам действительно не нужно объединять каждую строку с каждой другой строкой, большинство Объединенных строк, которые отображаются в результатах, не будут иметь смысла. Наконец, выполнение запросов, использующих непреднамеренное перекрестное соединение, может занять очень много времени.

Случайно созданное перекрестное объединение в режиме конструктора запроса

1. поля с кругами должны быть соединены друг с другом.

Случайно созданное полное объединение

1. Обратите внимание на очень большое количество записей.

Результат исправленного запроса

1. Обратите внимание на то, что количество записей гораздо меньше.

К началу страницы

Объединение таблиц на основе неравенства значений полей

Соединения не должны основываться на эквивалентности Объединенных полей . Соединение может быть основано на любом операторе сравнения, например больше (_гт_), меньше чем (_лт_), или не равно (_лт__гт_). Соединения, не основанные на эквивалентности, называются неравенствными соединениями.

Если вы хотите объединить строки из двух источников данных на основе значений полей, которые не равны, используйте соединение по несовпадению. Как правило, соединения на неодинаковые значения зависят от значений операторов сравнения "больше (_гт_)", "меньше" (_лт_), "больше" или "равно" (_гт_ =) или меньше или равно (_лт_ =). Неодинаковые соединения, основанные на операторе is Not Equals (_лт__гт_), могут возвращать практически столько строк, сколько перекрестное соединение, и результаты могут быть трудно интерпретировать.

Как использовать соединение по несовпадению?

Соединения "неодинаковые" в конструкторе не поддерживаются. Если вы хотите использовать их, необходимо выполнить эти действия с помощью режима SQL. Однако вы можете создать соединение в конструкторе, перейти в режим SQL, найти оператор равенства (=), а затем изменить его на оператор, который вы хотите использовать. После этого вы можете снова открыть запрос в конструкторе, если сначала изменить оператор сравнения на равно (=) в режиме SQL.

Удаление соединения

Если Access автоматически создает соединение, которое вы не хотите, или вы создаете соединение по ошибке, например соединение между двумя полями, которые имеют непохожие типы данных, вы можете удалить соединение.

  1. В бланке запроса щелкните соединение, которое вы хотите удалить.

  2. Нажмите клавишу Delete.

-или-

  • В бланке запроса щелкните соединение, которое нужно удалить, правой кнопкой мыши и выберите команду Удалить.

К началу страницы

См. также

Добавление записей в таблицу с помощью запроса на добавление

Объединение результатов нескольких запросов на выборку с помощью запроса на объединение

Создание запроса на основе нескольких таблиц

Создание, изменение и удаление связи

Совершенствование навыков работы с Office
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединиться к программе предварительной оценки Office

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×