Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db / Лекции / 6 семестр / Языки запросов.docx
Скачиваний:
134
Добавлен:
23.03.2015
Размер:
280.32 Кб
Скачать
      1. Внешнее соединение таблиц

Предположим, необходимо вывести список факультетов и их кафедр. Это достигается соединением таблиц FACULTY и DEPARTMENT по равенству значений первичного и внешнего ключей и выбором столбцов с названиями факультетов и кафедр. Но в таком случае, если на факультете кафедр нет, он не будет включен в результат.

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

таблица.столбец оператор_сравнения таблица.столбец (+)

таблица.столбец (+) оператор_сравнения таблица.столбец

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

Запрос.Вывести фамилии всех преподавателей с указанием их кафедры, если она есть.

SELECT d.Name AS "Название_кафедры", t.Name AS "Фамилия преподавателя"

FROM DEPARTMENT d, TEACHER t

WHERE d.DepPK (+) = t.DepFK;

Название кафедры

Фамилия преподавателя

программирование

Сидоров

программирование

Рамишевский

программирование

Хоренко

программирование

Вибровский

программирование

Воропаев

программирование

Кузинцев

программирование

Завратинский

программирование

Козлутин

программирование

Лекарь

программирование

Мартынов

программирование

Резван

программирование

Недеведеев

NULL

Ахромеев

NULL

Наумов

NULL

Дараганов

Обратите внимание, что в результирующей таблице значения отсутствующего столбца принимают значение NULL.

      1. Соединение с использованием фразы from

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

Уточненное соединениепредполагает явное задание условия соединения. Для этого можно использовать два варианта - фразу USING, с помощью которой указываются одноименные столбцы обеих таблиц, по равенству значений которых следует произвести соединение, или фразу ON, с помощью которой для соединения можно указать произвольное условие. Синтаксис уточненного соединения следующий:

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

(список_столбцов)}

Естественное соединение выполняется по равенству значений всех пар одноименных столбцов таблиц и не требует задания каких-либо условий. Оно имеют следующий синтаксис:

таблица NATURAL [INNER | {FULL | LEFT | RIGHT} [OUTER]] JOIN таблица

Перекрестное соединение эквивалентно декартовому произведению таблиц. Его синтаксис самый простой:

таблица CROSS JOIN таблица