SQL объединить два запроса одной и той же таблицы в один
Есть таблица COUNT(«Employee Name») GROUP BY «Manager Name», «Performance Score» Мне посчитает кол-во оценок одного и того же типа у каждой менеджера, а COUNT(«Employee Name») GROUP BY «Manager Name» должен считать Кол-во сотрудников у каждого менеджера должно быть 4 столбца два из который вычисляемые
Как объединить эти два запроса, чтобы получить нужную таблицу? Запрос 1: »’SELECT «Manager Name», «Performance Score», COUNT(«Employee Name») as «Кол-во оценок» FROM hr_dataset GROUP BY «Manager Name», «Performance Score» ORDER BY «Manager Name», «Кол-во оценок»»’ Запрос 2: »’SELECT «Manager Name», COUNT(«Employee Name») as «Кол-во сотрудников» FROM hr_dataset GROUP BY «Manager Name» ORDER BY «Manager Name»»’
Отслеживать
задан 11 окт 2021 в 11:45
1 1 1 бронзовый знак
не понимаю, что движет людьми, когда они именуют поля заведомо зная что придется их экранировать каждый раз в запросах. В любом случае, приведите пример исходных данных и желаемого результата.
11 окт 2021 в 11:54
Укажите точно СУБД, включая точную версию.
Пример LEFT JOIN базы данных — как объединить две таблицы в запросе SQL 1 мин для чтения

Привет, ребята, когда дело доходит до объединения двух таблиц в SQL, многие программисты не знают, что они могут использовать предложение JOIN. На самом деле JOIN существует для того, чтобы извлекать данные из нескольких таблиц вместе. Существует в основном два типа соединений: внутреннее соединение и внешнее соединение. При внутреннем соединении, выбираются только те записи, которые имеют совпадающие значения в обеих таблицах, в то время как при внешнем соединении все записи из одной таблицы выбираются в дополнение к совпадающим записям из других таблиц. В SQL существует два вида внешнего соединения: левое внешнее соединение и правое внешнее соединение. На самом деле это одно и то же, а значит, вы можете получить один и тот же результат, используя любое из внешних соединений, просто изменив положение таблицы слева направо.
Есть две таблицы человека и адреса, как показано ниже :
+——————+———+
| Column Name | Type |
+——————+———+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+——————+———+
PersonId — это столбец первичного ключа для этой таблицы.
+——————+———+
| Column Name | Type |
+——————+———+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+——————+———+
AddressId-это столбец первичного ключа для этой таблицы.
Проблема-напишите SQL-запрос для отчета, который предоставляет следующую информацию для каждого человека в таблице Person, независимо от того, есть ли адрес для каждого из этих людей:
Читать 4 полезных инструмента командной строки для мониторинга производительности MySQL в Linux
FirstName, LastName, City, State
Вы можете решить эту проблему, используя левое или правое внешнее соединение, потому что вам нужно объединить здесь две таблицы, чтобы получить как имена, так и адресную информацию.
SQL Joins — это одна из сложных, но важных концепций для изучения, и прохождение этого курса поможет вам научиться более структурированно, что в конечном итоге поможет вам быстро решить такого рода проблемы, как на работе, так и на собеседованиях по кодированию.
Объедините две таблицы с помощью LEFT JOIN
Как мы уже говорили, мы можем решить эту проблему, объединив как таблицу Person, так и таблицу Address. Вы можете использовать либо внутреннее соединение, либо внешнее соединение, чтобы объединить таблицу, но здесь важно отметить, что вам нужно распечатать записи для каждого человека в таблице Person, независимо от того, есть ли адрес или нет.
Это означает, что вы не можете решить эту проблему с помощью INNER join, потому что если вы использовали INNER join, то будут напечатаны только люди с адресом. Если нам нужно напечатать всех людей с адресом или без адреса, то нам нужно использовать левое соединение (Person LEFT JOIN Address) или правое соединение (Address RIGHT JOIN Person).
В этом примере мы будем использовать левое соединение, потому что это гораздо легче читать
Вот решение этой проблемы SQL :
SELECT FirstName, LastName, City, State FROM Person p LEFT JOIN Address a ON p.PersonId = a.PersonId
Вы также можете написать этот запрос, как показано на слове OUTER, это необязательно в MySQL, что означает, что будет работать как LEFT JOIN, так и LEFT OUTER JOIN.
SELECT FirstName, LastName, City, State FROM Person p LEFT OUTER JOIN Address a ON p.PersonId = a.PersonId
Тот же самый запрос можно написать и с помощью правого внешнего соединения. Вот как вы это делаете:
SELECT FirstName, LastName, City, State FROM Address a RIGHT OUTER JOIN Person p ON a.PersonId = p.PersonId
Этот запрос выдаст тот же результат, что и два предыдущих запроса. Если вы посмотрите внимательно, то мы поменялись позицией персоны и адресной таблицей в этом запросе. Раньше Person был на левой стороне, но теперь из-за правого соединения он находится на правой стороне.
Читать Может ли иметь таблица пространство WASTED/FRAGMENTED без удаления данных (DELETE) в MySQL?
Соединения — это трюк, и их так много, что их нужно выучить, но эта диаграмма хороший способ выучить их, ведь SQL — это один из основных навыков как для программистов, так и для специалистов по обработке данных.

