Внешние объединения
В повседневной жизни встречаются ситуации, когда с задачей извлечения из таблиц самой полной информации внутренние объединения не справляются. Например, пусть необходимо вывести названия всех имеющихся в библиотеке книг и список студентов, бравших эти книги, соответственно.
Select Students.FirstName & " " & Students.LastName as Студент, Books.Name
From Students Inner Join
(Books Inner Join S_cards On Books.Id = S_cards.Id_book)
On Students.Id = S_cards.Id_student
Результат выполнения запроса приведен на рисунке
Как можно заметить, проглядев таблицу Books, в результате выполнения запроса отобразились далеко не все книги, присутствующие в библиотеке, а лишь те, которые студенты брали. Это произошло из-за того, что внутреннее объединение отображает только строки, имеющие "пару" в другой таблице, и отбрасывает строки, которые пары не имеют. Чтобы этого избежать необходимо использовать внешнее объединение таблиц. СУБД MS Access поддерживает только два вида внешних объединений - левое и правое. При левом объединении строки таблицы "слева" включаются в результирующую выборку полностью, а строки из таблицы "справа" только строки, имеющие "пару" в "левой" таблице. В качестве пары для строк "левой" таблицы, не имеющих пары, используются пустые (NULL) поля. Все вышесказанное справедливо и для правого объединения с точностью наоборот.
Пример правильного запроса:
Select Books.Name, Students.FirstName & " " & Students.LastName as Студент
From Books Left Outer Join
(S_cards Left Outer Join Students On S_cards.Id_student = Students.Id)
On Books.Id = S_cards.Id_book
Результат выполнения запроса приведен на рисунке
Дуальный пример: вывести полный список студентов и книги, которые они брали в библиотеке соответственно.
Select Students.FirstName & " " & Students.LastName as Студент, Books.Name
From Books Right Outer Join
(S_cards Right Outer Join Students On S_cards.Id_student = Students.Id)
On Books.Id = S_cards.Id_book