PostgreSQL – INTERSECT 运算符
PostgreSQL 有一个 INTERSECT运算符,用于将 SELECT 语句返回的两个或多个结果集组合起来,并将表之间的公共数据提供到单个结果集中。
Syntax:
SELECT
column_list
FROM
A
INTERSECT
SELECT
column_list
FROM
B;
将 INTERSECT运算符与 SELECT 语句一起使用时,必须遵循以下规则:
- SELECT 子句中的列数及其顺序必须相同。
- 列的数据类型必须兼容。
PostgreSQL 中 INTERSECT运算符的维恩图如下:
现在让我们建立一个示例数据库来观察 INTERSECT运算符的实现。我们将为 RAW 员工(例如 raw_agents)创建一个示例数据库,并设置三个表,即 agent、op_chi(在中国运营)和 op_pak(在巴基斯坦运营)。为此,请执行以下步骤:
- 使用以下命令创建数据库:
CREATE DATABASE raw_agents;
- 使用以下命令创建表员工、op_CHI 和 op_PAK:
CREATE TABLE agent(
agent_id serial PRIMARY KEY,
agent_name VARCHAR (255) NOT NULL
);
CREATE TABLE op_chi(
agent_id INT PRIMARY KEY,
active_date DATE NOT NULL,
FOREIGN KEY (agent_id) REFERENCES agent (agent_id)
);
CREATE TABLE op_pak(
agent_id INT PRIMARY KEY,
active_date DATE NOT NULL,
FOREIGN KEY (agent_id) REFERENCES agent (agent_id)
);
- 使用以下命令将活动日期插入具有代理名称的表中:
INSERT INTO agent(agent_name)
VALUES
('Tiger'),
('James Bond'),
('Jason Bourne'),
('Ethan Hunt'),
('Ajit Doval'),
('Rowdy Rathore'),
('Milkha Singh'),
('Tom Hanks'),
('Sabana'),
('Razia Sultan');
INSERT INTO op_chi
VALUES
(1, '2000-02-01'),
(2, '2001-06-01'),
(5, '2002-01-01'),
(7, '2005-06-01');
INSERT INTO op_pak
VALUES
(9, '2000-01-01'),
(2, '2002-06-01'),
(5, '2006-06-01'),
(10, '2005-06-01');
现在我们的数据库已经设置好了,让我们看一些例子。
示例 1:
在这里,我们将使用 INTERSECT运算符查询在巴基斯坦和中国都活跃的代理的“agent_id”。
SELECT
agent_id
FROM
op_CHI
INTERSECT
SELECT
agent_id
FROM
op_PAk;
输出:
示例 2:
在这里,我们将使用 INTERSECT运算符查询在巴基斯坦和中国都活跃的代理的“agent_id”,并使用 ORDER BY 子句按“agent_id”升序对其进行排序。
SELECT
agent_id
FROM
op_CHI
INTERSECT
SELECT
agent_id
FROM
op_PAk
ORDER BY
agent_id;
输出: