Имейте в виду, что внешнее объединение SQL является своего рода реляционным объединением, которое явно предназначено для проецирования нулевых значений. Вы хотите избежать использования нулевого значения (на мой взгляд, это тоже хорошо), поэтому вам следует избегать использования внешних объединений. Обратите внимание, что современные реляционные языки полностью обходятся без концепции нулевого и внешнего соединения (см. Сноску).
Это внешнее соединение:
SELECT DISTINCT T1.id, T1.value, T2.other_value
FROM T1
LEFT OUTER JOIN T2
ON T1.id = T2.id;
… семантически эквивалентен этому коду SQL:
SELECT T1.id, T1.value, T2.other_value
FROM T1
INNER JOIN T2
ON T1.id = T2.id
UNION
SELECT T1.id, T1.value, NULL
FROM T1
WHERE NOT EXISTS (
SELECT *
FROM T2
WHERE T1.id = T2.id
);
Второй запрос может показаться сложным, но это только из-за того, как SQL был разработан / развит. Вышесказанное - это просто естественное соединение, союз и полусоединение. Однако в SQL нет оператора полусоединения, требуется указать списки столбцов в предложении SELECT
и написать предложения JOIN
, если в вашем продукте не реализован синтаксис NATURAL JOIN
стандартного SQL (в Access нет), что приводит к много кода, чтобы выразить что-то довольно простое.
Таким образом, вы могли бы написать код, такой как второй запрос выше, но используя фактическое значение по умолчанию, а не нулевое значение.
Единственная реляционная игра в городе - это спецификация языка D, известного под названием «Третий манифест» Криса Дейта и Хью Дарвена. Он явно отвергает нулевые значения Кодда (позднее Кодд предлагал два типа нулевых значений) не поддерживает внешний оператор соединения (в более поздних работах авторы предлагали атрибуты со значением отношения как альтернативу внешнему объединению). Конкретные цитаты:
C. J. Дата (2009): SQL и реляционная теория: как написать точный код SQL: глава 4, «Замечание о внешнем соединении» (стр.84)
Darwen, Hugh (2003): Важность имен столбцов: «Обратите внимание, что в Tutorial D единственный оператор« join »называется JOIN, и это означает« естественное объединение »». (С.16) * * тысячу двадцать-один
C. J. Date and Hugh Darwen (2006): Базы данных, типы и реляционная модель: Третий манифест: Запрет 4: «D не должно включать в себя понятие« отношения », в котором некоторый« кортеж »включает в себя некоторый« атрибут », который не имеют значение. "