Это все о том, как объединить таблицы в SQL с помощью левого и правого внешних соединений. Просто помните, что если вам нужны только совпадающие записи из обеих таблиц, то используйте внутреннее соединение, если вам нужны все записи из одной таблицы в дополнение к совпадающим записям из другой таблицы, то, пожалуйста, используйте внешнее соединение в SQL.
Вы можете использовать левые или правые соединения по своему усмотрению, но если вы используете LEFT OUTER JOIN, убедитесь, что вы поместили правую таблицу на левую сторону предложения JOIN, как таблицу, из которой вам нужны все записи.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Объединение таблиц и запросов
Если в запрос Access включено несколько источников данных, для ограничения записей используются соединителичные функции в зависимости от того, как источники данных связаны друг с другом. Вы также можете использовать объединения для объединения записей из обоих источников данных, чтобы каждая пара записей из источников стала одной записью в результатах запроса.
В этой статье рассмотрены различные типы мероприятий и показано, как их использовать в запросе. По умолчанию оно создается автоматически, если между двумя источниками данных уже существует связь, используемая в запросе. Кроме того, если есть поля, четко соответствующие друг другу, создается такое соединиться. Вы можете удалить автоматически созданное присоединиться. В этой статье приводится базовая информация о связях между таблицами, в том числе о том, как ее создать.
Примечание: Запросы можно присоединять так же, как и таблицы, а также одновременно присоединяться к ним.
В этой статье
- Обзор
- Типы соединители
- Показать строки, в которых в обеих таблицах есть общее значение
- Показать все строки из одной таблицы и соответствующие строки из другой таблицы
- Показать все строки из обеих таблиц и объединить их там, где есть общее значение
- Перекрестные соединители
- Соединяем таблицы на основе неравных значений полей.
- Удаление join
Обзор
База данных — это набор таблиц данных, которые имеют логические отношения друг с другом. Связи используются для соединения таблиц по общим полям. Таблица может быть частью любого числа связей, но каждая связь всегда имеет ровно две таблицы. В запросе связь представлена связью.
При добавлении таблиц в запрос Access на основе отношений, определенных между таблицами. Вы можете вручную создавать в запросах такие связи, даже если они не представляют связи, которые уже были определены. Если в качестве источников данных для запроса используются другие запросы (вместо таблиц или в дополнение к ним), вы можете создавать связи между исходными, а также между ними и любыми таблицами, которые используются в качестве источников данных.
Такое же поведение аналогично условиям запроса тем, что они устанавливают правила, которым должны соответствовать данные для включения в операции запроса. В отличие от условий, они также определяют, что каждая пара строк, удовлетворяющих условиям, будет объедина в наборе записей для формирования одной строки.
Существует четыре основных типа: внутренние, внешние, перекрестные и неравные. В этой статье мы рассмотрим каждый из типов, которые можно использовать, причины их использования и их создание.
Они должны запрашивать связи между таблицами, что указывает на то, как данные в двух источниках могут быть объединены на основе общих значений. На рисунке в конструкторе запроса можно увидеть, как объединить, а его свойства будут открыты в диалоговом окне.

