Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка SQL(14) (оптимизация).docx
Скачиваний:
62
Добавлен:
17.03.2015
Размер:
452.16 Кб
Скачать

3.4.2.3. Полное внешнее соединение.

В полном внешнем соединении результатом являются строки обеих таблицы, вне зависимости от того, имеют ли они соответствия в другой таблице. Другими словами, оно работает так же, как левое и правое, но на этот раз возвращаются значения обеих таблиц. Рассмотрим пример:

SELECT А, В

FROM R1 FULL OUTER JOIN R2 ON А=В;

Опять же, R1 — левая таблица, а R2 — правая, хотя на этот раз это не так важно. Полное внешнее coединение возвратит строки из всех таблиц, включая и те, что соответствуют условию, если такие найдутся (см. Рис. 3.7.).

Результат

А

В

NULL

101

102

102

104

104

106

106

107

NULL

NULL

108

A

B

102

101

104

102

106

104

107

106

108

Рис. 3.7. R1 FULL OUTER JOIN R2

Полное внешнее соединение — это комбинация левого и правого соединения. К сожалению, по крайней мере в одной из систем баз данных, они вызовут ошибку. В MySQL, которая не поддерживает FULL OUTER JOIN вопреки стандарту SQL, результатом будет синтаксическая ошибка: SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTER JOIN entries ON …'

Различие между внутренними и внешними соединениями.

Результаты внешнего соединения всегда включают в себя результаты соответствующего внутреннего соединения, а также не соответствующие условию строки из левой, правой или обеих таблиц — в зависимости от типа соединения.

Различие между левым и правым внешним соединением лишь в том, что в первом возвращаются все строки левой таблицы с соответствиями из правой, а во втором — наоборот, все строки правой таблицы с соответствиями из левой.

В то же время, полное внешнее объединение всегда включает результаты, как левого, так и правого объединения.

3.4.2.4. Перекрёстное соединение.

В перекрёстном соединении каждая строка из одной таблицы соединяется с каждой строкой из другой таблицы. Отличительной чертой перекрёстного соединения является отсутствие условия ON, как вы можете заметить из следующего запроса:

SELECT A, B FROM R1 CROSS JOIN R2

A

B

102

101

104

102

06

104

107

106

108

Результат

А

В

Продолжение

102

101

106

101

102

102

106

102

102

104

106

104

102

106

106

106

102

108

106

10

104

101

107

101

104

102

107

102

104

104

107

104

104

106

107

106

104

108

107

108


Рис. 3.8. R1 CROSS JOIN R2

Как можно видеть, перекрестное соединение эквивалентно декартову произведению. Перекрёстные соединения могут быть полезны, но используются чрезвычайно редко. Они применяются для генерации табличной структуры, содержащей все возможные комбинации двух наборов значений (в нашем примере, значений полей двух таблиц; это полезно при генерации тестовых данных или поиске недостающих значений).