【问题标题】:What's different between INTERSECT and JOIN?INTERSECT 和 JOIN 有什么不同?
【发布时间】:2015-03-27 10:43:22
【问题描述】:

创建数据:

CREATE TABLE sub1(id int,name nvarchar(7));
CREATE TABLE sub2(id int,name nvarchar(7));
INSERT INTO sub1 VALUES(1,'one1');
INSERT INTO sub2 VALUES(1,'one1');
INSERT INTO sub1 VALUES(2,'one2');
INSERT INTO sub2 VALUES(2,'one2');
INSERT INTO sub1 VALUES(3,'one3');
INSERT INTO sub2 VALUES(4,'one4');
INSERT INTO sub1 VALUES(5,'one5');
INSERT INTO sub2 VALUES(6,'one6'); 
INSERT INTO sub1 VALUES(NULL,NULL);
INSERT INTO sub2 VALUES(NULL,NULL);

这两个查询有什么不同:

SELECT * FROM sub1 INTERSECT SELECT * FROM sub2;

SELECT sub1.id,sub1.name FROM sub1 JOIN sub2 ON sub1.id = sub2.id;

INTERSECT 和 JOIN 有什么不同?

【问题讨论】:

标签: sql sql-server inner-join


【解决方案1】:
  1. INTERSECT 仅比较 2 个集合,并仅从两个集合中选择不同的等效值。需要注意的是,在 INTERSECT 集合运算符中,NULL 标记被视为相等。此外,集合应该包含相同数量的具有隐式可转换类型的列。

  1. 在 Join 下我猜你的意思是 INNER JOIN? INNER JOIN 将返回匹配谓词将返回 TRUE 的行。 IE。如果两个表中都有 NULL 标记,则不会返回这些行,因为 SQL 中的 NULL NULL。

INTERSECT 也只是比较所有属性的集合。它们的类型应该可以相互隐式转换。在加入时,您可以比较任何谓词和不同类型的集合。不强制只返回匹配的行。例如,您可以在 join 中生成笛卡尔积。

Select * from Table1
Join Table2 on 1 = 1

【讨论】:

  • INTERSECT/INTERSECT ALL 和 JOIN 之间不限于键,请提供一个不能转换成另一个的语句。
猜你喜欢
  • 2011-05-21
  • 2011-02-20
  • 2016-08-29
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多