Эта линия между таблицами представляет связь. Дважды щелкните соединитель, чтобы открыть диалоговое окно «Свойства для join» (показанное на рисунке) и просмотреть или изменить его.
Иногда такие соединители являются направлением. В этой области диалогового окна показано, какая таблица используется для связи и какие поля используются для ее соединить.
Эта область определяет тип связи: вариант 1 — внутреннее, 2 — левое внешнее, а 3 — правое внешнее.
Можно использовать поля из обеих таблиц, а данные, относящиеся к данной задаче, отображаются в каждой из них. При внутреннем подмедине никакие другие данные не включаются. При внешнем подмыве также включаются несвязанные записи из одной таблицы в результаты запроса.
Типы соединители
Существует четыре основных типа: внутренние, внешние, перекрестные и неравные. Перекрестные и неравные соединители являются расширенными типами и редко используются, но вам следует знать о них, чтобы иметь полное представление о том, как они работают.
Внутренние связи: объединяются только связанные данные из обеих таблиц
Внутреннее присоединение — это внутреннее, при котором Access включает данные из таблицы, только если соответствующие данные есть в связанной таблице, и наоборот. Чаще всего используются внутренние соединители. Когда вы создаете присоединение и не указываете его тип, Access предполагает, что вы хотите создать внутреннее. Внутренние объединения полезны тем, что они могут объединять данные из двух источников на основе общих значений, поэтому вы видите данные только в том случае, если есть законченная фотография.
Внешние связи: все связанные данные объединяются правильно, а также все оставшиеся записи из одной таблицы
Внешнее соединить похоже на внутреннее, но добавляет оставшиеся строки из одной из таблиц. Внешнее соединителевое — это направление: левое внешнее — все записи из левой таблицы (первая таблица в составе), а правое внешнее — все записи правой таблицы, вторая — в составной.
Полные внешние соединители: все данные, объединенные, где это целесообразно
В некоторых системах внешнее совместие может включать все строки из обеих таблиц, а соответствующие строки объединяются. Это называется полным внешним присоединением, и Access не поддерживает их явным образом. Тем не менее для этого можно использовать перекрестные связи и условия.
Перекрестные объединить: все данные, объединенные всеми возможными способом
В большинстве раз перекрестные связи — это побочный эффект добавления в запрос двух таблиц, которые не могут быть так часто присоединяться. Access интерпретирует это, чтобы вы могли видеть все записи из одной таблицы вместе с каждой записью из другой таблицы — все возможные комбинации записей. Так как объединить данные нельзя, такие связи редко дают полезные результаты. Но есть несколько случаев, когда перекрестный переход — это то, что вам нужно.
Неравные объединения: как обычное объединение, но использование другого сравнения для объединения строк
Для сравнения значений и их объединения в неравных объединениях используется оператор, который не имеет знака равной (=). Неравные связи явным образом не поддерживаются, но для достижения того же эффекта можно использовать перекрестное сечение и условия.
Показать строки, в которых в обеих таблицах есть общее значение
Если вы хотите, чтобы в соединенном поле были только те строки, которые имеют совпадающие значения, используйте внутреннее. Access автоматически создает внутренние соединители.
Внутреннее объединение — это самый распространенный тип объединения. Он сообщает запросу, что строки из одной из таблиц, которые соединены, соответствуют строкам другой таблицы на основе данных в этих полях. При запуске запроса со внутренними соединителями в операции запроса включаются только те строки, в которых в обеих таблицах есть общее значение.
Как использовать внутреннее?
В большинстве раз вам не нужно делать что-то, чтобы использовать внутреннее соединиться. Если таблицы, добавленные в запрос, уже имеют связи, При добавлении таблиц Access автоматически создает внутреннее отношение между каждой парой связанных таблиц. Если целостность данных, access также отображает «1» над линией связи, чтобы показать, какая таблица находится на стороне «один» отношение «один-ко-многим», и символ бесконечности(∞),чтобы показать, какая таблица находится на стороне «многие».
Даже если вы не создали связи, Access автоматически создает внутренние связи, если в запрос добавлены две таблицы, в каждой из которых есть поля с одинаковым или совместимым типом данных, а одно из полей связи является первичный ключ. В этом случае символы «один» и «многие» не отображаются, поскольку целостность данных не выполняется принудительно.
Если вы добавили запросы в запрос и не создали между ними связи, Access не создает внутренние связи между этими запросами и таблицами автоматически. Как правило, их следует создавать самостоятельно. Внутреннее соединиться создается путем перетаскивание поля из одного источника данных в поле другого источника данных. Access добавит линию между двумя полями, чтобы показать, что они соединены.
SQL синтаксис внутреннего join
Внутреннее секается в SQL предложении FROM, как показано ниже:
FROM таблица1 INNER JOIN таблица2 ON таблица1.поле1 compare table2.поле2
Операция INNER JOIN состоит из следующих элементов:
таблица1, таблица2
Имена таблиц, содержащих объединяемые записи.
поле1, поле2
Имена полей, которые соединены. Если они не являются числами, поля должны быть одного тип данных и содержать данные одного типа, но не должны иметь одинаковых имен.
Любой оператор сравнения: (=, , = или <>)
Дополнительные сведения о синтаксисе внутреннего соединиться см. в разделе операция 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
Имена полей, которые соединены. Поля должны быть одного типа тип данных и содержать данные одинакового типа, но имена этих полей могут быть одинаковыми.
Любой оператор сравнения: (=, , = или <>)
Дополнительные сведения о внешнем синтаксисе см. в разделе «Операции LEFT JOIN, RIGHT JOIN».
Показать все строки из обеих таблиц и объединить их там, где есть общее значение
Если вы хотите от показать все строки из двух таблиц и объединить их на основе общих значений, используйте полное внешнее соединить. Access явным образом не поддерживает полное внешнее соединение, но такой же результат можно получить с помощью запроса на объединение. Ниже объясняется, как это сделать, но если вам нужны дополнительные сведения о запросах на объединение, см. раздел «См. также».
Чтобы использовать запрос на объединение для полного внешнего объединения:
- Создайте запрос с левым внешним присоединимым полем, которое вы хотите использовать для полного внешнего соединиться.
- На вкладке Главная в группе Режимы выберите команду Режим, а затем — Режим SQL.
- Нажмите CTRL+C, чтобы SQL код.
- Удалите 12-ю пунктов в конце предложения FROM и нажмите ввод.
- Введите слово UNION и нажмите клавишу ВВОД.
Примечание: Не используйте ключевое слово ALL при использовании запроса на объединение для полного внешнего объединения.
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]
Перекрестные соединители
Перекрестные соединить отличаются от внутренних и внешних, так как они явно не представлены в Access. В перекрестном сочетании каждая строка из одной таблицы объединяются с каждой строкой из другой таблицы, что приводит к так называемой перекрестной продукции или декартово произведением. Каждый раз при запуске запроса, который содержит таблицы, которые не присоединились явным образом, результатом будет перекрестный продукт. Перекрестные соединить обычно непреднамеренны, но в некоторых случаях они могут быть полезными.
Зачем использовать перекрестный переход?
Если вы хотите изучить все возможные сочетания строк между двумя таблицами или запросами, используйте перекрестное соединение. Предположим, что у вашей компании был впечатляющий год, и вы хотите дать клиентам бонусы. Вы можете создать запрос для суммы покупок каждого клиента, создать небольшую таблицу с несколькими возможными процентами бонусов и объединить их в другом запросе, который выполняет перекрестное объединение. В результате будет создан запрос с набором гипотетических бонусов для каждого клиента.
Как использовать перекрестный переход?
Перекрестные объединить создаются каждый раз, когда вы включаете в запрос таблицы или запросы и не создаете хотя бы одно явное соединить для каждой таблицы или запроса. Access объединяет каждую строку из каждой таблицы или запроса, которые не были явно соединены с другой таблицей или запросом в каждой второй строке результатов. Рассмотрим сценарий бонусов из предыдущего абзаца. Предположим, у вас 91 клиент и вы хотите посмотреть на пять возможных процентов бонусов. Перекрестные связи создают 455 строк (произведение из 91 и 5).
Как можно представить, непреднамеральные перекрестные объедиения могут привести к созданию большого количества строк в результатах запроса. Кроме того, эти результаты в общем случае не имеют смысла, так как если вы не собираетесь объединять каждую строку с каждой второй строкой, большинство объединенных строк, которые отображаются в результатах, будут не имеют смысла. Наконец, выполнение запросов, которые используют непреднамеральные перекрестные объединия, может занять очень много времени.
1. Круговые поля должны быть соединены друг с другом.
1. Обратите внимание на очень большое количество записей.
1. Обратите внимание, что количество записей значительно меньше.
Соединяем таблицы на основе неравных значений полей.
При этом не нужно, чтобы они были основаны на эквивалентности полей. Объединить можно с учетом любого оператора сравнения, например больше (>), меньше (<) или не равно (<>). Такие соединить называются неравными.
Если вы хотите объединить строки двух источников данных на основе неравных значений полей, используйте неравные объединения. Как правило, неравные связи основаны наоператорах сравнения>, меньших или равных (<), которые больше или равны (>=) или меньше (). Неравные связи, основанные на операторе «не равно» (<>) могут возвращать почти такое же количество строк, как и перекрестные. Результаты может быть сложно интерпретировать.
Как использовать неравные составные?
Неравные связи не поддерживаются в конструкторе. Если вы хотите использовать их, это необходимо сделать с помощью SQL просмотра. Однако вы можете создать объединить в конструкторе, переключиться в SQL, найти оператор сравнения » ocpLegacyBold»>иизменить его на нужный оператор. После этого вы сможете снова открыть запрос в конструкторе только при первом изменении оператора сравнения на равно(=)SQL представлении.
Удаление join
Если Access автоматически создает не нужное или вы создаете его по ошибке (например, связь между двумя полями с данными разного типа), это можно удалить.
- В сетке конструктора запросов щелкните объединить, которые вы хотите удалить.
- Нажмите кнопку DELETE.
- В сетке конструктора запросов щелкните правой кнопкой мыши соедините, который нужно удалить, и выберите «Удалить».
Как соединить две таблицы в 1С
1. Внутреннее соединение таблиц 2. Внешнее соединение таблиц 3. Левое соединение в 1С 4. Правое соединение 5. Полное соединение в 1С 6. Перекрёстное соединение (декартово произведение ) Для извлечения и обработки данных в «1С:Предприятии» используют запросы, которые пишутся на собственном SQL-подобном языке запросов. Зачастую в запросе нужно собрать данные из нескольких таблиц, соединив данные из них в результирующей таблице. При этом обычно требуется связать данные таблиц по некоторому общему полю.
Таблицы, являющиеся источниками данных для последующего соединения, перечисляются в запросе после ключевого слова ИЗ.
Обычно таблицы, из которых извлекаются данные в запросе с соединением, связываются между собой по некому условию (условию связи). Соединение таблиц в запросах обычно производится по полю, имеющему ссылочный тип, для каждой записи в исходных таблицах производится проверка условия (на равенство, неравенство) значений полей, выступающих условием связи. Это условие задаётся в запросе после ключевого слова ПО в предложении ИЗ, например: ПО Должности.ФизЛицо = ФизЛица.Ссылка.
В соответствии с тем, должны ли записи таблиц-источников удовлетворять условию связи, можно выделить несколько вариантов соединения двух таблиц: внутреннее и внешнее соединение, к которому относят левое и правое соединение, полное соединение, при этом в запросе используются соответствующие ключевые слова.
Рассмотрим каждый из видов соединения подробнее и расскажем, как соединить две таблицы.
1. Внутреннее соединение таблиц
В результате внутреннего соединения таблиц соединяются лишь записи из таблиц-источников данных, удовлетворяющие объявленному условию связи, прочие же записи игнорируются. Иными словами, запрос ищет строки с идентичным значением ключа и включает в результат только их. Ключевое слово ВНУТРЕННЕЕ в тексте запроса использовать необязательно. Стоит отметить, что в результате запроса в случае, когда несколько одинаковых записей удовлетворяют условию, в таблицу попадёт каждая из них.
Продемонстрируем сказанное на пример. Пусть у нас имеются две таблицы: ФизЛица и Должности:
Запрос: Справочник.ФизЛица (Записей в результате: 8)
Рисунок 1. Исходная таблица 1 ФизЛица
Запрос: Справочник.Должности (Записей в результате: 8)
Рисунок 2. Исходная таблица 2 Должности Выполним следующий запрос для внутреннего соединения: ВЫБРАТЬ ФизЛица.Код КАК Код, ФизЛица.Наименование КАК Имя, ГОД(ФизЛица.ДатаРождения) КАК ГодРождения, Должности.Наименование КАК Должность, Должности.Отдел КАК Отдел ИЗ Справочник.ФизЛица КАК ФизЛица ВНУТРЕННЕЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности ПО Должности.ФизЛицо = ФизЛица.Ссылка УПОРЯДОЧИТЬ ПО Код В результате внутреннего соединения таблиц получим такую таблицу:
Запрос: Справочник.ФизЛица (Записей в результате: 6)
Рисунок 3. Демонстрация внутреннего соединения Как видим, в результате мы получили исключительно те строки из двух таблиц-источников, которые соответствовали объявленному условию, а физлица и должности, не сопоставленные друг другу, в таблицу не вошли.
2. Внешнее соединение таблиц
Данный тип соединения, именуемый внешним соединением таблиц, приводит к принципиально иному результату, что и обусловливает его название – в результат запроса попадут как те строки, которые удовлетворяют объявленному в тексте запроса условию работы соединения, так и строки, для которых соответствия в другой таблице не было найдено.
Рассмотрим варианты внешних соединений – левого и правого соединения.
3. Левое соединение в 1С

