SQL中哪一个更好?
SELECT A.COL_A1, B.COL_B1 FROM TABLE1 A, TABLE2 B
WHERE A.COL_A1 = B.COL_B1
或:
SELECT B.COL_B1, A.COL_A1 FROM TABLE2 B, TABLE1 A
WHERE B.COL_B1 = A.COL_A1
答案 0 :(得分:8)
都不是。
SELECT
A.COL_A1, B.COL_B1
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.COL_A1 = B.COL_B1
如果您询问性能(您没有),那么请在您的特定平台上进行测试。
答案 1 :(得分:3)
不应该有任何区别,因为优化器可能会在内部将其中一个语句转换为另一个语句。但是一如既往地确定:用两者运行测试,根据您使用的数据库可能略有不同
答案 2 :(得分:1)
我想这根本不重要,你可以用两种方式调用两个表。
答案 3 :(得分:1)
这取决于我们所讨论的数据库系统。在许多RDBMS中,存在某种查询优化 - 因此您构建查询的方式可能与服务器处理它的方式不同......
例如,有一个查询优化器可以计算执行计划;通常它是正确的,但你可以help it along the way。
大多数其他主要数据库都有类似的东西......因此在您的示例中,您的两个示例很可能以完全相同的方式处理。
答案 4 :(得分:1)
SQL是declarative所以你告诉优化器你想要什么,而不是 这样做。
它们是平等的,因为它基于数学理论,而不是执行顺序
然而,花钱的答案是正确的,因为这是使用JOIN的ANSI-92而不是你发布的旧的“过滤的笛卡儿”。
为什么要阅读有关SQL Server的WebSphere文档?你真的必须努力避免找到SQL Server文章。
索引(在文章中)对SQL Server中的结果没有影响,只对性能和使用的执行计划有影响。对于SQL Server,索引与JOIN / WHERE命令分开考虑(无关紧要,当然是声明性的)。如果WebSphere基于JOIN命令更改了它的计划,那么坦率地说它比我想象的更糟糕(我有客户端使用我的WebSphere数据库......)
答案 5 :(得分:0)
与您发布的链接一样,它取决于在哪个表中设置了唯一的索引(特别是对于IBM DB)。您的答案是您链接的帮助页面:)
reagards
答案 6 :(得分:0)
我建议......
SELECT COL_A1
FROM TABLE1 A
WHERE EXISTS (SELECT *
FROM TABLE2 B
WHERE A.COL_A1 = B.COL_B1);
因为我更喜欢查询子查询。