如何使用PostgreSQL联合和联合所有查询来结合选择语句的结果

425 阅读2分钟

本教程将告诉你如何使用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都有其特定的使用情况。它们对开发者很有用,因为它们可以使数据更容易聚合成各种集合。