Метод левого соединения в 1С Предприятие – это способ соединения, при котором помимо записей из обеих таблиц-источников, удовлетворяющих объявленному условию работы соединения, в полученную после выполнения запроса таблицу попадают записи из левой относительно ключевого слова СОЕДИНЕНИЕ таблицы значений (безотносительно наличия соответствий в правой таблице-источнике).
При этом в результирующей таблице «недостающим» значениям будет присвоено NULL. Из правой таблицы-источника в результирующей таблице будут исключительно те записи, для которых соблюдается объявленное условие, прочие же записи будут игнорированы.
Ключевое слово ВНЕШНЕЕ в тексте запроса использовать не обязательно. Приведём текст запроса: ВЫБРАТЬ ФизЛица.Код КАК Код, ФизЛица.Наименование КАК Имя, ГОД(ФизЛица.ДатаРождения) КАК ГодРождения, Должности.Наименование КАК Должность, Должности.Отдел КАК Отдел ИЗ Справочник.ФизЛица КАК ФизЛица ЛЕВОЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности ПО Должности.ФизЛицо = ФизЛица.Ссылка УПОРЯДОЧИТЬ ПО Код Результат выполнения запроса будет иметь следующий вид:
Запрос: Справочник.ФизЛица (Записей в результате: 8)
Рисунок 4. . Демонстрация левого соединения Из таблицы видно, что из левой таблицы-источника ФизЛица были взяты все записи, даже те, для которых не нашлось соответствия в правой таблице Должности.
4. Правое соединение
Этот способ соединения, если сравнить его с левым, даёт зеркально противоположный результат. Иначе говоря, из правой таблицы-источника будут взяты все записи, тогда как из левой – лишь те, что соответствуют записям правой таблицы-источника, то есть те, для которых удовлетворяется объявленное условие связи.
При этом в результирующей таблице «недостающим» (для которых не найдены связи по условию) значениям будет присвоено NULL.. Указание ключевого слова ВНЕШНЕЕ в тексте запроса не имеет принципиального значения.
Фактически, правое соединение преобразуется к левому, если поменять таблицы одну относительно другой местами и соединить их левым – противоположным – соединением. Такое преобразование осуществляет платформа «1С:Предприятия» при выполнении запроса.
В случае и левого, и правого соединения принципиальный момент заключается в том, по какую сторону от ключевого слова СОЕДИНЕНИЕ в тесте запроса указана соответствующая таблица, сам же порядок указания таблиц в условии связи неважен.
Запрос с использованием правого соединения: ВЫБРАТЬ ФизЛица.Код КАК Код, ФизЛица.Наименование КАК Имя, ГОД(ФизЛица.ДатаРождения) КАК ГодРождения, Должности.Наименование КАК Должность, Должности.Отдел КАК Отдел ИЗ Справочник.ФизЛица КАК ФизЛица ПРАВОЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности ПО Должности.ФизЛицо = ФизЛица.Ссылка УПОРЯДОЧИТЬ ПО Код Результат запроса:
Запрос: Справочник.ФизЛица (Записей в результате: 8)

