В большинстве SQL запросов используется один оператор, с помощью которого возвращаются данные из одной или нескольких таблиц. SQL также позволяет выполнять одновременно несколько частных запросов и отображать результат в виде единого набора данных. Такие комбинированные запросы обычно называются объединениями или сложными запросами.
Запросы в языке SQL комбинируются с помощью оператора UNION. Для этого необходимо указать каждый запрос SELECT и разместить между ними ключевое слово UNION. Ограничений по количеству использований оператора UNION в одном общем запросе нет. В предыдущем разделе мы отмечали, что MS Access не имеет возможности создавать полное внешнее объединение, теперь мы посмотрим, как этого можно достичь через оператор UNION.
Run SQLSELECT *
FROM Sumproduct
LEFT JOIN Sellers2
ON Sumproduct.City = Sellers2.City
UNION
SELECT *
FROM Sumproduct
RIGHT JOIN Sellers2
ON Sumproduct.City = Sellers2.City
Видим, что запрос отобразил как все колонки из первой таблицы – так и из второй, независимо от того, имеют ли все записи соответствующие в другой таблице.
Также следует отметить, что во многих случаях вместо UNION мы можем использовать предложения WHERE со многими условиями и получать аналогичный результат. Однако через UNION записи выглядят более лаконичными и понятными.
Также необходимо соблюдать определенные правила при написании комбинированных запросов:
Запрос с UNION автоматически удаляет все повторяющиеся строки из набора результатов запроса (другими словами, ведет себя как предложение WHERE с несколькими условиями в одном операторе SELECT). Таково поведение оператора UNION по умолчанию, но при желании мы можем изменить это. Для этого нам следует использовать оператор UNION ALL вместо UNION.
Результаты выполнения оператора SELECT сортируются с помощью предложения ORDER BY. При комбинировании запросов с помощью UNION только одно предложение ORDER BY может быть использовано, и оно должно быть проставлено в последнем операторе SELECT. Действительно, на практике нет особого содержания часть результатов сортировать в одном порядке, а другую часть – в другом. Поэтому несколько предложений ORDER BY применять не разрешается.