В этом учебном пособии вы узнаете, как использовать оператор UNION в PostgreSQL с синтаксисом и примерами.
Описание
PostgreSQL оператор UNION используется для объединения результирующих наборов из 2 или более операторов SELECT. Он удаляет повторяющиеся строки между различными операторами SELECT.
Каждый оператор SELECT в операторе UNION должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.
Синтаксис
Синтаксис для оператора UNION в PostgreSQL:
FROM tables
[WHERE conditions]
UNION
SELECT expression1, expression2,... expression_n
FROM tables
[WHERE conditions];
Параметры или аргументы
- expression1, expression2,... expression_n
- Столбцы или вычисления, которые вы хотите получить.
- tables
- Таблицы, из которых вы хотите получить записи. В операторе FROM должна быть указана хотя бы одна таблица.
- WHERE conditions
- Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.
Примечание
- В обоих операторах SELECT должно быть одинаковое количество выражений.
- Поскольку оператор UNION по умолчанию удаляет все повторяющиеся строки из набора результатов, предоставление модификатора UNION DISTINCT не влияет на результаты.
- Имена столбцов из первого оператора SELECT в операторе UNION используются в качестве имен столбцов для набора результатов.
Пример - возврат одного поля
Ниже приведен пример оператора PostgreSQL UNION, который возвращает одно поле из нескольких операторов SELECT (и оба поля имеют одинаковый тип данных):
1 2 3 4 5 |
SELECT category_id FROM products UNION SELECT category_id FROM categories; |
В этом примере оператора PostgreSQL UNION, если category_id появилось как в таблице products, так и в categories, оно будет отображаться в вашем результирующем наборе один раз. Оператор PostgreSQL UNION удаляет дубликаты. Если вы не хотите удалить дубликаты, попробуйте использовать PostgreSQL оператор UNION ALL.
Пример - использование ORDER BY
Оператор PostgreSQL UNION может использовать оператор ORDER BY для упорядочивания результатов запроса.
Например:
1 2 3 4 5 6 7 8 |
SELECT product_id, product_name FROM products WHERE product_id >= 24 UNION SELECT category_id, category_name FROM categories WHERE category_name <> 'Hardware' ORDER BY 2; |
В этом PostgreSQL операторе UNION, поскольку имена столбцов в двух операторах SELECT различаются, более выгодно ссылаться на столбцы в операторе ORDER BY по их положению в результирующем наборе. В этом примере мы отсортировали результаты по product_name / category_name в порядке возрастания, как обозначено ORDER BY 2.
Поля product_name / category_name находятся в позиции № 2 в результирующем наборе.