FROM Продукты p LEFT JOIN Наличие n ON p.ID_Продукта = n.Продукт;
| Результат
| |
| Продукт
| Количество
| Цена
|
| Говядина
|
| 429,84
|
| Судак
|
| 0,00
|
| Масло
|
| 274,61
|
| Майонез
|
| 97,46
|
| Яйца
|
| 111,83
|
| Сметана
|
| 206,60
|
| Молоко
|
| 83,80
|
| Творог
|
| 82,80
|
| Морковь
|
| 0,00
|
| Лук
|
| 46,30
|
| Помидоры
|
| 51,70
|
| Зелень
|
| 34,96
|
| Рис
|
| 51,17
|
| Мука
|
| 43,77
|
| Яблоки
|
| 189,92
|
| Сахар
|
| 96,14
|
| Кофе
|
| 166,50
|
| Масло растительное
| NULL
| NULL
|
Единственное различие между левым внешним объединением и внутренним в наличии лишней строки для продукта масло растительное результате. Этого продукта нет на складе (т.е. не выполняется условие внутреннего соединения). Строка включается потому, что использовано именно левое внешнее объединение, при котором все строки левой таблицы, Продукты, должны попасть в результат.
Если мы хотим узнать, какие продукты отсутствуют на складе, необходимо дополнить запрос условием:
SELECT p.Продукт,
ISNULL(CAST(n.Количество as VARCHAR), ’НЕТ’) as на_складе
FROM Продукты p LEFT JOIN Наличие n ON p.ID_Продукта = n.Продукт
WHERE n.Продукт IS NULL;
| Результат
| |
| Продукт
| на_складе
|
| Масло растительное
| НЕТ
|
Правое внешнее объединение.
Следующее правое внешнее соединение даёт в точности такие же результаты, как и левое:
SELECT p.Продукт,
ISNULL(CAST(n.Количество as VARCHAR),’НЕТ’) as на_складе
FROMНаличие n RIGHT JOIN Продукты p ON p.ID_Продукта = n.Продукт
| Результат
|
|
| Продукт
| на_складе
|
| Масло растительное
| НЕТ
|