内部联接差异

时间:2014-04-08 04:39:48

标签: sql sql-server join where crud

  

我有一个table1(a,b,c)和table2(a,b,c)

之间的区别是什么
select * from table1 T1 inner join table2 T2 on
T1.a=T2.a and T1.b = t2.b and T1.c = T2.c

select * from table1 T1 inner Join table2 T2 on T1.a = T2.a  where 
T1.b= T2.b and T1.c = T2.C

是一样的吗?哪一个更好?

由于

2 个答案:

答案 0 :(得分:3)

使用内连接没有区别。只有当您开始使用左/右连接时,您才会看到差异。

对于LEFT JOINS,如果你有

select  * 
from    table1 T1 LEFT join 
        table2 T2   on  T1.a=T2.a 
                    and T1.b = t2.b 
                    and T1.c = T2.c

它将包括fromo table1的所有行以及table2中的字段a,b和c匹配的行。

如果你有

select  * 
from    table1 T1 inner Join 
        table2 T2   on  T1.a = T2.a  
where   T1.b= T2.b 
and     T1.c = T2.C

这将包括来自table1的行和来自table2的行,其中a相等,然后对b和c进行过滤。

SQL Fiddle DEMO

我总觉得这个视觉表现很有用。

SQL SERVER – Introduction to JOINs – Basic of JOINs

答案 1 :(得分:0)

对于您的查询,这不会改变任何内容。

就性能而言,您的RDBMS能够理解它是一样的。

但是考虑到你有更多的联接,这会改变查询的可读性

示例:

SELECT
    * 
FROM 
    table1 T1 
    INNER JOIN table2 T2 
        ON T1.a = T2.a 
        AND T1.b = T2.b 
        AND T1.c = T2.c
    LEFT JOIN table3 T3
        ON T3.x = T1.a
        AND T3.status = 1
WHERE
    T1.a > 100

您可以更快地了解哪个条件适用于INNER/LEFT JOIN

中的哪个表格