Рубрика:
Базы Данных
И снова
продолжаю длинный рассказ про объединения,
который я начал пару дней назад здесь.
Вчера немного проленился, так что не
опубликовал статью эту, поэтому сегодня
будет еще одна статья опубликована, про
хабр. Надо же уложиться в план, который
я себе в начале года установил (про
двадцать пять опубликованных статьей
за месяц).
Внешние
объединения нужно использовать в тех
случаях, когда необходимо получить все
строки из первой таблицы и существующие
значения из второй (либо null, если значения
для данного условия не существует).
Внешне объединения (outer joins) используют
реже, чем внутренние объединения.
Если
вернуться к примеру с двумя таблицами
table1 и table2 (из прошлой статьи), то, чтобы
получить внешнее объединение, нужно
получить все строки из первой таблицы
(так как их там больше) и присоединить
к ним значения из второй (или null). Для
этого всего-лишь нужно выполнить
следующий запрос:
SELECT *
FROM TABLE1
t1, table2 t2
WHERE t1.id1
= t2.id1(+)
Внимательный
читатель заметит разницу между этим и
прошлым запросами. Во where добавился
оператор внешнего объединения (+). Он
ставится около того поля, которое не
обязательно. Так как id1 из второй таблицы
нам не нужны, то около него и поставлен
этот знак. Получится следующий результат:
ID1 | VAL | ID2 | VAL2 | ID1 |
1 | один | 1 | - 1 - | 1 |
2 | два | 2 | - 2 - | 2 |
7 | семь | |||
5 | пять | |||
3 | три |
Оператор
+ можно ставить как в правой, так и в
левой части условия (если в правой части
– то это левое соединение, если в левой
части стоит +, то будет правое соединение).
Если поменять местами этот оператор в
запросе выше (WHERE t1.id1(+) = t2.id1), получится
следующий результат:
ID1 | VAL | ID2 | VAL2 | ID1 |
1 | один | 1 | - 1 - | 1 |
2 | два | 2 | - 2 - | 2 |
3 | - 4 - | 4 |
Ограничения
на внешние объединения:
Но не
все так просто. При использовании внешних
объединений существует несколько
ограничений, о которых нужно помнить.
Вот они:
1.
Оператор + можно ставить только в одной
части условия объединения, иначе появится
ошибка ORA-01468.
2.
Если вы объединяете более двух таблиц,
то каждую из них можно внешне объединять
только с одной другой таблицей. Если
попробовать это сделать появится ошибка
ORA-01417. Чтобы избежать ее нужно создать
представления первого объединения и
затем соединить его с другой таблице.
3.
В условии с оператором + нельзя использовать
IN, OR и подзапросы.
Оператор
+ это встроенный оператор в Oracle. Он не
стандартизированный, зато очень простой.
Есть еще стандартные (для sql) операторы
объединения, но они сложнее, о них я
рассказывать не буду. Только в следующей
статье (полные внешние объединения)
покажу как его можно использовать для
упрощения создания полных внешних
объединений.
Кстати,
базы данных должны на чем-то крутиться
— должен быть достойный сервер, который
потянет БД (и другую ИТ-инфраструктуру)
любого объема. Для этого идеально
подойдет сервер hp
ml 350, я нашел его на сайте компании SK
Server Technologies. По ссылке можете почитать
его характеристики, для меня они подходят.
Комментариев нет:
Отправить комментарий