Рисунок 5. Демонстрация правого соединения Как видим, теперь все записи взяты из правой таблицы Должности, и в таблице оказались даже те записи о должностях, для которых не нашлось физлиц.
5. Полное соединение в 1С

При полном соединении в 1С Предприятие в результате таблица будет состоять как из удовлетворяющих условию объединения записей, так и тех записей, для которых это условие не было выполнено. Иначе говоря, в результате получится таблица, состоящая из всех строк обеих исходных таблиц.
При этом в результирующей таблице «недостающим» (для которых не найдены связи по условию) значениям будет присвоено NULL. Запрос: ВЫБРАТЬ ФизЛица.Код КАК Код, ФизЛица.Наименование КАК Имя, ГОД(ФизЛица.ДатаРождения) КАК ГодРождения, Должности.Наименование КАК Должность, Должности.Отдел КАК Отдел ИЗ Справочник.ФизЛица КАК ФизЛица ПОЛНОЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности ПО Должности.ФизЛицо = ФизЛица.Ссылка УПОРЯДОЧИТЬ ПО Код
Запрос: Справочник.ФизЛица (Записей в результате: 10)
Рисунок 6. Демонстрация полного соединения В результате запроса в таблице, кроме полных строк, оказались как сведения о физлицах, для которых нет соответствия в таблице Должности, так и должности, не связанные с физлицами.
6. Перекрёстное соединение (декартово произведение )

