SQL JOIN страница 5
Назад<<< | Содержание | Вперёд>>> |
FULL JOIN для соединения непересекающихся результатов
В подготовке аналитических или более простых выборок из базы данных бывает необходимо вывести вместе данные об объектах, которые не имеют между собой ничего общего (кроме того, что они присутствуют в одной таблице базы данных). Иначе говоря, нужно вывести вместе объекты, которые имеют А, но не имеют В, или имеют В, но не имеют А.
Назовём эти объекты непересекающимися данными или, как будет видно из примерами, непересекающимися результатами подзапросов. Для соединения таких результатов в SQL можно использовать оператор FULL JOIN и выражение IS NULL.
Работать будем с базой данных фирмы - Company1. Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными - в файле по этой ссылке.
Пример. Вывести отделы, в которых есть сотрудники на должности "Менеджер" (Mgr), но не "Клерк" (Clerc), или есть сотрудники на должности "Клерк" (Clerc), но не "Менеджер" (Mgr).
Запрос для выбора всех столбцов из таблицы Staff выглядит следующим образом (на MS SQL Server - с предваряющей конструкцией USE company1;):

Запрос для выполнения задания этого примера должен быть таким:
В результате выполнения этого запроса будет выведена следующая таблица:
Dept | Dept | |
1 | 10 | NULL |
2 | 51 | NULL |
Чтобы исключить из таблицы столбец со значениями NULL, воспользуемся функцией COALESCE и напишем следующий окончательный запрос:
В результате выполнения этого запроса будет выведена следующая таблица:
Dept | |
1 | 10 |
2 | 51 |
В MySQL оператор FULL JOIN не поддерживается. Подобные задачи в этом диалекте SQL можно выполнять, используя сочетание LEFT JOIN, UNION и RIGHT JOIN. Для решения задачи из рассмотренного примера в MySQL нужно написать следующий запрос:
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.
Поделиться с друзьями
Назад<<< | Содержание | Вперёд>>> |