Главная страница
Содержание
 
 

Объединения в языке SQL

Стандарт SQL2 расширил понятие условного объединения. В стандарте SQL1 при объединении отношений использовались только условия, задаваемые в части WHERE оператора SELECT, и в этом случае в результирующее отношение попадали только сцепленные по заданным условиям кортежи исходных отношений, для которых эти условия были определены и истинны. Однако в действительности часто необходимо объединять таблицы таким образом, чтобы в результат попали все строки из первой таблицы, а вместо тех строк второй таблицы, для которых не выполнено условие соединения, в результат попадали бы неопределенные значения. Или наоборот, включаются все строки из правой (второй) таблицы, а отсутствующие части строк из первой таблицы дополняются неопределенными значениями. Такие объединения были названы внешними в противоположность объединениям, определенным стандартом SQL1, которые стали называться внутренними.

Внутреннее объединение(INNER JOIN) возвращает записи из двух таблиц, если значение первичного ключа первой таблицы соответствует значению внешнего ключа второй таблицы, связанной с первой.На практике время выполнения запросов с внутренним объединением существенно зависит от реализации СУБД, но, как правило, предпочтительнее использовать объединение в виде перечисления таблиц в секции FROM с перечислением условий объединения в секции WHERE.

Левое и правое объединение(LEFT JOIN и RIGHT JOIN) в отличии от внутреннего объединения подразумевает возвращение всех кортежей из левого или правого отношения с дополнением несуществующих атрибутов пустыми значениями. Ключевое слово FULL определяет полное внешнее объединение, т.е. и LEFT, и RIGHT. Ключевое слово UNION позволяет объединить результаты выполнения двух запросов в том случае, если их кортежи совпадают соответственно по доменам своих атрибутов.Формат использования объединения следующий:

<выражение объединения> -

<имя таблицы1> { INNER | FULL [OUTER] | LEFT [OUTER] | RIGHT [OUTER]} JOIN { ON условие | [USING

(список столбцов)]} <имя таблицы2>

<выражение запроса на объединение> -

<имя таблицы1> UNION JOIN <имя таблицы2>