Перекрёстное соединение позволяет соединить каждую строку одной таблице с каждой строкой другой таблице. Такой запрос приведёт к созданию таблицы размером x*y, где x и y – соответственно, число строк в соединяемых таблицах.
С математической точки зрения, приведённые выше виды внешних соединений таблиц являются производными от декартова произведения, однако используются намного чаще, так как результат декартова произведения обычно избыточен для пользователя.
Приведём запрос перекрёстного соединения: ВЫБРАТЬ ФизЛица.Код КАК Код, ФизЛица.Наименование КАК Имя, ГОД(ФизЛица.ДатаРождения) КАК ГодРождения, Должности.Наименование КАК Должность, Должности.Отдел КАК Отдел ИЗ Справочник.ФизЛица КАК ФизЛица ПОЛНОЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности ПО ИСТИНА УПОРЯДОЧИТЬ ПО Код Заметим, что запрос можно написать иначе: ВЫБРАТЬ ФизЛица.Код КАК Код, ФизЛица.Наименование КАК Имя, ГОД(ФизЛица.ДатаРождения) КАК ГодРождения, Должности.Наименование КАК Должность, Должности.Отдел КАК Отдел ИЗ Справочник.ФизЛица КАК ФизЛица, Справочник.Должности КАК Должности Запрос: Справочник.ФизЛица (Записей в результате: 64)
Рисунок 7. Заголовок таблицы декартова произведения В результате выполнения запроса получается таблица с 64 строками (8*8). Специалист компании «Кодерлайн» Дмитрий Колесников
