- •3. Создание индексов и ограничений для базы данных
- •3.1. Индексы в базах данных
- •3.2. Создание и удаление индекса
- •3.3. Типы индексов
- •Индексы в*-дерева
- •Битовые индексы
- •3.4. Обеспечение целостности данных с помощью ограничений
- •Ограничение check
- •Ограничение not null
- •Ограничение unique
- •Разрешение и запрещение существующих ограничений
- •Изменение и удаление существующих ограничений
- •Место определения ограничений
- •3.5. Связи между таблицами
- •Использование ограничений для установления связей между таблицами
- •Многотабличные запросы
- •Внешние соединения
Внешние соединения
Иногда требуется получить список записей, в котором не каждой записи главной таблицы может соответствовать запись в подчиненной таблице. Это делается путем помещения символов (+) после имени столбца подчиненной таблицы в предложении WHERE. В итоге команда принимает следующий вид:
SELECT prod.product_name, prod.product_price, purc.purchase_date, pure.quantity
FROM product prod, purchase pure
WHERE prod.product_name = pure.product_name (+)
ORDER BY prod.product_name;
Если ввести эту команду, то таблица результатов будет содержать названия всех товаров — даже тех, которые не продавались. Это называется созданием внешнего соединения (outer join). Символы (+), помещаемые после имени одного из столбцов таблицы в каждом из сравнений имя_главной_таблицы.первичный_ключ = имя_подчиненной_таблицы.внешний_ключ предложения WHERE, показывают, что таблица может не иметь записей, соответствующих каждой записи другой таблицы. Иными словами, символы (+) ставятся после столбца таблицы, для которой вместо совпадающего столбца могут быть выведены пробелы. Как правило, (+) указывается после имени подчиненной, а не главной таблицы. Это объясняется тем, что если в таблицах поддерживается ссылочная целостность (т.е. правильно определены ограничения внешнего ключа), то главная таблица может содержать записи, которым не соответствуют записи подчиненной таблицы, но подчиненная таблица никогда не должна содержать записей, не имеющих соответствующих записей в главной таблице.
