【发布时间】:2017-07-20 00:41:15
【问题描述】:
我发现 this link 以视觉方式解释连接,有些东西引起了我的注意。
最后一个例子是这样说的:
To produce the set of records unique to Table A and Table B,
we perform the same full outer join, then exclude the records
we don't want from both sides via a where clause.
此示例的两个表包含以下内容:
id name id name
-- ---- -- ----
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
查询和结果:
SELECT *
FROM TableA
FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null
OR TableB.id IS null
输出:
id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader
我不明白的是,where 子句如何在这些表上找到空 ID?
** WHERE TableA.id IS null
OR TableB.id IS null **
会不会是在完全连接发生后,在两个表的最终输出中插入了一堆空元组(正如完全连接所期望的那样),然后 where 子句会从其中获取它的空 ID?
【问题讨论】:
-
不应该是
IS NOT NULL吗? -
示例想要显示的内容是正确的,事实上,如果您构建这些表并执行此查询,查询确实会带来这些结果。我只需要了解where子句是如何找到空值的,当表中没有空值时,至少最初没有。
标签: sql join set set-theory