Документация по PostgreSQL 9.1.1 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 7. Запросы | Fast Forward | Next |
Результаты двух запросов могут быть скомбинированы, с помощью списочных операций объединения, пересечения и вычитания. Синтаксис следующий:
запрос1 UNION [ALL] запрос2 запрос1 INTERSECT [ALL] запрос2 запрос1 EXCEPT [ALL] запрос2
запрос1 и запрос2 являются запросами, которые могут использовать любые из описанных выше возможностей. Списочные операции также могут быть вложенными или выстроенными в цепочку, например:
запрос1 UNION запрос2 UNION запрос3
что выполняется как:
(запрос1 UNION запрос2) UNION запрос3
UNION добавляет результат запроса2 к результату запроса1 (хотя сохранение порядка строк, в котором они возвращаются запросом не гарантируется). Таким образом, объединение исключает дублирующиеся строки из результата точно также как это делает DISTINCT, если только не используется UNION ALL.
INTERSECT возвращает все строки, которые есть как в результате запроса1 так и в результате запроса2. Дублирующиеся строки исключаются, если только не используется INTERSECT ALL.
EXCEPT возвращает все строки, которые есть в результате запроса1, но которых нет в результате запроса2. (Иногда это называют также разницей между двумя запросами.) И снова, дублирующиеся строки исключаются, если только не используется EXCEPT ALL.
В порядке вычисления объединения, пересечения или вычитания (разницы) двух запросов, эти два запроса должны быть "совместимы для объединения", что означает, что они должны возвращать то же самое количество колонок, тех же самых типов, как описывается в Section 10.5.