我有一个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
是一样的吗?哪一个更好?
由于
答案 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进行过滤。
我总觉得这个视觉表现很有用。
答案 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