![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Очевидно, что с помощью соединения несложно сформировать запрос на обработку данных из нескольких таблиц. Кроме того, в такой запрос можно включить любые части предложения SELECT, рассмотренные ранее (выражения с использованием функций, группирование с отбором указанных групп и упорядочением полученного результата). Следовательно, соединения позволяют обрабатывать множество взаимосвязанных таблиц как единую таблицу, в которой собрана информация о нескольких сущностей. Различные виды реляционной операции соединения были рассмотрены в п.3.5. В этом пункте остановимся на следующих видах соединений:
Результат запроса:
cname cname city
Хофман Пил Лондон
Клеменс Пил Лондон
Луи Серенс Мехико
Киснерос Серенс Мехико
Хофман Мотика Лондон
Клеменс Мотика Лондон
Алгоритм выполнения запроса в примере 4.22:
вычисляется декартово произведение, получаем 35 строк (5х7);
производится выборка из полученной таблицы только тех строк, для которых выполняется условие Продавцы.city = Заказчики.city;
из полученной на шаге 2 таблицы выбираются только 3 указанных столбца (проекция).
В этом запросе использовалось эквисоединение.
Пример 4.23 Показать для каждого продавца имена всех заказчиков, которых он обслуживают: SELECT Заказчики.cname, Продавцы.sname FROM Продавцы, Заказчики WHERE Продавцы.snum = Заказчики.snum;В этом примере использовано соединение таблиц через справочную целостность, поскольку поле snum в таблице Продавцы является первичным ключом, а в таблице Заказчики – внешним ключом.Можно создавать запросы, использующие соединение более чем двух таблиц. Пример 4.24 Предположим, что нужно найти все порядки заказчиков, не находящихся в тех городах, где живут их продавцы. Для этого необходимо связать все три таблицы: SELECT onum, cname, Порядки.cnum, Порядки.snum FROM Продавцы, Заказчики, Порядки WHERE Заказчики.city < > Продавцы.city AND Порядки.cnum = Заказчики.cnum AND Порядки.snum = Продавцы.snum;Результат вывода:
3010 Грасс 2004 1002
В запросе таблица может соединяться сама с собой. В этом случае для экземпляров таблицы задаются псевдонимы, которые определяются в предложении FROM после имени таблицы. Пример 4.25 Найти все пары заказчиков с одинаковым рейтингом:SELECT a.cname, b.cname, a.rating FROM Заказчики a, Заказчики b WHERE a.rating = b.rating;Результат запроса:cname cname ratingХофман Хофман 100Хофман Клеменс 100Хофман Перера 100Джованни Джованни 200Джованни Луи 200Луи Джованни 200Луи Луи 200Грасс Грасс 300Грасс Киснерос 300Клеменс Хофман 100Клеменс Клеменс 100Клеменс Перера 100Киснерос Грасс 300Киснерос Киснерос 300Перера Хофман 100Перера Клеменс 100Перера Перера 100Обратите внимание на избыточность в выводе: каждая комбинация заказчиков выведена дважды; выводится комбинация строки сама с собой. Для устранения избыточности необходимо добавить еще одно условие в предикат, чтобы сделать предикат ассиметричным, и те же самые значения в обратном порядке не будут выбираться снова, например: Пример 4.26 SELECT a.cname, b.cname, a.rating FROM Заказчики a, Заказчики b WHERE a.rating = b.rating AND a.cname < b.cname;Вывод в этом случае будет содержать только 5 строк.В Access для соединения таблиц используется фраза JOIN. К их числу относится операция внутреннего соединения (INNER JOIN) и операции внешнего соединения (LEFT JOIN и RIGHT JOIN). Эти операции могут использоваться в любом предложении FROM. Операция INNER JOIN объединяет записи из двух таблиц, если связывающие поля содержат одинаковые значения. LEFT JOIN выбирает все записи из левой таблицы, даже. Если в правой таблице нет совпадающих значений. Это относится и к операции RIGHT JOIN, только все записи выбираются из правой таблицыСинтаксис предложения FROM:
FROM таблица_1 [INNER | LEFT| RIGHT | JOIN таблица_2 ON таблица_1.поле_1 оператор таблица_2.поле_2],
где таблица_1, таблица_2 – имена таблиц, которые подлежат соединению;
поле_1, поле_2 – имена полей, используемые для связи;
оператор – чаще всего «=».
Дата публикования: 2014-11-19; Прочитано: 334 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!