【问题标题】:Inner join differences内连接差异
【发布时间】:2014-05-20 14:18:55
【问题描述】:

我有一个 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

是一样的吗?哪个更好?

谢谢

【问题讨论】:

标签: sql sql-server join where crud


【解决方案1】:

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

对于 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

它将包括 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

【讨论】:

  • 性能方面,如果表是索引,应该是一样的。
【解决方案2】:

对于您的查询,这不会改变任何事情。

就性能而言,您的 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中的哪个条件适用于哪个表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2020-09-08
    • 1970-01-01
    • 2010-10-03
    • 2014-03-11
    相关资源
    最近更新 更多