PostgreSQL – 比较表
在 PostgreSQL 中,有多种方法可以比较两个表以找出它们之间的差异。在本文中,我们将研究两种最常用的技术。
1. 使用 EXCEPT 和 UNION运算符的比较
首先,让我们创建两个名为foo 的表 和bar ,并插入一些示例数据进行演示。
CREATE TABLE foo (
ID INT PRIMARY KEY,
NAME VARCHAR (50)
);
INSERT INTO foo (ID, NAME)
VALUES
(1, 'a'),
(2, 'b');
CREATE TABLE bar (
ID INT PRIMARY KEY,
NAME VARCHAR (50)
);
INSERT INTO bar (ID, NAME)
VALUES
(1, 'a'),
(2, 'b');
foo的 table 与bar具有相同的结构和数据 桌子。
接下来,我们更新栏中的一行 桌子。
UPDATE bar
SET name = 'c'
WHERE
id = 2;
现在我们的表格如下所示:
然后,要查找foo表中但不在bar表中的行,我们使用以下查询:
SELECT
ID,
NAME,
'not in bar' AS note
FROM
foo
EXCEPT
SELECT
ID,
NAME,
'not in bar' AS note
FROM
bar;
输出:
我们使用了EXCEPT 返回foo中行的运算符 桌子但不在酒吧里 桌子。我们可以应用相同的技术来查找bar表中但不在foo表中的行。
SELECT
ID,
NAME,
'not in foo' AS note
FROM
bar
EXCEPT
SELECT
ID,
NAME,
'not in foo' AS note
FROM
foo;
输出:
2. 使用 OUTER JOIN 的比较
OUTER JOIN 可用于比较两个表,如下所示:
SELECT
id,
name
FROM
foo
FULL OUTER JOIN bar USING (id, name)
WHERE
foo.id IS NULL
OR bar.id IS NULL;
输出:
查找foo 中的行数 桌子但不是酒吧 反之亦然,我们使用COUNT函数如下:
SELECT
COUNT (*)
FROM
foo
FULL OUTER JOIN bar USING (id, name)
WHERE
foo.id IS NULL
OR bar.id IS NULL;
输出: