Как создать внешние соединения (визуальные инструменты для баз данных)
По умолчанию конструктор запросов и представлений создает внутреннее соединение таблиц. Внутренние соединения исключают строки, не соответствующие строке из другой таблицы. Однако внешние соединения возвращают все строки хотя бы из одной таблицы или представления, упомянутых в предложении FROM, если эти строки удовлетворяют условиям поиска WHERE или HAVING. Если необходимо включить строки данных, которые не имеют совпадений в соединяемой таблице, в результирующий набор, можно создать внешнее соединение.
При создании внешнего соединения имеет значение порядок, в котором указывают таблицы в инструкции SQL (как показано в области SQL). Первая таблица становится «левой» таблицей, а вторая — «правой» (реальный порядок, в котором указываются таблицы в области схем, несущественен). При указании левого или правого внешнего соединения указывается порядок, в котором таблицы были добавлены в запрос, и порядок, в котором они появляются в инструкции SQL в области SQL.
Создание внешнего соединения
Создайте соединение автоматически или вручную. Дополнительные сведения см. в разделе Как автоматически соединять таблицы (визуальные инструменты для баз данных) или Как соединить таблицы вручную (визуальные инструменты для баз данных).
Выберите линию соединения в области схем и из меню Конструктор запросов выберите пункт Выбрать все строки из <имя_таблицы>, выбирая команду, которая включает таблицу, дополнительные строки которой необходимо включить.
Выберите первую таблицу для создания левого внешнего соединения.
Выберите вторую таблицу для создания правого внешнего соединения.
Выберите обе таблицы для создания полного внешнего соединения.
При указании внешнего соединения конструктор запросов и представлений изменяет линию соединения для отображения внешнего соединения.
Кроме того, конструктор запросов и представлений изменяет инструкцию SQL в области для отражения изменений типа соединения, как показано в следующей инструкции:
SELECT employee.job_id, employee.emp_id, employee.fname, employee.minit, jobs.job_descFROM employee LEFT OUTER JOIN jobs ON employee.job_id = jobs.job_id
Так как внешнее соединение включает несовпадающие строки, можно использовать его для поиска строк, которые нарушают ограничение внешнего ключа. Чтобы сделать это, надо создать внешнее соединение и добавить условие поиска строк, в которых значение столбца первичного ключа самой правой таблицы равно NULL. Например, следующее внешнее соединение находит строки в таблице employee, которая не содержит соответствующих строк в таблице jobs:
SELECT employee.emp_id, employee.job_idFROM employee LEFT OUTER JOIN jobs ON employee.job_id = jobs.job_idWHERE (jobs.job_id IS NULL)
См. также