在FROM中具有多个表的select的效果与INNER JOIN相同,但是什么是ON子句呢?

时间:2012-11-02 15:24:30

标签: sql-server tsql inner-join

我有这样的查询:

SELECT
    *
FROM
    table1,
    table2

我知道这有点等同于:

SELECT
    *
FROM
    table1
INNER JOIN
    table2
ON ???

但是,连接的结果ON子句是什么?

更新

在SSMS中进行一些测试之后,这是我的发现

SELECT * FROM table1,table2

提供与

相同的执行计划和相同的记录
SELECT * FROM table1 INNER JOIN table2 ON 1=1

相同
SELECT * FROM table1 CROSS JOIN table2

3 个答案:

答案 0 :(得分:1)

定义其关系的列。

SELECT  *
FROM  table1 
      INNER JOIN table2
           ON table1.ID = table2.ID

实际上您显示的查询不是equal。第一个产生两个表中所有记录的笛卡尔积,或者换言之CROSS JOIN

答案 1 :(得分:1)

SELECT
    *
FROM
    table1,
    table2

相当于:

SELECT 
    * 
FROM 
    table1
CROSS JOIN 
    table2

没有CROSS JOIN的ON语句。如果需要过滤CROSS JOIN,请将其放在WHERE子句中。

WHERE table1.DateCreated <= table2.DateModified

答案 2 :(得分:0)

在SSMS中进行一些测试之后,这是我的发现

SELECT * FROM table1,table2

提供与

相同的执行计划和相同的记录
SELECT * FROM table1 INNER JOIN table2 ON 1=1

相同
SELECT * FROM table1 CROSS JOIN table2