Комбинирование результатов нескольких запросов
На базе результатов нескольких запросов можно сформировать единый набор данных. Это может быть обычная консолидация всех записей, отобранных запросами, а может быть результат некоторой проведенной над ними операции теории множеств (см. приложение Л). Стандарт SQL:2003 поддерживает операторы UNION, INTERSECT и EXCEPT, предназначенные для комбинирования результатов нескольких запросов. Данный запрос возвращает 37 записей. А теперь представьте, что в дополнение к полученному списку нужно вывести номера телефонов всех торговых представителей. Вот запрос, выполняющий эту задачу — он возвращает 6 записей.
Для комбинирования этих записей в единый результирующий набор данных можно использовать оператор Как видите, в сформированном списке присутствуют записи с телефонами как заказчиков, так и торговых представителей. Следует отметить, что в запросе SQL, включающем оператор UNION, в списках предложений SELECT должно содержаться одинаковое количество столбцов, причем соответствующие столбцы должны иметь совместимые типы данных. К примеру, если в одном запросе выражение возвращает символьную строку, во втором запросе, объединенном оператором UNION, соответствующее выражение не должно возвращать число. Объединенный результирующий набор данных можно упорядочить, что и было продемонстрировано в предыдущем примере, однако следует отметить, что предложение ORDER BY может применяться только к общим результатам, а не к набору данных, возвращенному запросом, в котором это предложение присутствует.
Если запросы потенциально могут возвращать дублирующиеся записи, их можно как отфильтровать, так и заставить отображаться. По умолчанию оператор UNION исключает дублирующиеся записи, однако если применить оператор UNION ALL, все записи, отобранные отдельными запросами, будут присутствовать в объединенном наборе данных. Следующий простой запрос возвращает коды состояний и их описания из таблицы STATUS базы данных Таким образом, дублирующиеся строки (содержащие одинаковые значения в соответствующих столбцах) были исключены, в результате чего объединенный запрос возвращает все те же 4 записи. В то же время те же запросы, объединенные оператором UNION ALL, позволят получить полный набор данных, содержащий все строки, возвращенные обоими запросами.