Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ересь Бочкаревой.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
99.84 Кб
Скачать

12. Левое (left [outer] join) и правое (right [outer] join) внешние соединения. Объединение результатов нескольких запросов (операция union).

OUTER JOIN

Соединение двух таблиц, в результат которого в обязательном порядке входят строки либо одной, либо обеих таблиц.

Оператор левого внешнего соединения LEFT OUTER JOIN соединяет две таблицы. Порядок таблиц для оператора важен, поскольку оператор не является симметричным.

Заголовок таблицы-результата является объединением (конкатенацией) заголовков соединяемых таблиц.

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

  1. В результат включается внутреннее соединение (INNER JOIN) левой и правой таблиц по предикату p.

  2. Затем в результат добавляются те записи левой таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких записей поля, соответствующие правой таблице, заполняются значениями NULL.

SELECT *

FROM

Person

LEFT OUTER JOIN

City

ON Person.CityId = City.Id

Оператор правого внешнего соединения RIGHT OUTER JOIN соединяет две таблицы. Порядок таблиц для оператора важен, поскольку оператор не является симметричным.

Заголовок таблицы-результата является объединением (конкатенацией) заголовков соединяемых таблиц.

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

  1. В результат включается внутреннее соединение (INNER JOIN) левой и правой таблиц по предикату p.

  2. Затем в результат добавляются те записи правой таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких записей поля, соответствующие левой таблице, заполняются значениями NULL.

SELECT *

FROM

Person

RIGHT OUTER JOIN

City

ON Person.CityId = City.Id

В языке SQL ключевое слово UNION применяется для объединения результатов двух SQL-запросов в единую таблицу, состоящую из схожих строк. Оба запроса должны возвращать одинаковое число столбцов и совместимые типы данных в соответствующих столбцах.

Оператор указывается между запросами. В упрощенном виде это выглядит следующим образом:

<запрос1>

UNION [ALL]

<запрос2>

UNION [ALL]

<запрос3>

.....;

По умолчанию любые дублирующие записи автоматически скрываются, если не использовано выражение UNION ALL.

Необходимо отметить, что UNION сам по себе не гарантирует порядок строк. Строки из второго запроса могут оказаться в начале, в конце или вообще перемешаться со строками из первого запроса. В случаях, когда требуется определенный порядок, необходимо использовать выражение ORDER BY.

Полезное в интернете:

http://www.intuit.ru/department/database/dbmdi/ - курс Карповой по БД.

http://www.cyberguru.ru/database/database-theory/data-relational-model.html - неплохая теория по реляционным БД

http://denizzone.com/baset2r2part1.html - очень лаконичная теория

http://ru.wikipedia.org/wiki/Join_%28SQL%29 – для двух последних вопросов