-- Показать какой поставщик поставил каждый товар на склад (INNER JOIN).
SELECT DISTINCT G.[Имя], P.[Имя] FROM [Склад]
    INNER JOIN [Поставщик] as P on P.ID = [Склад].[КодПоставщика]
    INNER JOIN [Товар] as G on G.ID = [Склад].[КодТовара];

-- Вывести список товаров, которыми торгует фирма, и их поставщиков вне
-- зависимости от наличия поставок (LEFT JOIN).
SELECT [Товар].[Имя], P.[Имя] FROM [Товар]
    LEFT JOIN [Склад] as S on S.[КодТовара] = [Товар].ID
    LEFT JOIN [Поставщик] as P on P.ID = S.[КодПоставщика];

-- Вывести информацию о покупаемых со склада товарах и их покупателях, включая
-- товары, отсутствующие в списке реализованных товаров (RIGHT JOIN)
SELECT G.[Имя],
       IIF(C.[Имя] is NULL, N'Не определён', C.[Имя]),
       IIF([Сделка].[Количество] is NULL, N'Не определено', STR([Сделка].[Количество]))
FROM [Сделка]
    INNER JOIN [Склад] as S on S.ID = [Сделка].КодСклада
    INNER JOIN [Клиент] as C on C.ID = [Сделка].[КодКлиента]
    RIGHT JOIN [Товар] as G on G.ID = S.[КодТовара];

-- Вывести список поставщиков, которые хотя бы раз осуществляли поставку на склад
-- (полусоединение).
SELECT DISTINCT [Поставщик].[Имя] FROM [Поставщик]
    JOIN [Склад] AS S on [Поставщик].ID = S.[КодПоставщика]

-- Выведите список сотрудников с указанием их прямых начальников
-- (самосоединение). Для главного начальника в столбец «Начальник» вывести
-- «не определен».
SELECT
       [Сотрудник].[Имя],
       IIF(B.[Имя] is NULL, N'Не определён', B.[Имя])
FROM [Сотрудник]
    LEFT JOIN [Сотрудник] as B on B.ID = [Сотрудник].[КодНачальника];