【问题标题】: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 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中的哪个条件适用于哪个表