Соединение источников данных в запросе

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

В этой статье рассматриваются различные варианты соединений и демонстрируется их использование в запросах.

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

Общие сведения

Внутреннее соединение: Отображает строки, где с общими значениями в обеих объединенных таблицах

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

Полное внешнее соединение: отображает все строки из обеих таблиц и их объединение, если с общими значениями

Перекрестное соединение: все возможные сочетания строк

Несовпадению: объединяет записи на основании неравности значений полей

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

Обзор

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

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

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

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

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

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

Некоторые соединения создаются автоматически

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

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

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

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

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

Внешние соединения: объединяются все связанные данные, а также все оставшиеся записи из одной таблицы

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

Полное внешнее соединение: объединяются все доступные данные

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

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

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

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

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

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

Внутреннее соединение: отображает строки с общими значениями в обеих объединенных таблицах

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

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

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

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

Автоматические внутренние соединения

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

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

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

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

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

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

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

Часть

Описание

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

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

поле1, поле2

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

compopr

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

Дополнительные сведения о синтаксисе внутреннее соединение приведены в разделе Операция ВНУТРЕННЕЕ соединение.

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

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

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

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

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

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

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

Внешнее соединение создается путем изменения внутреннего соединения. Если нет ни одного существующего внутреннего соединения, необходимо его создать и преобразовать во внешнее.

Замена внутреннего соединения на внешнее

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

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

  2. В диалоговое окно Параметры объединения, Примечание вариантов в списке рядом с полем 2 и параметр 3.

  3. Выберите параметр, который вы хотите использовать и нажмите кнопку кнопку ОК.

  4. В Microsoft 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

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

compopr

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

Дополнительные сведения о синтаксисе внешнее соединение приведены в разделе LEFT JOIN, операций ОБЪЕДИНЕНИЯ СПРАВА.

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

Полное внешнее соединение: отображает все строки в обеих таблицах и объединяет их, если они содержат общие значения

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

  1. Создайте запрос и добавьте две таблицы. Если будут созданы соединения, удалите их.

  2. Добавьте поля для результатов запроса.

  3. Добавьте объединенные поля из двух таблиц и снимите флажок в строке Показать.

  4. В форме запроса под первым объединенным полем таблицы введите второе объединенное поле таблицы в строке Условия. Если объединенные поля имеют одинаковые названия, при ссылке на них включите имена таблиц.

  5. В строке или под условием вы только что ввели, введите Is Null.

  6. В следующей строке Или (прямо под первой) под объединенным полем второй таблицы введите значение Is Null.

Запрос возвращает объединенный набор таких элементов:

  • строки с совпадающими значениями в объединенных полях и данными, объединенными соответственно (в сущности, это внутреннее соединение);

  • строки, в которых нет значения для объединенного поля в первой таблице (то есть те, которые не входят в левое внешнее соединение);

  • строки, в которых нет значения для объединенного поля во второй таблице (то есть те, которые не входят в правое внешнее соединение).

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

Перекрестное соединение: все возможные сочетания строк

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

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

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

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

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

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

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

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

Соединение по несовпадению: объединяет записи на основании неравности значений полей

Соединения не всегда базируются на эквивалентности связываемых полей. Они могут основываться на любом операторе сравнения, например "больше" (>), "меньше" (<) или "не равно" (<>). Соединения, базирующиеся на неравенстве, называются соединениями по несовпадению.

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

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

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

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

  2. Добавление необходимых выходных полей

  3. Добавьте объединенные поля из первой таблицы и снимите флажок в строке Показать.

  4. В строке Условия введите необходимый оператор неравности вслед за объединенным полем второй таблицы.

Запрос возвращает строки с объединенными данными из двух таблиц на основании указанной неравности.

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

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

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

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

  2. Нажмите клавишу Удалить.

-или-

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

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

Примечания : 

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

  • Используйте английский вариант этой статьи, который находится здесь, в качестве справочного материала. Вместе с другими участниками сообщества Майкрософт вы можете улучшить эту статью с помощью Community Translation Framework (CTF). Просто наведите указатель мыши на предложение в статье и выберите команду "УЛУЧШИТЬ ПЕРЕВОД" в мини-приложении CTF. Для получения дополнительных сведений о CTF щелкните здесь. Используя CTF, вы соглашаетесь с нашими условиями предоставления услуг.

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

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

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

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

×