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