本教程将告诉你如何使用PostgreSQL联合和联合所有查询来结合选择语句的结果。
PostgreSQL联合查询如何工作
PostgreSQL的查询是非常简单的。它的工作原理是结合两个或更多的SELECT数据结果,以创建一个更大的集合。
例如,如果我们把一个选择语句的结果作为X,把另一个选择语句的结果作为Y,那么这两个语句的结果UNION就是SELECT X和Y的总和,没有任何重复。
基本用法
在PostgreSQL中,UNION查询的一般语法是。
SELECT col1, col2, col3,…coln FROM tb1 UNION SELECT col1, col2, col3,…coln FROM tb2 WHERE condition;
虽然你主要是选择特定的列,但你可以向选择语句传递其他有效的PostgreSQL表达式。
PostgreSQL联合查询实例
让我们用一个简单的例子来说明如何使用UNION查询。
首先创建一个样本数据库,然后用样本数据填充它,如下面的查询中所示。
DROP DATABASE IF EXISTS union_db;
CREATE DATABASE union_db;
DROP TABLE IF EXISTS top_database;
CREATE TABLE top_database(
id serial,
db_name VARCHAR NOT NULL
);
DROP TABLE IF EXISTS all_db;
CREATE TABLE all_db(
id SERIAL,
db_name VARCHAR
);
INSERT INTO top_database(db_name) VALUES ('MySQL'), ('PostgreSQL'), ('Microsoft SQL Server'), ('SQLite'), ('MongoDB');
INSERT INTO all_db(dB_name) VALUES ('MySQL'), ('Elasticsearch'), ('SQLite'), ('DynamoDB'), ('Redis');
使用上面的样本数据库和表,我们可以执行UNION,如。
SELECT * from top_db UNION top_database;
上述查询应该返回一个单一的集合,其数值组合如下图所示。

要成功运行UNION查询,选择语句中指定的列数和顺序必须相似,而且数据类型必须兼容。
PostgreSQL联合所有
与UNION 语句类似的查询是 UNION ALL。这个查询的工作方式与UNION相同,但不从指定的集合中删除重复的值。
我们可以通过使用上面的相同查询来说明这个功能。
SELECT * from all_db UNION ALL SELECT * from top_database;
在这种情况下,我们应该返回包括重复值在内的组合值,如下图所示。

结论
UNION和UNION ALL都有其特定的使用情况。它们对开发者很有用,因为它们可以使数据更容易聚合成各种集合。