PostgreSQL Union: How to Combine Data from Multiple Tables
PostgreSQL union — это оператор, позволяющий объединять результаты нескольких запросов в один, оставляя только уникальные значения. Он работает по следующему принципу:
- Результаты каждого запроса объединяются в единый набор строк
- Дубликаты удаляются, оставляя только уникальные значения
Пример синтаксиса оператора union:
SELECT * FROM table1
UNION
SELECT * FROM table2;
В этом примере мы объединяем результаты двух запросов, которые получают данные из таблиц table1 и table2. Результатом будет единый набор уникальных строк.
Пример использования оператора union:
-- таблица users
id | name | email
----|--------|--------------
1 | Alice | alice@domain.com
2 | Bob | bob@domain.com
3 | Alice | alice@domain.com
4 | Charlie| charlie@domain.com
-- запрос на получение уникальных имен
SELECT DISTINCT name FROM users;
-- запрос на получение уникальных email адресов
SELECT DISTINCT email FROM users;
-- объединение результатов
SELECT DISTINCT name FROM users
UNION
SELECT DISTINCT email FROM users;
В этом примере мы используем оператор union для объединения результатов двух запросов на получение уникальных имен и email адресов из таблицы users. Результатом будет единый набор уникальных значений в столбце name и email.
Оператор unionall возвращает все строки, полученные из входных запросов, включая повторения, в единый набор. Он работает аналогично оператору union, за исключением того, что он не удаляет дубликаты.
Пример синтаксиса оператора unionall:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2;
В этом примере мы объединяем результаты двух запросов, которые получают данные из таблиц table1 и table2. Результатом будет единый набор строк, содержащих все строки из обоих таблиц, включая дубликаты.
Вывод:
Оператор union в PostgreSQL позволяет объединить результаты нескольких запросов в единый набор уникальных строк, а оператор unionall объединит все строки из входных запросов, включая повторения. Эти операторы могут быть полезны при работе с большими объемами данных, когда необходимо объединить или сравнить результаты нескольких запросов.