ВВЕРХ

SQL-Урок 12. Комбинированные запросы (UNION)

В большинстве SQL запросов используется один оператор, с помощью которого возвращаются данные из одной или нескольких таблиц. SQL также позволяет выполнять одновременно несколько частных запросов и отображать результат в виде единого набора данных. Такие комбинированные запросы обычно называются объединениями или сложными запросами.


1. Использование оператора UNION

Запросы в языке 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 должен включать два и более операторов SELECT, отделенных между собой ключевым словом UNION (т.е. если в запросе используется четыре оператора SELECT, то должно быть три ключевых слова UNION);
  • каждый запрос оператора UNION должен иметь одни и те же столбцы, выражения или статистические функции, которые, к тому же, должны быть перечислены в одинаковом порядке;
  • типы данных столбцов должны быть совместимы. Они не обязательно должны быть одного типа, однако должны иметь подобный тип, чтобы СУБД могла их однозначно преобразовать (например, это могут быть разные числовые типы данных или разные типы даты).
  • 2. Включение или выключение повторяющихся строк

    Запрос с UNION автоматически удаляет все повторяющиеся строки из набора результатов запроса (другими словами, ведет себя как предложение WHERE с несколькими условиями в одном операторе SELECT). Таково поведение оператора UNION по умолчанию, но при желании мы можем изменить это. Для этого нам следует использовать оператор UNION ALL вместо UNION.

    3. Сортировка результатов комбинированных запросов

    Результаты выполнения оператора SELECT сортируются с помощью предложения ORDER BY. При комбинировании запросов с помощью UNION только одно предложение ORDER BY может быть использовано, и оно должно быть проставлено в последнем операторе SELECT. Действительно, на практике нет особого содержания часть результатов сортировать в одном порядке, а другую часть – в другом. Поэтому несколько предложений ORDER BY применять не разрешается.