INTERSECT和JOIN之间的区别是什么?

时间:2015-01-28 13:46:40

标签: sql sql-server

请帮帮我。

创建数据:

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);

2个查询之间有什么区别:

SELECT * FROM sub1 INTERSECT  SELECT * FROM sub2
SELECT sub1.id,sub1.name FROM sub1 JOIN sub2 ON sub1.id = sub2.id 

INTERSECT和JOIN有什么区别?

1 个答案:

答案 0 :(得分:5)

  1. INTERSECT只比较2组,并从两组中仅选择不同的等效值。值得注意的是,在INTERSECT集合运算符中,NULL标记被视为等于。此外,集合应包含具有隐式可转换类型的相同数量的列。
  2. enter image description here

    1. 在加入我想你的意思是INNER JOIN? INNER JOIN将返回匹配谓词将返回TRUE的行。 I.E.如果两个表中都有NULL标记,则不会返回这些行,因为NULL<> SQL中为NULL。
    2. INTERSECT也只是比较所有属性的SETS。它们的类型应该可以隐含地相互转换。在连接中,您可以比较任何谓词和不同类型的集合。只返回匹配的行并不是必须的。例如,您可以在加入中生产笛卡尔积。

      Select * from Table1
      Join Table2 on 1 = 1