📜  PostgreSQL – INTERSECT 运算符

📅  最后修改于: 2022-05-13 01:57:15.853000             🧑  作者: Mango

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;

输出: