Естественное соединение

Оценить
(0 голоса)

Естественное соединение лучше всего объяснить через использование примера, так что см. пример 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 показано другое использование внутреннего соединения.

 

Естественное соединение

 


Соединение более чем двух таблиц
Декартово произведение
Внешнее соединение
Другие формы операций соединения
Тета-соединение

Добавить комментарий


Защитный код
Обновить

© 2018 www.serversql.ru. Все права защищены.