Объединение таблиц и запросов
Если в запрос Access включено несколько источников данных, для ограничения записей используются соединителичные функции в зависимости от того, как источники данных связаны друг с другом. Вы также можете использовать объединения для объединения записей из обоих источников данных, чтобы каждая пара записей из источников стала одной записью в результатах запроса.
В этой статье рассмотрены различные типы мероприятий и показано, как их использовать в запросе. По умолчанию оно создается автоматически, если между двумя источниками данных уже существует связь, используемая в запросе. Кроме того, если есть поля, четко соответствующие друг другу, создается такое соединиться. Вы можете удалить автоматически созданное присоединиться. В этой статье приводится базовая информация о связях между таблицами, в том числе о том, как ее создать.
Примечание: Запросы можно присоединять так же, как и таблицы, а также одновременно присоединяться к ним.
В этой статье
-
Обзор
-
Типы соединители
-
Показать строки, в которых в обеих таблицах есть общее значение
-
Показать все строки из одной таблицы и соответствующие строки из другой таблицы
-
Показать все строки из обеих таблиц и объединить их там, где есть общее значение
-
Перекрестные соединители
- Соединяем таблицы на основе неравных значений полей.
-
Удаление join
Обзор
База данных — это набор таблиц данных, которые имеют логические отношения друг с другом. Связи используются для соединения таблиц по общим полям. Таблица может быть частью любого числа связей, но каждая связь всегда имеет ровно две таблицы. В запросе связь представлена связью.
При добавлении таблиц в запрос Access на основе отношений, определенных между таблицами. Вы можете вручную создавать в запросах такие связи, даже если они не представляют связи, которые уже были определены. Если в качестве источников данных для запроса используются другие запросы (вместо таблиц или в дополнение к ним), вы можете создавать связи между исходными, а также между ними и любыми таблицами, которые используются в качестве источников данных.
Такое же поведение аналогично условиям запроса тем, что они устанавливают правила, которым должны соответствовать данные для включения в операции запроса. В отличие от условий, они также определяют, что каждая пара строк, удовлетворяющих условиям, будет объедина в наборе записей для формирования одной строки.
Существует четыре основных типа: внутренние, внешние, перекрестные и неравные. В этой статье мы рассмотрим каждый из типов, которые можно использовать, причины их использования и их создание.
Они должны запрашивать связи между таблицами, что указывает на то, как данные в двух источниках могут быть объединены на основе общих значений. На рисунке в конструкторе запроса можно увидеть, как объединить, а его свойства будут открыты в диалоговом окне.
Эта линия между таблицами представляет связь. Дважды щелкните соединитель, чтобы открыть диалоговое окно «Свойства для join» (показанное на рисунке) и просмотреть или изменить его.
Иногда такие соединители являются направлением. В этой области диалогового окна показано, какая таблица используется для связи и какие поля используются для ее соединить.
Эта область определяет тип связи: вариант 1 — внутреннее, 2 — левое внешнее, а 3 — правое внешнее.
Можно использовать поля из обеих таблиц, а данные, относящиеся к данной задаче, отображаются в каждой из них. При внутреннем подмедине никакие другие данные не включаются. При внешнем подмыве также включаются несвязанные записи из одной таблицы в результаты запроса.
К началу страницы
Типы соединители
Существует четыре основных типа: внутренние, внешние, перекрестные и неравные. Перекрестные и неравные соединители являются расширенными типами и редко используются, но вам следует знать о них, чтобы иметь полное представление о том, как они работают.
Внутренние связи: объединяются только связанные данные из обеих таблиц
Внутреннее присоединение — это внутреннее, при котором Access включает данные из таблицы, только если соответствующие данные есть в связанной таблице, и наоборот. Чаще всего используются внутренние соединители. Когда вы создаете присоединение и не указываете его тип, Access предполагает, что вы хотите создать внутреннее. Внутренние объединения полезны тем, что они могут объединять данные из двух источников на основе общих значений, поэтому вы видите данные только в том случае, если есть законченная фотография.Внешние связи: все связанные данные объединяются правильно, а также все оставшиеся записи из одной таблицы
Внешнее соединить похоже на внутреннее, но добавляет оставшиеся строки из одной из таблиц. Внешнее соединителевое — это направление: левое внешнее — все записи из левой таблицы (первая таблица в составе), а правое внешнее — все записи правой таблицы, вторая — в составной.
Полные внешние соединители: все данные, объединенные, где это целесообразно
Перекрестные объединить: все данные, объединенные всеми возможными способом
В большинстве раз перекрестные связи — это побочный эффект добавления в запрос двух таблиц, которые не могут быть так часто присоединяться. Access интерпретирует это, чтобы вы могли видеть все записи из одной таблицы вместе с каждой записью из другой таблицы — все возможные комбинации записей. Так как объединить данные нельзя, такие связи редко дают полезные результаты. Но есть несколько случаев, когда перекрестный переход — это то, что вам нужно.
Неравные объединения: как обычное объединение, но использование другого сравнения для объединения строк
Для сравнения значений и их объединения в неравных объединениях используется оператор, который не имеет знака равной (=). Неравные связи явным образом не поддерживаются, но для достижения того же эффекта можно использовать перекрестное сечение и условия.
Показать строки, в которых в обеих таблицах есть общее значение
Если вы хотите, чтобы в соединенном поле были только те строки, которые имеют совпадающие значения, используйте внутреннее. Access автоматически создает внутренние соединители.
Внутреннее объединение — это самый распространенный тип объединения. Он сообщает запросу, что строки из одной из таблиц, которые соединены, соответствуют строкам другой таблицы на основе данных в этих полях. При запуске запроса со внутренними соединителями в операции запроса включаются только те строки, в которых в обеих таблицах есть общее значение.
Как использовать внутреннее?
В большинстве раз вам не нужно делать что-то, чтобы использовать внутреннее соединиться. Если таблицы, добавленные в запрос, уже имеют связи, При добавлении таблиц Access автоматически создает внутреннее отношение между каждой парой связанных таблиц. Если целостность данных, access также отображает «1» над линией связи, чтобы показать, какая таблица находится на стороне «один» отношение «один-ко-многим», и символ бесконечности(∞),чтобы показать, какая таблица находится на стороне «многие».
Даже если вы не создали связи, Access автоматически создает внутренние связи, если в запрос добавлены две таблицы, в каждой из которых есть поля с одинаковым или совместимым типом данных, а одно из полей связи является первичный ключ. В этом случае символы «один» и «многие» не отображаются, поскольку целостность данных не выполняется принудительно.
Если вы добавили запросы в запрос и не создали между ними связи, Access не создает внутренние связи между этими запросами и таблицами автоматически. Как правило, их следует создавать самостоятельно. Внутреннее соединиться создается путем перетаскивание поля из одного источника данных в поле другого источника данных. Access добавит линию между двумя полями, чтобы показать, что они соединены.
SQL синтаксис внутреннего join
Внутреннее секается в SQL предложении FROM, как показано ниже:
FROM таблица1 INNER JOIN
Операция INNER JOIN состоит из следующих элементов:
Часть |
Описание |
таблица1, таблица2 |
Имена таблиц, содержащих объединяемые записи. |
поле1, поле2 |
Имена полей, которые соединены. Если они не являются числами, поля должны быть одного тип данных и содержать данные одного типа, но не должны иметь одинаковых имен. |
compare |
Любой оператор сравнения: (=, <, >, <=, >= или <>) |
Дополнительные сведения о синтаксисе внутреннего соединиться см. в разделе операция INNER JOIN.
К началу страницы
Показать все строки из одной таблицы и соответствующие строки из другой таблицы
Внешнее соедините пространство говорит о том, что хотя некоторые строки на обеих сторонах соединителя точно соответствуют друг другу, запрос должен включать все строки из одной таблицы, а также строки из другой таблицы, которые имеют общее значение с обеих сторон.
Внешними могут быть как внешние, так и правые. При левом внешнем объединении запрос содержит все строки из первой таблицы в предложении FROM SQL и только строки из другой таблицы, в которой поле объединения содержит значения, общие для обеих таблиц. При правом внешнем объединении запрос содержит все строки из второй таблицы в предложении FROM SQL из другой таблицы и только строки из другой таблицы, в которой поле объединения содержит значения, общие для обеих таблиц.
Примечание: Вы можете легко найти таблицу слева или справа в заданном подмыве, дважды щелкнув ее и нажав кнопку в диалоговом окне «Свойства для join». Вы также можете переключиться SQL представление, а затем изучить предложение FROM.
Так как в некоторых строках с одной стороны внешнего связи не будут совпадать строки из другой таблицы, некоторые поля, возвращаемые в результатах запроса из другой таблицы, будут пустыми, если строки не соответствуют друг другу.
Как использовать внешнее соединиться?
Внешнее соединиться создается путем изменения существующего внутреннего. Если внутреннего соединить не существует, создайте его, а затем измените на внешнее.
Изменение внутреннего соединиться на внешнее
-
В конструкторе запросов дважды щелкните соединитее, которые вы хотите изменить.
Откроется диалоговое окно Параметры соединения.
-
В диалоговом окне «Параметры присоединиться» обратите внимание на варианты, указанные рядом с вариантом 2 и вариантом 3.
-
Выберите нужный вариант и нажмите кнопку ОК.
-
Access отобразит присоединение и отобразит стрелку, указывает на то, где все строки будут включены в источник данных, в который будут включены только строки, удовлетворяющие условию.
Неоднозначные внешние соединители
Если создать запрос, содержащий операции LEFT JOIN и INNER JOIN, Access может не определить, какую операцию следует выполнить. Поскольку результаты отличаются в зависимости от того, как выполняется левое или внутреннее, в Access отображается сообщение об ошибке:
Чтобы исправить эту ошибку, необходимо изменить запрос таким образом, чтобы было понятно, какое именно сообщение должно выполняться в первую очередь.
SQL синтаксис внешнего соединитела
Внешнее соединитее в предложении FROM SQL, как показано ниже:
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 compare table2.field2
Операции LEFT JOIN и RIGHT JOIN состоят из следующих элементов:
Часть |
Описание |
таблица1, таблица2 |
Имена таблиц, содержащих объединяемые записи. |
поле1, поле2 |
Имена полей, которые соединены. Поля должны быть одного типа тип данных и содержать данные одинакового типа, но имена этих полей могут быть одинаковыми. |
compare |
Любой оператор сравнения: (=, <, >, <=, >= или <>) |
Дополнительные сведения о внешнем синтаксисе см. в разделе «Операции LEFT JOIN, RIGHT JOIN».
К началу страницы
Показать все строки из обеих таблиц и объединить их там, где есть общее значение
Если вы хотите от показать все строки из двух таблиц и объединить их на основе общих значений, используйте полное внешнее соединить. Access явным образом не поддерживает полное внешнее соединение, но такой же результат можно получить с помощью запроса на объединение. Ниже объясняется, как это сделать, но если вам нужны дополнительные сведения о запросах на объединение, см. раздел «См. также».
Чтобы использовать запрос на объединение для полного внешнего объединения:
-
Создайте запрос с левым внешним присоединимым полем, которое вы хотите использовать для полного внешнего соединиться.
-
На вкладке Главная в группе Режимы выберите команду Режим, а затем — Режим SQL.
org/ListItem»>
-
Удалите 12-ю пунктов в конце предложения FROM и нажмите ввод.
-
Введите слово UNION и нажмите клавишу ВВОД.
Примечание: Не используйте ключевое слово ALL при использовании запроса на объединение для полного внешнего объединения.
-
Нажмите CTRL+V, чтобы SQL код, который вы скопировали в шаге 3.
-
В коде, который вы вставляли, измените LEFT JOIN на RIGHT JOIN.
-
Удалите 1-ю и 12-ю пунктов в конце второго предложения FROM и нажмите ввод.
-
Добавьте предложение WHERE, которое указывает, что в первой таблице, указанной в предложении FROM (левая таблица), будет указано значение NULL.
Например, если предложение FROM имеет такое положение:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Необходимо добавить следующее предложение WHERE:
WHERE Products.ID IS NULL
org/ListItem»>
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Нажмите CTRL+C, чтобы SQL код.
Введите точка с за semicolon (;) в конце предложения WHERE, чтобы указать конец запроса на объединение.
Перекрестные соединители
Перекрестные соединить отличаются от внутренних и внешних, так как они явно не представлены в Access. В перекрестном сочетании каждая строка из одной таблицы объединяются с каждой строкой из другой таблицы, что приводит к так называемой перекрестной продукции или декартово произведением. Каждый раз при запуске запроса, который содержит таблицы, которые не присоединились явным образом, результатом будет перекрестный продукт. Перекрестные соединить обычно непреднамеренны, но в некоторых случаях они могут быть полезными.
Зачем использовать перекрестный переход?
Если вы хотите изучить все возможные сочетания строк между двумя таблицами или запросами, используйте перекрестное соединение. Предположим, что у вашей компании был впечатляющий год, и вы хотите дать клиентам бонусы. Вы можете создать запрос для суммы покупок каждого клиента, создать небольшую таблицу с несколькими возможными процентами бонусов и объединить их в другом запросе, который выполняет перекрестное объединение. В результате будет создан запрос с набором гипотетических бонусов для каждого клиента.
Как использовать перекрестный переход?
Перекрестные объединить создаются каждый раз, когда вы включаете в запрос таблицы или запросы и не создаете хотя бы одно явное соединить для каждой таблицы или запроса. Access объединяет каждую строку из каждой таблицы или запроса, которые не были явно соединены с другой таблицей или запросом в каждой второй строке результатов. Рассмотрим сценарий бонусов из предыдущего абзаца. Предположим, у вас 91 клиент и вы хотите посмотреть на пять возможных процентов бонусов. Перекрестные связи создают 455 строк (произведение из 91 и 5).
Как можно представить, непреднамеральные перекрестные объедиения могут привести к созданию большого количества строк в результатах запроса. Кроме того, эти результаты в общем случае не имеют смысла, так как если вы не собираетесь объединять каждую строку с каждой второй строкой, большинство объединенных строк, которые отображаются в результатах, будут не имеют смысла. Наконец, выполнение запросов, которые используют непреднамеральные перекрестные объединия, может занять очень много времени.
1. Круговые поля должны быть соединены друг с другом.
1. Обратите внимание на очень большое количество записей.
1. Обратите внимание, что количество записей значительно меньше.
К началу страницы
Соединяем таблицы на основе неравных значений полей.
При этом не нужно, чтобы они были основаны на эквивалентности полей. Объединить можно с учетом любого оператора сравнения, например больше (>), меньше (<) или не равно (<>). Такие соединить называются неравными.
Если вы хотите объединить строки двух источников данных на основе неравных значений полей, используйте неравные объединения. Как правило, неравные связи основаны наоператорах сравнения>, меньших или равных (<), которые больше или равны (>=) или меньше (<=). Неравные связи, основанные на операторе «не равно» (<>) могут возвращать почти такое же количество строк, как и перекрестные. Результаты может быть сложно интерпретировать.
Как использовать неравные составные?
Неравные связи не поддерживаются в конструкторе. Если вы хотите использовать их, это необходимо сделать с помощью SQL просмотра. Однако вы можете создать объединить в конструкторе, переключиться в SQL, найти оператор сравнения «=»иизменить его на нужный оператор. После этого вы сможете снова открыть запрос в конструкторе только при первом изменении оператора сравнения на равно(=)SQL представлении.
Удаление join
Если Access автоматически создает не нужное или вы создаете его по ошибке (например, связь между двумя полями с данными разного типа), это можно удалить.
-
В сетке конструктора запросов щелкните объединить, которые вы хотите удалить.
-
Нажмите кнопку DELETE.
ИЛИ
К началу страницы
MS Access — присоединения — CoderLessons.
comБаза данных представляет собой набор таблиц данных, которые позволяют логические отношения друг с другом. Вы используете отношения для связи таблиц по полям, которые у них общие. Таблица может быть частью любого числа отношений, но каждое отношение всегда имеет ровно две таблицы. В запросе отношение представлено соединением.
Что такое Join
Объединение определяет, как объединять записи из двух или более таблиц в базе данных. Концептуально объединение очень похоже на табличное отношение. На самом деле, соединения – это запросы, которые связаны с таблицами.
Ниже приведены два основных типа соединений, которые мы будем обсуждать в этой главе.
- Внутреннее соединение
- Внешнее соединение
Оба из них могут быть легко созданы из представления дизайна запросов .
Внутреннее соединение
Позвольте нам теперь понять Внутреннее Присоединение –
- Наиболее распространенный тип объединения – это внутреннее соединение, которое также является типом соединения по умолчанию в Microsoft Access.
- Внутреннее объединение будет отображать только те строки или записи, где объединенные поля из обеих таблиц равны.
- Этот тип соединения просматривает эти общие поля и данные, содержащиеся в них. Он отображает только совпадения.
Внешнее соединение
Давайте теперь поймем, что такое Внешнее Соединение –
- Внешнее объединение отображает все строки из одной таблицы и только те строки или записи из другой таблицы, где объединенные поля равны.
- Другими словами, внешнее соединение показывает все строки из одной таблицы и только соответствующие строки из другой таблицы.
Есть и другие типы соединения –
Левое внешнее соединение и правое внешнее соединение
Давайте теперь поймем левое внешнее соединение и правое внешнее соединение –
- Вы можете выбрать таблицу, которая будет отображать все строки.
- Вы можете создать левое внешнее соединение, которое будет включать все строки из первой таблицы.
- Вы можете создать правое внешнее объединение, которое будет включать все строки из второй таблицы.
Теперь перейдем на вкладку « Создать » и создадим запрос из представления « Дизайн» . Выберите tblProjects и tblTasks и закройте диалоговое окно Show Table, как показано на следующем снимке экрана.
Добавьте поле ProjectName из tblProjects и TaskTitle, StartDate и DueDate из таблицы tblTasks .
Давайте теперь запустим запрос.
Мы показываем только записи из нескольких проектов. У нескольких из этих проектов много задач, связанных с этим проектом, и эта информация связана с полем ProjectID .
Когда мы создаем этот запрос в Microsoft Access, Access берет эту связь из созданных нами отношений.
По умолчанию он создает так называемое внутреннее соединение между этими двумя полями , между этими двумя таблицами, и именно так он связывает эту информацию вместе из этих двух таблиц.
Он показывает нам только совпадения, поэтому, когда мы запускаем этот запрос, в tblProjects появляется много других проектов, которые не отображаются как часть нашего набора записей в этом запросе, и это из-за того, как эти две таблицы объединены вместе, через это Внутреннее Соединение, которое снова является тем Соединением по умолчанию для любого запроса.
Когда мы создаем этот запрос в Microsoft Access, Access берет эту связь из созданных нами отношений.
По умолчанию он создает так называемое внутреннее соединение между этими двумя полями , между этими двумя таблицами, и именно так он связывает эту информацию вместе из этих двух таблиц.
Он показывает нам только совпадения, поэтому, когда мы запускаем этот запрос, в tblProjects появляется много других проектов, которые не отображаются как часть нашего набора записей в этом запросе, и это из-за того, как эти две таблицы объединены вместе, через это Внутреннее Соединение, которое снова является тем Соединением по умолчанию для любого запроса.
Однако, если вы хотите изменить отношение, допустим, вы хотите создать внешнее объединение, или, другими словами, показать все проекты из tblProjects , каждую запись в этой таблице, а также все задачи из tblTasks – Открыть свойства соединения; мы можем сделать это, просто дважды щелкнув по строке отношения.
Access отобразит имя левой таблицы и имя правой таблицы в диалоговом окне «Свойства соединения».
Имя левого столбца, а также имя правого столбца и первый переключатель должны включать только те строки, в которых поля объединения из обеих таблиц равны, и это внутреннее соединение, и именно это выбирается по умолчанию при создании отношений при создании соединения. в запросе, но вы можете изменить его.
У нас также есть два других варианта; мы можем включить все записи из tblProjects и только те записи из tblTasks, в которых объединенные поля равны, а эта – Left Outer Join.
У нас есть третий вариант, включающий все записи из tblTasks и только те записи из tblProjects, где объединенные поля равны, и эта является правым внешним соединением.
Имя левого столбца, а также имя правого столбца и первый переключатель должны включать только те строки, в которых поля объединения из обеих таблиц равны, и это внутреннее соединение, и именно это выбирается по умолчанию при создании отношений при создании соединения. в запросе, но вы можете изменить его.
У нас также есть два других варианта; мы можем включить все записи из tblProjects и только те записи из tblTasks, в которых объединенные поля равны, а эта – Left Outer Join.
У нас есть третий вариант, включающий все записи из tblTasks и только те записи из tblProjects, где объединенные поля равны, и эта является правым внешним соединением.
Это различные типы объединений, которые вы можете легко создавать в режиме конструктора. Давайте выберем второй вариант, который называется Left Outer Join, и нажмите Ok .
Давайте теперь посмотрим на другие шаги –
Когда вы посмотрите на линию отношений, вы увидите маленькую стрелку, указывающую на ProjectID в tblTasks . Когда вы выполните этот запрос, вы увидите следующие результаты.
Как вы можете видеть, он показывает нам каждое название проекта, независимо от того, имеет ли оно связанную задачу. Вы также увидите кучу пустых полей. Все это будет пустым, потому что в tblTasks нет связанной информации, откуда берутся эти поля. Теперь давайте снова перейдем к представлению « Дизайн» и дважды щелкните строку отношения.
В диалоговом окне «Свойства соединения» выберите третий параметр для правого внешнего соединения и нажмите « ОК» .
Теперь посмотрим на нашу линию отношений. Вы увидите, что маленькая стрелка теперь указывает на ProjectID в tblProjects . При выполнении этого запроса вы увидите следующие результаты.
Самосоединения
Самостоятельное присоединение – это еще один тип объединения. Самостоятельное соединение связывает совпадающие поля из одной и той же таблицы. Например, посмотрите на таблицу сотрудника с полем супервизора, которое ссылается на тот же тип номера, который хранится в другом поле той же таблицы – идентификатор сотрудника.
Если мы хотим узнать, кто является супервайзером Кейтлин Расмуссен, нам нужно взять число, хранящееся в этом поле супервизора, и посмотреть его в той же самой таблице в этом поле идентификатора сотрудника, чтобы узнать, что Charity Hendricks является супервизором.
Эта таблица не является идеальной структурой для реляционной базы данных, потому что она не нормализована.
Если у нас возникнет ситуация, когда мы захотим создать запрос, который будет просто перечислять имена сотрудников вместе с именами их руководителей, мы не сможем сделать простой запрос, если не создадим Self-join.
Чтобы увидеть самостоятельное соединение, создайте таблицу со следующими полями и введите некоторые данные.
Здесь мы хотим снова создать список с именем сотрудника, а затем с именем руководителя. Давайте создадим запрос из представления дизайна запроса .
Теперь добавьте таблицы tblEmployees .
Закройте это диалоговое окно.
Теперь добавьте имя и фамилию для наших сотрудников.
Теперь нам нужен способ создать связь между этой таблицей и самим собой. Для этого нам нужно открыть диалоговое окно show table и еще раз добавить tblEmployees.
Мы создали еще одну копию той же таблицы в этом представлении запроса. Теперь нам нужно создать Self-join. Для этого нажмите Supervisor в таблице tblEmployees, удерживайте кнопку мыши и перетащите ее прямо поверх EmployeeID в этой скопированной таблице – tblEmployees_1 . Затем добавьте имя и фамилию из этой скопированной таблицы.
Давайте теперь запустим ваш запрос, и вы увидите следующие результаты.
Он отображает имена сотрудников вместе с именами их руководителей. И это, как вы создаете самостоятельное соединение в Microsoft Access.
база данных — MS Access SQL запрос: Слияние таблиц
У меня три запроса по типу этого:
Только в других заполнены либо колонка «На складе», либо колонка «В работе», а все остальные пустуют, также количество записей различается в каждом запросе.
Как объединить значения в таблицах средствами MS Access SQL, чтобы Они были в итоге представлены вот так?
SQL-код трёх запросов:
1:
SELECT Заказчик.Наименование as Заказчик, Count(*) AS [В работе], Null AS [На Складе], Null AS Смонтировано FROM (Заказчик INNER JOIN Скважины ON Заказчик.[Наименование] = Скважины.[Компания]) INNER JOIN Эксплуатация ON Скважины.[Номер скважины] = Эксплуатация.[Номер скважины] WHERE (((Эксплуатация.[Дата остановки]) Is Null)) GROUP BY Заказчик.Наименование;
2:
SELECT [Отправка заказчику].Заказчик, null AS [В работе], Count([3_2_1 заказчику].Отправлено-[3_1_в работе].[В работе]- [3_2_2 ревизированные].Ревизированные) AS [На Складе], null AS Смонтировано FROM (([3_1_в работе] INNER JOIN [3_2_1 заказчику] ON [3_1_в работе].Наименование=[3_2_1 заказчику].Заказчик) INNER JOIN [3_2_2 ревизированные] ON [3_1_в работе].Наименование=[3_2_2 ревизированные].Заказчик) INNER JOIN [Отправка заказчику] ON [3_1_в работе]. Наименование=[Отправка заказчику].Заказчик GROUP BY [Отправка заказчику].Заказчик;
3:
SELECT Заказчик.Наименование AS Заказчик, null AS [В работе], null AS [На Складе], [3_3_2 все монтажи].Монтаж-[3_3_1 монтаж и эксплуатации].[Монтаж и эксплуатация] AS Смонтировано FROM (Заказчик INNER JOIN [3_3_2 все монтажи] ON Заказчик.Наименование=[3_3_2 все монтажи].Заказчик) INNER JOIN [3_3_1 монтаж и эксплуатации] ON Заказчик.Наименование=[3_3_1 монтаж и эксплуатации].Заказчик;
- sql
- база-данных
- access
4
Я бы предложил основной таблицей сделать таблицу «Закачик», потом к ней подзапросами пристыковал всю необходимую информацию. Без наличия реальных данных, правильность не гарантирую, иллюстрирую идею.
SELECT Заказчик.Наименование AS Заказчик, ( SELECT Count(*) FROM Скважины, Эксплуатация WHERE Скважины.[Компания]=Заказчик.Наименование AND Скважины. [Номер скважины] = Эксплуатация.[Номер скважины] AND Эксплуатация.[Дата остановки]) Is Null ) AS [В работе], ( //тут второй селект из примера, отдаёт только число. ) AS [На Складе], ( //тут третий селект из примера ) AS Смонтировано FROM Заказчик
Суть идеи — для каждой строки будут выполняться 3 запроса. Ключевая ссылка на текущее значение имени заказчика — первое условие в WHERE, аналогичная строка должна быть первым условием в каждом подзапросе. Саму таблицу Заказчик добавлять в подзапрос не надо — мы делаем запрос для текущего заказчика, пример из первого запроса:
Скважины.[Компания]=Заказчик.Наименование
Весь остальной запрос максимально укорочен. С этими вырвиглазными названиями и джоинами поступил проще — загнав в WHERE простым равенством. При наличии конструктора запросов натыкивание связей разницы с моей реализацией не даст. Предлагаю простой вариант — делаете параметрический (см. справку) запрос, который спрашивает наименование заказчика и отдаёт ровно одно число.
Потом просто текст этого готового запроса вставляете в глобальный запрос, поменяв параметр на «Заказчик.Наименование» и так три раза.
Еще комментарии по текущим запросам:
1. COUNT() считает просто количество строк, поэтому в корне неправильно отдавать ему результат арифметической операции. Тут по логике правильной будет функция SUM(). Проверьте просто по сырым данным — насколько неправильно на самом деле считает.
- Дурная практика ссылаться на название заказчика. А если будет 2 заказчика (ИП Иванов И.И.) с одинаковым названием, из разных городов, с разным ИНН и пр.? Добавить ключевое поле в таблицу заказчика
Первый нагугленный док по подзапросам для самопросвещения («ms access запрос с подзапросом»)
http://www.interface.ru/home.asp?artId=16557
5
Ваш ответ
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
3 способа объединения таблиц в базе данных Access
Иногда процесс копирования и вставки не является хорошим вариантом для передачи содержимого. В основном, когда у вас есть огромное количество данных в нескольких таблицах базы данных Access.
Для облегчения такой задачи предусмотрена возможность слияния таблицы базы данных Access . Используя эту функциональность, вы можете организовать свою базу данных.
База данных Access предлагает 3 способа объединения таблиц в Access или объединить строки/столбцы в основных таблицах базы данных Access. В этом блоге вы получите пошаговые инструкции о том, как выполнить все эти методы слияния таблиц базы данных Access.
Зачем нужно слияние данных в Access?Объединение данных в Access действительно помогает легко просматривать огромное количество данных. Предположим, вы получаете информацию из разных источников, например, от всех членов исполнительной группы вашего аккаунта. Что ж, легко сделать отчет из одного файла, и это легко сделать, используя простую технику копирования и вставки. Но что, если доступно несколько записей и таблиц. В этом случае просто недостаточно копировать и вставлять данные из огромного количества строк и столбцов.
Таким образом, для таких задач объединение таблиц доступа является лучшим решением.
Исправить проблемы с Microsoft Access
Запустить сканирование базы данных с помощью Stellar Access Database Repair Tool для восстановления несогласованной базы данных Access. После завершения сканирования процесс восстановления восстановит базу данных до ее нормального состояния, исправив все ошибки.
Нажимая кнопку выше и устанавливая Stellar Repair for Access (14,8 МБ), я подтверждаю, что прочитал и согласен с Лицензионным соглашением с конечным пользователем и Политикой конфиденциальности этого сайта.
Исправление ошибок доступа
Как объединить таблицы в базе данных Access? Метод 1# Объединение таблиц доступа Использование метода добавленияВсе мы знаем, что база данных Access в основном состоит из таблиц. Итак, если в вашей базе данных есть две похожие таблицы, то, не выполняя длительную ручную процедуру, вы можете легко объединить их с помощью запроса на добавление.
Используя эту специальную команду добавления запроса, вы можете легко выполнить задачу объединение данных таблицы в Access.
Кроме того, у вас есть возможность выбрать записи, которые необходимо скопировать из исходной таблицы, а затем добавить их в целевую таблицу.
Шаг 1
- Откройте базу данных Access, содержащую таблицу, которую необходимо объединить с другой.
- Убедитесь, что типы данных исходной и целевой таблиц хорошо совместимы друг с другом.
- Предположим, если первое поле вашей исходной таблицы является числом, то обязательно, чтобы поле назначения также было в числовом поле.
- Согласно Microsoft, текстовые поля хорошо совместимы с другими типами полей. Поэтому, если в исходной таблице есть числовое поле, а в целевой таблице — текстовое поле, проблем не возникнет.
Шаг 2
- Нажмите кнопку « Create », а затем коснитесь « Query Design ». Это откроет окно « Show Table », где вы увидите, что все таблицы базы данных отображаются в списке.
- Нажмите на таблицу, содержащую те записи, которые вам нужно скопировать.
- Нажмите « добавить» , а затем « закрыть» вариант. База данных Access поместила поля и таблицу в конструктор запросов.
Шаг 3
- В верхней части оформления запроса есть звездочка, по ней нужно сделать двойной щелчок. Access добавит все поля таблиц в сетку дизайна запроса.
Шаг 4
- Нажмите кнопку «Выполнить», чтобы выполнить запрос, а также просмотреть таблицу, в которой есть записи.
- Нажмите View > Design View > добавить опцию. Это откроет окно добавления.
Шаг 5
- Нажмите «Текущая база данных», если ваша целевая таблица присутствует в текущей базе данных.
- После этого нажмите на поле со списком «Имя таблицы». Выберите таблицу, которую необходимо объединить с записями исходной таблицы.
- Или нажмите «Другая база данных». После этого назначьте имя и местоположение вашей базы данных Access, в которой есть целевая таблица.
- Введите имя таблицы в поле Table Name и нажмите кнопку ok .
Шаг 6
- Щелкните правой кнопкой мыши окно разработки запроса. После этого выберите «Просмотр таблицы» для просмотра предварительного просмотра, отображаемого записями, к которым будет добавлен запрос.
- В верхней части окна щелкните правой кнопкой мыши и выберите параметр «Просмотр дизайна».
Шаг 7
- Перейдите на вкладку View и выберите опцию Data Sheet > Run .
- В открывшемся диалоговом окне вам будет предложено нажать да или нет, чтобы добавить строки базы данных Access из исходной таблицы в целевую.
- Нажмите кнопку да , чтобы объединить таблиц в Access.
Другой метод объединения таблиц в Access — использовать внутреннее соединение. Вот полный шаг для выполнения этого процесса слияния таблицы базы данных Access с использованием внутреннего соединения.
Обычно внутреннее соединение используется для получения целых записей из связанных таблиц. Вы также увидите, что это общее значение присутствует в обеих таблицах базы данных Access.
Действия по объединению таблиц в Access с помощью функции внутреннего соединения
Шаг 1. Создание таблиц
- Прежде всего, вам нужно создать таблицу, которую необходимо связать в базе данных Access.
- Так же, как я создал здесь две таблицы: одна содержит информацию о доставке, а другая — о клиентах.
- Вот скриншот клиента и таблицы доставки.
- В конце необходимо связать таблицу доставки с таблицей клиентов, используя поле Client ID . Это поле должно присутствовать в обеих таблицах.
Шаг 2. Связывание таблиц
- Для связывания таблиц базы данных Access сначала перейдите на вкладку create , а затем нажмите Query Design .
- В открывшемся диалоговом окне « показать таблицу » сделайте двойной щелчок на каждом клиенте и таблицах доставки. Выполнив все это, нажмите и закройте .
- Теперь вы увидите, что соответствующие поля обеих таблиц начнут появляться на вашем экране.
- Из таблицы клиентов нужно перетащить поле «Идентификатор клиента». После этого положите его на транспортировочный стол.
- Этот процесс свяжет таблицы доставки и клиентов одним общим полем, т. е. «Идентификатор клиента».
Шаг 3: Выберите поля для отображения
Выберите поле, которое необходимо отобразить в связанных таблицах. Для этого нужно сделать двойной клик по нужным полям каждой таблицы.
Предположим, дважды щелкните следующие поля:
- В таблице «Клиенты» выберите «Имя клиента» и «Фамилия клиента»
- Теперь из таблицы доставки выберите «Адрес доставки» .
Наконец, нажмите кнопку run , , так как это отобразит результат:
Теперь эта вновь созданная объединенная таблица содержит 3 поля, которые мы выбрали из этих двух связанных таблиц.
После этого вы увидите, что в ваших связанных таблицах начинают появляться 3 поля. Вот как вы можете объединить данные таблицы Access, используя внутреннее соединение.
Метод 3# Объединить таблицу доступа с использованием левых соединенийДля извлечения данных вам просто нужно выполнить несколько правых или левых соединений. Вот пример, чтобы показать вам, как это должно быть сделано.
В основном я сосредоточусь на том, как выполнить этот запрос, используя левое соединение.
Для этого примера предположим:
Первая таблица содержит «Сотрудники»
Вторая таблица содержит «Заказы»
Третья таблица содержит «Сведения о заказе»
- Прежде всего, создайте один новый запрос, а затем добавьте все эти 3 таблицы в новый запрос.
- Щелкните правой кнопкой мыши «линию соединения» между таблицей заказов и сотрудником. Во всплывающем меню выберите «Свойства соединения».
- В открывшемся окне «Объединить свойства» вы должны выбрать второй вариант, а затем нажать кнопку OK .
- Таким образом, ваш запрос будет выглядеть так. Вы увидите знак стрелки с правой стороны линии соединения между таблицами «Заказы» и «Сотрудники».
- После этого щелкните правой кнопкой мыши на линии соединения между деталями заказа и таблицей заказов. Теперь из всплывающего меню выберите опцию «объединить свойства» .
- В открывшемся окне Свойства выберите второй вариант и нажмите кнопку OK .
- Выберите поля, которые необходимо отображать в результатах запроса. Я выбрал следующие поля:
- Таким образом, когда запрос будет выполнен, вы увидите пустые значения в полях «Количество». И Дата заказа.
Это происходит из-за того, что на самом деле в соответствующих таблицах нет соответствующих записей, которые в основном используют критерии соединения.
Подведение итогов:Тем временем объединение таблиц в базе данных Access Если, к сожалению, вы потеряли таблицу, ее запись или что-то еще, то у вас также есть простая возможность восстановления данных. Хотите знать, что это..?
Что ж, в этой ситуации вы должны попробовать Средство восстановления и восстановления базы данных Access . С помощью этого профессионального инструмента вы сможете легко восстановить все потерянные данные из базы данных. Кроме того, если ваши данные потеряны из-за возникновения какой-либо проблемы с повреждением таблицы, этот инструмент также работает очень эффективно.
Проблемы остались? Исправьте их с помощью этого инструмента восстановления доступа:
Это программное обеспечение эффективно восстанавливает и восстанавливает все объекты ACCDB/MDB, включая таблицы, отчеты, запросы, записи, формы и индексы, а также модули, макросы и другие материалы.
- Загрузите Stellar Repair для Access с рейтингом Great на Cnet (загрузка начинается на этой странице ).
- Щелкните Browse и Search , чтобы найти поврежденную базу данных Access.
- Нажмите кнопку Восстановить , чтобы восстановить и просмотреть объекты базы данных.
Пирсон Уилли
Пирсон Уилли (Pearson Willey) — автор контента для веб-сайтов и специалист по планированию подробного контента. Помимо этого, он еще и заядлый читатель. Таким образом, он очень хорошо знает, как писать привлекательный контент для читателей. Писательство для него как растущий край. Ему нравится изучать свои знания в области MS Access и делиться техническими блогами.
Объединение таблиц и запросов
Когда вы включаете несколько источников данных в запрос Access, вы используете соединения, чтобы ограничить записи, которые вы хотите видеть, в зависимости от того, как источники данных связаны друг с другом. Вы также используете объединения для объединения записей из обоих источников данных, чтобы каждая пара записей из источников стала одной записью в результатах запроса.
В этой статье обсуждаются различные типы соединений и показано, как их использовать в запросе. По умолчанию объединение создается автоматически, если уже существует связь между двумя источниками данных, которые вы используете в запросе. Объединение также создается, если есть поля, которые явно соответствуют друг другу. Вы можете удалить автоматически созданное объединение. В этой статье представлены основные сведения о связях между таблицами, в том числе о том, как их создать.
Примечание. Вы можете объединять запросы так же, как вы соединяете таблицы, а также можете объединять и то, и другое.
В этой статье
Обзор
Типы соединений
Показать строки, в которых существует общее значение в обеих объединенных таблицах
Показать все строки из одной таблицы и соответствующие строки из другой таблицы
Показать все строки из обеих таблиц и соединить их там, где существует общее значение
Крест присоединяется
Соединение таблиц на основе неравенства значений полей
Удалить присоединение
Обзор
База данных — это набор таблиц данных, которые имеют логические связи друг с другом. Связи используются для соединения таблиц по полям, которые у них общие. Таблица может быть частью любого количества отношений, но каждое отношение всегда имеет ровно две таблицы. В запросе отношение представлено соединением.
При добавлении таблиц в запрос Access создает соединения на основе отношений, определенных между таблицами. Вы можете вручную создавать соединения в запросах, даже если они не представляют отношения, которые уже были определены. Если вы используете другие запросы (вместо или в дополнение к таблицам) в качестве источников данных для запроса, вы можете создавать соединения между исходными запросами, а также между этими запросами и любыми таблицами, которые вы используете в качестве источников данных.
Соединения ведут себя аналогично критериям запроса, поскольку они устанавливают правила, которым должны соответствовать данные, чтобы их можно было включить в операции запроса. В отличие от критериев, соединения также указывают, что каждая пара строк, удовлетворяющая условиям соединения, будет объединена в наборе записей для формирования одной строки.
Существует четыре основных типа соединений: внутренние соединения, внешние соединения, перекрестные соединения и неравные соединения. В этой статье рассматриваются все типы соединений, которые вы можете использовать, почему вы используете каждый тип и как создавать соединения.
Соединения предназначены для запросов о том, какие отношения относятся к таблицам: указание того, как данные в двух источниках могут быть объединены на основе значений данных, которые у них общие. Вот иллюстрация объединения в представлении «Дизайн запроса» со свойствами объединения, открытыми в диалоговом окне:
Эта строка между таблицами представляет объединение. Дважды щелкните объединение, чтобы открыть диалоговое окно «Свойства соединения» (см. рисунок) и просмотреть или изменить объединение.
Соединения иногда являются направленными. В этой области диалогового окна показано, какая таблица находится в объединении, и какие поля используются для объединения таблиц.
Эта область определяет тип соединения: вариант 1 — внутреннее соединение, 2 — левое внешнее соединение и 3 — правое внешнее соединение.
Можно использовать поля из обеих таблиц, и данные, относящиеся к заданной задаче, отображаются из каждой. Во внутреннее соединение никакие другие данные не включаются. При внешнем объединении несвязанные записи из одной таблицы также включаются в результаты запроса.
Верх страницы
Типы соединений
Существует четыре основных типа соединений: внутренние соединения, внешние соединения, перекрестные соединения и неравные соединения. Перекрестные соединения и неравные соединения являются расширенными типами соединений и редко используются, но вы должны знать о них, чтобы иметь полное представление о том, как работают соединения.
Внутренние соединения: объединены только связанные данные из обеих таблиц
Внутреннее соединение — это соединение, в котором Access включает данные из таблицы только в том случае, если в связанной таблице есть соответствующие данные, и наоборот. В большинстве случаев вы будете использовать внутренние соединения. Когда вы создаете соединение и не указываете его тип, Access предполагает, что вам нужно внутреннее соединение. Внутренние соединения полезны, потому что они позволяют объединять данные из двух источников на основе общих значений, поэтому вы видите данные только тогда, когда есть полная картина.
Внешние соединения: все связанные данные объединены правильно, а также все оставшиеся записи из одной таблицы
Внешнее соединение аналогично внутреннему соединению, но добавляет оставшиеся строки из одной из таблиц. Внешние соединения являются направленными: левое внешнее соединение включает все записи из левой таблицы — первой таблицы в соединении, а правое внешнее соединение включает все записи из правой таблицы — второй таблицы в объединении.
Полные внешние соединения: все данные, по возможности объединенные
В некоторых системах внешнее соединение может включать все строки из обеих таблиц с объединением строк, если они соответствуют друг другу. Это называется полным внешним соединением, и Access не поддерживает их явно. Однако вы можете использовать перекрестное соединение и критерии для достижения того же эффекта.
Перекрёстные соединения: все данные, объединенные всеми возможными способами
В большинстве случаев перекрестное соединение является побочным эффектом добавления двух таблиц в запрос, а затем забывания их соединить. Access интерпретирует это так, что вы хотите видеть каждую запись из одной таблицы в сочетании с каждой записью из другой таблицы — все возможные комбинации записей. Поскольку никакие данные не могут быть объединены, такое объединение редко дает полезные результаты. Но есть несколько случаев, когда перекрестное соединение — это то, что вам нужно.
Неравные соединения: как обычное соединение, но с использованием другого сравнения для объединения строк
.Неравные соединения используют оператор, отличный от знака равенства (=), для сравнения значений и определения того, следует ли и как объединять данные. Неравные соединения явно не поддерживаются, но вы можете использовать перекрестное соединение и критерии для достижения того же эффекта.
Показать строки, в которых существует общее значение в обеих объединенных таблицах
Если вы хотите показать только те строки, которые имеют совпадающие значения в объединенном поле, вы используете внутреннее соединение. Access создает внутренние соединения автоматически.
Внутренние соединения являются наиболее распространенным типом соединений. Они сообщают запросу, что строки из одной из объединенных таблиц соответствуют строкам в другой таблице на основе данных в объединенных полях. При выполнении запроса с внутренним соединением в операции запроса будут включены только те строки, в которых существует общее значение в обеих объединенных таблицах.
Как использовать внутреннее соединение?
В большинстве случаев для использования внутреннего соединения ничего делать не нужно. Если таблицы, которые вы добавляете в запрос, уже имеют отношения, Access автоматически создает внутреннее соединение между каждой парой связанных таблиц при добавлении таблиц. Если ссылочная целостность включена, Access также отображает «1» над линией соединения, чтобы показать, какая таблица находится на стороне «один» отношения «один ко многим», и символ бесконечности ( ∞ ), чтобы показать, какая таблица находится на стороне «многих».
Даже если вы не создали связи, Access автоматически создает внутренние соединения, если вы добавите в запрос две таблицы, каждая из которых имеет поле с одинаковым или совместимым типом данных, а одно из полей соединения является первичным ключом. Символы «один» и «многие» в этом случае не отображаются, поскольку ссылочная целостность не обеспечивается.
Если вы добавляете запросы в свой запрос и не создали связи между этими запросами, Access не создает автоматически внутренние соединения между этими запросами или между запросами и таблицами. Как правило, вы должны создавать их самостоятельно. Внутреннее соединение создается путем перетаскивания поля из одного источника данных в поле другого источника данных. Access отображает линию между двумя полями, чтобы показать, что объединение было создано.
Синтаксис SQL для внутреннего соединения
Внутренние соединения указаны в SQL в предложении FROM, как показано ниже:
ОТ таблица 1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблица 2 НА таблица 1 . поле1 сравнить таблицу2 . поле2
Операция INNER JOIN состоит из следующих частей:
Деталь | Описание |
таблица1 , таблица2 | Имена таблиц, из которых объединяются записи. |
поле1 , поле2 | Имена объединяемых полей. Если они не являются числовыми, поля должны иметь один и тот же тип данных и содержать данные одного типа, но они не обязательно должны иметь одно и то же имя. |
сравнить | Любой оператор реляционного сравнения: «=», «<», «>», «<=», «>=» или «<>». |
Дополнительные сведения о синтаксисе внутреннего соединения см. в разделе Операция INNER JOIN.
Верх страницы
Показать все строки из одной таблицы и соответствующие строки из другой таблицы
Внешние соединения сообщают запросу, что хотя некоторые строки на обеих сторонах соединения точно соответствуют друг другу, запрос должен включать все строки из одной таблицы, а также те строки из другой таблицы, которые имеют общее значение на обеих сторонах соединения. присоединиться.
Внешние соединения могут быть левыми внешними соединениями или правыми внешними соединениями. В левом внешнем соединении запрос включает все строки из первой таблицы в предложении FROM оператора SQL и только те строки из другой таблицы, где поле соединения содержит значения, общие для обеих таблиц. При правильном внешнем соединении запрос включает все строки из второй таблицы в предложении FROM инструкции SQL и только те строки из другой таблицы, в которых поле соединения содержит значения, общие для обеих таблиц.
Примечание. Вы можете легко определить, какая таблица является левой или правой таблицей в данном объединении, дважды щелкнув объединение и просмотрев диалоговое окно Свойства объединения . Вы также можете переключиться в представление SQL, а затем проверить предложение FROM.
Поскольку некоторые строки на одной стороне внешнего соединения не будут иметь соответствующих строк из другой таблицы, некоторые поля, возвращаемые в результатах запроса из этой другой таблицы, будут пустыми, если строки не соответствуют друг другу.
Как использовать внешнее соединение?
Вы создаете внешнее соединение, изменяя существующее внутреннее соединение. Если внутреннего соединения не существует, вы создаете его, а затем заменяете его внешним соединением.
Изменить внутреннее соединение на внешнее
В режиме конструктора запросов дважды щелкните объединение, которое нужно изменить.
Появится диалоговое окно Свойства соединения .
В диалоговом окне Свойства соединения обратите внимание на варианты, перечисленные рядом с параметром 2 и параметром 3 .
Щелкните параметр, который вы хотите использовать, а затем щелкните OK .
Access отображает объединение и показывает стрелку, указывающую от источника данных, в который будут включены все строки, к источнику данных, в который будут включены только те строки, которые удовлетворяют условию объединения.
Неоднозначные внешние соединения
Если вы создаете запрос, содержащий ЛЕВОЕ СОЕДИНЕНИЕ и ВНУТРЕННЕЕ СОЕДИНЕНИЕ, Access не сможет определить, какую операцию соединения выполнить первой. Поскольку результаты различаются в зависимости от того, выполняется ли сначала левое или внутреннее соединение, Access отображает сообщение об ошибке:
Чтобы исправить эту ошибку, необходимо изменить запрос, чтобы было ясно, какое соединение выполнять первым.
Синтаксис SQL для внешнего соединения
Внешние соединения указаны в SQL в предложении FROM, как показано ниже:
ИЗ таблица 1 [ ВЛЕВО | RIGHT ] JOIN table2
ON table1.field1 сравнить table2.field2
Операции LEFT JOIN и RIGHT JOIN состоят из следующих частей:
Деталь | Описание |
таблица1 , таблица2 | Имена таблиц, из которых объединяются записи. |
поле1 , поле2 | Имена объединяемых полей. Поля должны иметь один и тот же тип данных и содержать одинаковые данные, но они не обязательно должны иметь одно и то же имя. |
сравнить | Любой оператор реляционного сравнения: «=», «<», «>», «<=», «>=» или «<>». |
Дополнительные сведения о синтаксисе внешнего соединения см. в разделе Операции LEFT JOIN, RIGHT JOIN.
Верх страницы
Показать все строки из обеих таблиц и соединить их там, где существует общее значение
Если вы хотите показать все строки из двух таблиц и соединить их на основе общих значений, вы используете полное внешнее соединение. Access не поддерживает полные внешние соединения явно, но вы можете добиться того же эффекта, используя запрос на объединение. В следующей процедуре объясняется, как это сделать, но если вам нужна дополнительная информация о запросах на объединение, см. раздел См. также .
Чтобы использовать запрос на объединение для выполнения полного внешнего соединения:
Создайте запрос с левым внешним соединением в поле, которое вы хотите использовать для полного внешнего соединения.
На вкладке Главная в группе Представления щелкните Представление , а затем щелкните Представление SQL .
org/ListItem»>Удалите точку с запятой в конце предложения FROM и нажмите клавишу ВВОД.
Введите UNION и нажмите клавишу ВВОД.
Примечание. Не используйте ключевое слово ALL при использовании запроса на объединение для выполнения полного внешнего соединения.
Нажмите CTRL+V, чтобы вставить код SQL, скопированный на шаге 3.
Во вставленном коде замените LEFT JOIN на RIGHT JOIN .
Удалите точку с запятой в конце второго предложения FROM и нажмите клавишу ВВОД.
Добавьте предложение WHERE, указывающее, что значение поля соединения равно NULL в первой таблице, указанной в предложении FROM (левая таблица).
Например, если предложение FROM:
FROM Products RIGHT JOIN [Детали заказа]
ON Products.ID = [Детали заказа].[ID продукта]
Вы должны добавить следующее предложение WHERE:
ГДЕ Products.ID имеет значение NULL
Введите точку с запятой (;) в конце предложения WHERE, чтобы указать конец запроса на объединение.
На вкладке Design в группе Results щелкните Run .
Нажмите CTRL+C, чтобы скопировать код SQL.
Поперечные соединения
Перекрестные соединения отличаются от внутренних и внешних соединений тем, что они не представлены явно в Access. В перекрестном соединении каждая строка из одной таблицы объединяется с каждой строкой из другой таблицы, в результате чего получается то, что называется перекрестным произведением или декартовым произведением. Каждый раз, когда вы запускаете запрос с таблицами, которые не соединены явно, результатом является перекрестное произведение. Перекрёстные соединения обычно непреднамеренны, но бывают случаи, когда они могут быть полезны.
Зачем мне использовать перекрестное соединение?
Если вы хотите проверить все возможные комбинации строк между двумя таблицами или запросами, используйте перекрестное соединение. Например, предположим, что у вашего бизнеса был впечатляющий год, и вы рассматриваете возможность предоставления скидки своим клиентам. Вы можете создать запрос, который суммирует покупки каждого клиента, создать небольшую таблицу с несколькими возможными процентами скидки и объединить эти два запроса в другом запросе, выполняющем перекрестное соединение. В итоге вы получите запрос, отображающий набор гипотетических скидок для каждого клиента.
Как использовать перекрестное соединение?
Перекрестное соединение создается каждый раз, когда вы включаете в свой запрос таблицы или запросы и не создаете хотя бы одно явное соединение для каждой таблицы или запроса. Access объединяет каждую строку из каждой таблицы или запроса, которые явно не присоединены к какой-либо другой таблице или запросу, с каждой другой строкой в результатах. Рассмотрим сценарий скидки из предыдущего абзаца. Предположим, у вас есть 91 клиентов, и что вы хотите рассмотреть пять возможных процентов скидки. Ваше перекрестное соединение дает 455 строк (произведение 91 и 5).
Как вы понимаете, непреднамеренные перекрестные соединения могут создать огромное количество строк в результатах вашего запроса. Более того, эти результаты, как правило, бессмысленны, потому что, если вы на самом деле не собираетесь объединять каждую строку с каждой другой строкой, большинство объединенных строк, которые появляются в результатах, не будут иметь смысла. Наконец, запросы, использующие непреднамеренные перекрестные соединения, могут выполняться очень долго.
1. Обведенные поля должны быть соединены друг с другом.
1. Обратите внимание на очень большое количество записей.
1. Обратите внимание, что количество записей намного меньше.
Верх страницы
Соединение таблиц на основе неравенства значений полей
Соединения не обязательно должны основываться на эквивалентность соединяемых полей. Соединение может быть основано на любом операторе сравнения, таком как больше ( > ), меньше ( < ) или не равно ( <> ). Соединения, не основанные на эквивалентности, называются неравными соединениями.
Если вы хотите объединить строки двух источников данных на основе значений полей, которые не равны, вы используете неравное соединение. Как правило, неравные соединения основаны либо на большем, чем ( > ), меньше ( < ), больше или равно ( >= ) или меньше или равно ( <= ) операторов сравнения. Неравные соединения, основанные на операторе «не равно» ( <> ), могут возвращать почти столько же строк, сколько перекрестные соединения, и результаты могут быть трудно интерпретировать.
Как использовать неравное соединение?
Неравные соединения не поддерживаются в представлении «Дизайн». Если вы хотите использовать их, вы должны сделать это с помощью представления SQL. Однако вы можете создать объединение в представлении «Дизайн», переключиться в представление SQL, найти совпадения ( = ) оператора сравнения и измените его на оператор, который вы хотите использовать. После этого вы сможете снова открыть запрос в представлении «Дизайн», только если сначала измените оператор сравнения обратно на «равно» ( = ) в представлении SQL.
Удалить объединение
Если Access автоматически создает объединение, которое вам не нужно, или если вы создаете объединение по ошибке — например, между двумя полями с разными типами данных — вы можете удалить это объединение.
В сетке конструктора запросов щелкните объединение, которое нужно удалить.
org/ListItem»>
Нажмите УДАЛИТЬ .
-или-
Верх страницы
Объединение двух таблиц в Access?
Спросил
Модифицированный 1 месяц назад
Просмотрено 25k раз
У меня есть две таблицы с разными данными, которые мне нужно объединить. У них есть сходства, такие как: номер заказа, имя, тип или продукт. Но у них также есть отдельные данные, такие как: Дата заказа и Гравюры.
Могу ли я сделать два отдельных запроса на добавление в Access в объединенную таблицу? Или один запрос на добавление? Или просто хранить данные отдельно?
Я новичок в Access и пытаюсь найти лучший способ справиться с этим.
- ms-access
Объединение двух таблиц в одну полностью противоречит цели использования базы данных, и вам лучше использовать Excel на этом этапе. Вы хотите как можно больше разбить данные по логическим линиям, чтобы найти, скажем… все заказы определенного продукта, которые мистер X когда-либо делал. И в этом случае вам понадобятся отдельные таблицы для клиентов, заказов, гравюр и тому подобного.
Наилучшая практика с точки зрения дизайна — поместить поля, общие для каждой таблицы, в третью «главную» таблицу, затем создать связи из этой таблицы с существующими таблицами и удалить данные, которые были перенесены в основную таблицу ( за исключением первичных ключей, которые должны быть общими с вашей главной таблицей).
Чтобы создать основную таблицу, используйте запрос «Создать таблицу» для создания главной таблицы на основе одной из ваших таблиц, а затем запрос на добавление для добавления любых продуктов в основную таблицу, которые могут не быть общими для обеих, на основе другой таблицы. . Наконец, запросы на удаление для каждой таблицы избавят вас от избыточных данных в обеих исходных таблицах.
Тем не менее, я настоятельно рекомендую вам воспользоваться учебными пособиями Microsoft и загрузить образец базы данных NorthWind, чтобы вы могли получить представление о том, как выглядит правильно структурированная база данных. Кривая обучения новичка для доступа очень крутая, и наличие хорошо построенных примеров баз данных является почти обязательным условием.
Сделайте резервную копию вашей базы данных и поэкспериментируйте с ней, пока не получится. Не совершайте ошибку, играя с оперативными данными, пока не поймете, что делаете.
1
Поскольку у вас есть похожие поля в обеих таблицах, возьмите поле Номер заказа из обеих таблиц, используя запрос на объединение. Что-то вроде:
SELECT tbl_Delivery_Details.OrderNo ОТ tbl_Delivery_Details СГРУППИРОВАТЬ ПО tbl_Delivery_Details.OrderNo СОЮЗ SELECT tbl_Delivery_Header.[Номер заказа] ОТ tbl_Delivery_Header СГРУППИРОВАТЬ ПО tbl_Delivery_Header.[Номер заказа];
Это позволит взять номера заказов из таблицы сведений о доставке и из таблицы заголовка доставки и объединить их в один список только с одним экземпляром каждого номера заказа. Сохраните запрос.
Затем вы можете использовать этот запрос в новом запросе. Внесите свои 2 таблицы в этот запрос и вставьте поля из любой таблицы, которые вам нужны.
Когда пользователи добавляют записи в таблицы, они будут добавлены в запрос на объединение при следующем запуске.
PB
Это зависит от того, что вы хотите сделать. Предположим, у вас есть таблицы A
(с 50 записями) и B
(с 75) записями, и обе таблицы имеют похожий столбец с именем OrderID
.
Добавление строк: Если вы хотите создать таблицу со 125 записями путем объединения записей (строк) из A
и записей (строк) из B
, выполните следующие два запроса:
Запрос 1:
SELECT A.ORDER_NUMBER , A.TEXT_FIELD1 как ДАННЫЕ В C ИЗ;
Запрос 2:
ВСТАВИТЬ В C (НОМЕР ЗАКАЗА, ДАННЫЕ) ВЫБЕРИТЕ B.ORDER_NUMBER, B.TEXT_FIELD2 ОТ Б;
Добавление столбцов: Если вы хотите создать таблицу с 75 записями, в которой вы добавляете столбцы из A
к столбцам в B
, выполните следующий запрос:
SELECT B.