З'єднання - одна з найбільш частих операцій, виконуваних над базами даних. З'єднання використовуються для того, що б поставити у відповідність рядка з однієї таблиці рядкам в інший. Відповідність проводиться за значенням одного з полів, яке ми будемо називати ключовим.
Принципово, з'єднання використовуються для того, що б отримати в одній вибірці інформацію з різних джерел. Інакше кажучи, джерела з'єднуються в тому випадку, коли відрізняється їх фізичний зміст.
Існує чотири види з'єднань таблиць, які обробляє механізм запитів 1С: Прсдпріятія: Внутрішнє, Ліве зовнішнє. Праве зовнішнє, Повний Зовнішнє (або. Простіше. Внутрішнє, Ліве, Праве, Повний).
внутрішнє з'єднання
[ВНУТРІШНЄ] З'ЄДНАННЯ означає, що з обох вихідних таблиць - джерел даних в результат запиту необхідно включити тільки ті комбінації записів, які відповідають вказаним умові. Решта записи в результат не попадают.Ключевое слова ВНУТРІШНЄ можна не вказувати взагалі, воно підвищує наочність і легкість для читання тексту запиту.
Найпростіший вид з'єднання - внутрішнє. У цьому випадку запит просто знаходить пари рядків з збігається значенням »ключа (в даному прикладі, як і у всіх наступних, в якості ключового поля використовується поле« Контрагент »).
Ліве (Правое) з'єднання
ЛІВЕ [ЗОВНІШНЄ] З'ЄДНАННЯ означає, що в результат запиту треба включити комбінації записів з обох вихідних таблиць, які відповідають вказаним умові. Але, на відміну від внутрішнього сполучення, в результат запиту треба включити також ще і записи з першого (зазначеного зліва від слова З'ЄДНАННЯ) джерела, для яких не знайдено відповідних умові записів з другого джерела. Таким чином, в результат запиту будуть включені всі записи з першого джерела; вони будуть з'єднані з записами з другого джерела при виконанні зазначеної умови. Рядки результату запиту, для яких не знайдено відповідних умові записів з другого джерела, будуть містити NULL в полях, що формуються на підставі записів з цього джерела.
ПРАВОЕ [ЗОВНІШНЄ] З'ЄДНАННЯ означає, що в результат запиту треба включити комбінації записів з обох вихідних таблиць, які відповідають вказаним умові. Крім того, в результат запиту треба включити також ще і записи з другого (зазначеного праворуч від слова З'ЄДНАННЯ) джерела, для яких не знайдено відповідних умові записів з першого істочніка.Такім чином, в результат запиту будуть включені всі записи з другого джерела; вони будуть з'єднані з записами з першого джерела при виконанні зазначеної умови. Рядки результату запиту, для яких не знайдено відповідних умові записів з першого джерела, будуть містити NULL в полях, що формуються на підставі записів з цього джерела.
Ситуація ускладнюється, коли джерела збігаються в повному обсязі. 'Го є, в одній таблиці є запис з деяким значенням ключа, а в інший такого запису немає. На схемі показана ситуація, коли запис є в таблиці контрагентів, але немає в таблиці продажів. Це означає, що якийсь контрагент нічого у нас не купував, хоча в довіднику контрагентів він у нас є (наприклад, попросив людей виписати йому рахунок на оплату, а купувати передумав; цілком життєва ситуація). В цьому випадку у вибірці на місці відсутньої запису з'явиться значення Null.
Повний з'єднання
ПРАВОЕ [ЗОВНІШНЄ] З'ЄДНАННЯ означає, що в результат запиту треба включити комбінації записів з обох вихідних таблиць, які відповідають вказаним умові. Крім того, в результат запиту треба включити також ще і записи з другого (зазначеного праворуч від слова З'ЄДНАННЯ) джерела, для яких не знайдено відповідних умові записів з першого істочніка.Такім чином, в результат запиту будуть включені всі записи з другого джерела; вони будуть з'єднані з записами з першого джерела при виконанні зазначеної умови. Рядки результату запиту, для яких не знайдено відповідних умові записів з першого джерела, будуть містити NULL в полях, що формуються на підставі записів з цього джерела.
Повний зовнішнє з'єднання, це, як зрозуміло вже з назви, подальший розвиток Лівого (або Правого) з'єднань. При організації повного з'єднання важливо враховувати ту обставину: при з'єднанні даного виду в запит потрапляють всі записи з обох таблиць. Інакше кажучи, значення ключового нуля нам потрібно буде отримувати і з лівої, і з правої таблиць. Зверніть увагу: обов'язково з обох таблиць! Один з варіантів вирішення такої: створити для цього додаткове поле, в якому робити перевірку на Null. Якщо ключ в одній з таблиць дорівнює Null, тоді потрібно брати його значення з іншої таблиці.
Оскільки повне з'єднання дещо складніше інших видів з'єднань, трохи змінимо наш приклад. Тепер нам потрібно отримати не просто розгорнутий список продажів, а список всіх діючих контрагентів.
Таблиця після повного з'єднання, з усіма полями вихідних таблиць:
Остаточний вигляд таблиці, в якій контрагенти зведені в одне поле:
Нижче наводиться варіант відповідного запиту. Зверніть увагу, що дані по контрагентам ми отримуємо не просто з документів, а з підзапитів. У них ми виконуємо угруповання по контрагентам таким чином, що б кожен контрагент був представлений у вибірці але одному разу. І, природно, не забуваємо про Null: