Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Формирование запросов средствами языка SQL.doc
Скачиваний:
7
Добавлен:
18.11.2018
Размер:
389.12 Кб
Скачать

Внутреннее соединение (inner join)

При внутреннем естественном соединении группируются только те строки, значения которых по соединяемым (одноименным) столбцам совпадают. Результат внутреннего соединения двух таблиц показан на рисунке 3.4.

Рис. 3.4.  Внутреннее соединение (INNER JOIN)

Внешнее левое соединение left join [outer]

При внешнем левом соединении в результирующий набор будут выбраны все строки из левой таблицы (указываемой первой). При совпадении значений по соединяемым (одноименным) столбцам значения второй таблицы заносятся в результирующий набор в соответствующие строки. При отсутствии совпадений в качестве значений второй таблицы проставляется значение NULL.

Рис. 3.5.  Внешнее левое соединение LEFT JOIN [OUTER]

Внешнее правое соединение right join [outer]

При внешнем правом соединении в результирующий набор будут выбраны все строки из правой таблицы (указываемой второй). При совпадении значений по соединяемым (одноименным) столбцам значения первой таблицы заносятся в результирующий набор в соответствующие строки (рис. 3.6.). При отсутствии совпадений в качестве значений первой таблицы проставляется значение NULL.

Рис. 3.6.  Внешнее правое соединение RIGHT JOIN [OUTER]

Полное внешнее соединение full join [outer]

При полном внешем соединении в результирующий набор будут выбраны все строки, как из правой, так и из левой таблицы. При совпадении значений по соединяемым (одноименным) столбцам строка содержит значения как из левой, так и из правой таблицы (рис. 3.7.). В противном случае, вместо отсутствующих значений в столбцы таблицы (левой или правой) заносится значение NULL.

Рис. 3.7.  Полное внешнее соединение FULL JOIN [OUTER]

Соединение по указываемым столбцам

Фраза USING позволяет выполнить естественное соединение по указываемым столбцам, что, в свою очередь, позволяет соединять таблицы, имеющие несколько одноименных столбцов, нужным образом (по одному или двум столбцам). Список столбцов, по которым выполняется соединение, указывается после фразы USING.

Например:

select t1.f1, t1.f2, t2.f1

from tbl1 t1 join tbl2 t2 using f2;

Соединение по предикату

Естественное соединение по указываемому предикату выполняется с помощью фразы ON. В результирующий набор выбираются строки, удовлетворяющие заданному условию. Этот способ соединения аналогичен соединению по предикату, указываемому фразой WHERE.

Например:

select t1.f1, t1.f2, t2.f1, t2.f2

from tbl1 t1 join tbl2 t2

on t1.f1= t2.f2;

Объединение запросов

Язык SQL предоставляет два способа объединения таблиц:

  • указывая соединяемые таблицы (в том числе подзапросы) во фразе FROM оператора SELECT. Сначала выполняется соединение таблиц, а уже потом к полученному множеству применяются указанные фразой WHERE условия, определяемое фразой GROUP BY агрегирование, упорядочивание данных и т.п.;

  • определяя объединение результирующих наборов, полученных при обработке оператора SELECT. В этом случае два оператора SELECT соединяются фразой UNION, INTERSECT, EXCEPT или CORRESPONDING.

Union-объединение

Фраза UNION объединяет результаты двух запросов по следующим правилам:

  • каждый из объединяемых запросов должен содержать одинаковое число столбцов;

  • тип значений из попарно объединяемых столбцов должен быть одинаковым или приводимым. Так, нельзя объединять значения из столбца типа integer и столбца типа varchar;

  • из результирующего набора автоматически исключаются совпадающие строки (рис. 4.1);

Рис. 4.1.  Выполнение UNION-объединения с исключением совпадающих строк

  • если в строку вставляется какая-либо константа, добавляемая в запросе, то ее значение также влияет на идентичность строк (рис. 4.2)

Рис. 4.2.  Выполнение UNION-объединения, использующего выражения

Стандарт не накладывает никаких ограничений на упорядочивание строк в результирующем наборе. Так, некоторые СУБД сначала выводят результат первого запроса, а затем результат второго запроса. СУБД Oracle автоматически сортирует записи по первому указанному столбцу даже в том случае, если для него не создан индекс. Для того чтобы явно указать требуемый порядок сортировки, следует использовать фразу ORDER BY. При этом можно использовать как имя столбца, так и его номер (рис. 4.3).

Рис. 4.3.  Выполнение UNION-объединения с упорядочиванием результирующего набора

Фраза UNION ALL выполняет объединение двух подзапросов аналогично фразе ALL со следующими исключениями:

  • совпадающие строки не удаляются из формируемого результирующего набора;

  • объединяемые запросы выводятся в результирующем наборе последовательно без упорядочивания.

При объединении более двух запросов для изменения порядка выполнения операции объединения можно использовать скобки (рис. 4.4).

Рис. 4.4.  Выполнение UNION-объединения для трех запросов