Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФОРМАТИРОВАНИЕ СВОДНОЙ ТАБЛИЦЫ.docx
Скачиваний:
8
Добавлен:
12.04.2015
Размер:
188.49 Кб
Скачать

Запрос с соединением join

Чтобы написать в Access SQL-запрос, объединяющий не­сколько связанных таблиц, можно воспользоваться следующим синтаксисом оператора SELECT:

SELECT selectionjist

FROM tablel

{INNER | LEFT | RIGHT) JOIN table2

ON (tablel.columnl_name = table2.column2_name)];

Здесь имеется основное ключевое слово JOIN (соединение) и вспомогательные ключевые слова, задающие способ объединения таблиц: INNER (внутреннее), LEFT (левое внешнее) или RIGHT (правое внешнее). Таким образом, возможны три варианта объе­динения связанных таблиц в Access: INNER JOIN, LEFT JOIN и RIGHT JOIN (при описании синтаксиса перечень возможных вари­антов заключается в фигурные скобки).

При выполнении операции INNER JOIN из обеих объединяе­мых таблиц выбираются все строки, которые удовлетворяют за­данному условию объединения. Обычно в качестве такого усло­вия задается равенство значений ключевых полей (первичного ключа - для одной таблицы и внешнего ключа - для второй).

Результатом операции LEFT JOIN будут все строки из первой таблицы, объединенные только с теми строками из второй табли­цы, которые соответствуют заданному условию. Если для какой- то записи первой таблицы нет соответствующей записи во второй таблице, такая запись будет объединена с записью, содержащей значения NULL.

Операция RIGHT JOIN, по аналогии с LEFT JOIN, возвращает выборку всех строк второй таблицы и только тех строк первой таблицы, которые соответствуют указанному условию. Если та­кие строки отсутствуют, они замещаются записями со значения­ми NULL.

Заметим, что в качестве условия объединения можно указывать как равенство, так и неравенство значений. При создании запроса Access в режиме конструктора можно задать только условие равен­ства, а условие неравенства задается только в режиме SQL.

Проиллюстрируем применение операции JOIN. Например, вы­ведем список всех студентов с указанием групп, в которых они учатся. Для этого в качестве источника записей выберем таблицу tbIGroups и укажем условие объединения с таблицей tbIStudents - равенство значений полей flDGroup. Этот запрос с внутренним объединением INNER JOIN будет выглядеть так:

SELECT tbIGroups.fGroup, tbIStudents.fLastName, tbIStudents.fFiietName, tbIStudents.fMiddleName FROM tbIGroups

INNER JOIN tbIStudents ON tbIGroups.flDGroup = tbIStudents.flDGroup;

Заметим, что конструкцию с объединением INNER JOIN можно заменить на эквивалентную, с условием WHERE:

SELECT tbIGroups.fGroup, tbIStudents.fLastName, tbIStudents.fFirstName, tbIStudents.fMiddleName FROM tbIGroups, tbIStudents WHERE tbIGroups.flDGroup = tbIStudents.flDGroup;

В отличие от INNER JOIN, операции LEFT JOIN и RIGHT JOIN применяются в том случае, если из одной таблицы (для LEFT - из первой, для RIGHT - из второй) нужно выбрать все записи, неза­висимо от того, содержатся ли в объединяемой таблице соответ­ствующие связанные записи.

Например, если в рассмотренном выше запросе заменить IN­NER на LEFT, то в столбец tbIGroups.fGroup попадут все группы, даже те, в которых нет ни одного студента (соответствующие ячейки для остальных полей в таких записях будут пустыми):

SELECT tbIGroups.fGroup, tbIStudents.fLastName, tbIStudents.fFirstName, tbIStudents.fMiddleName FROM tbIGroups

LEFT JOIN tbIStudents ON tbIGroups.flDGroup = tbIStudents.flDGroup;