Естественное соединение лучше всего объяснить через использование примера, так что см. пример 6.52.
Список выбора select в примере 6.52 включает все столбцы таблиц employee и department. Предложение from в операторе select задает соединяемые таблицы и явное название формы соединения (inner join). Предложение on также является частью предложения from; оно задает столбцы соединения в обеих таблицах. Условие employee.dept_no = department.dept_no в примере 6.52 определяет условие соединения, а оба столбца называются столбцами соединения.
Эквивалентным решением будет следующее:
Синтаксис «старого стиля»:
use sample;
select employee.*, department.* '
from employee, department
where employee.dept_no = department.dept_no;
Синтаксис «старого стиля» имеет два существенных отличия: предложение from в запросе содержит список соединяемых таблиц, а соответствующие условия соединения задаются в предложении where с использованием соединяемых столбцов.
Результатом будет:
Пример 6.52 может быть использован только для демонстрации того, как работает операция соединения. Обратите внимание, что это всего лишь иллюстрация того, что вы можете думать о процессе соединения. Фактически, Database Engine имеет несколько стратегий, среди которых он осуществляет выбор реализации оператора соединения. Представьте каждую строку таблицы employee, объединенную с каждой строкой таблицы department. Результатом такой комбинации будет таблица с семью столбцами (4 из таблицы employee и 3 из таблицы department) и 21 строкой (табл. 6.1).
На втором шаге все строки из табл. 6.1, которые не соответствуют условию соединения employee. dept_no = department. deptno, будут удалены. Такие строки помечены в табл. 6.1 символом *. Оставшиеся строки представляют результат примера 6.52.
Семантика соответствующих столбцов соединения должна быть идентичной. Это означает, что оба столбца должны иметь один и тот же логический смысл. Не требуется, чтобы соответствующие столбцы соединения имели одно и то же имя (или даже один и тот же тип данных), хотя часто так и бывает.
База данных sample содержит три пары столбцов, где каждый столбец в паре имеет один и тот же логический смысл (они также имеют одни и те же имена). Таблицы employee и department могут быть соединены с использованием столбцов employee. dept_no и department. dept_no. Столбцами для соединения таблиц employee и works_on являются столбцы employee.emp_no и works_ on.emp_no. Наконец, таблицы project и workson могут быть соединены при использовании столбцов соединения project.projectno и works_ on.proj ect_no.
Имена столбцов в операторе select могут быть уточнены, т. е. могут иметь квалификацию. «Квалификация» имени столбца означает исключение всякой возможной двусмысленности относительно того, какой таблице принадлежит столбец; имени столбца предшествует имя его таблицы (или псевдоним таблицы), отделенное точкой: table_name. column_name.
В большинстве операторов select имена столбцов не требуют обязательной квалификации, хотя использование квалифицированных имен обычно рекомендуется для читаемости текста оператора. Если имена столбцов в операторе select являются двусмысленными (как столбцы employee. dept_no и department. deptno в примере 6.52), то квалификация имен столбцов обязательно должна быть использована.
В операторе select, содержащем соединение, предложение where в дополнение к условию соединения может содержать и другие условия, как показано в примере 6.53.
Начиная с этого момента, все остальные примеры будут реализованы только с использованием явного синтаксиса соединения.
В примере 6.54 показано другое использование внутреннего соединения.