SQL中哪一个更好?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
SQL中哪一个更好?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
我想它不会在所有的事情,你调用任何一种方式都表。
都没有。
SELECT
A.COL_A1, B.COL_B1
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.COL_A1 = B.COL_B1
如果您询问性能(您没有),然后测试您的特定平台。
这取决于我们正在讨论的数据库系统。在许多RDBMS中,有一些查询优化 - 所以如何构建您的查询可能不是服务器处理它的方式......
例如,有一个查询优化器将执行一个执行计划;通常它是正确的,但你可以help it along the way。
大多数其他主要数据库都有类似的东西......所以在您的示例中,您的两个示例都可能以相同的方式进行处理。
不应该有任何区别,因为优化程序可能会将其中一个语句转换为另一个语句。但一如既往地确保:运行两种测试,根据您使用的数据库可能会有细微的差异
就像你在后面描述的链接,它取决于在哪个表中设置唯一的索引(可能特别适用于IBM DB)。你的答案是帮助页面您链接:)
reagards
SQL是declarative所以你告诉优化你想要什么,不怎么做到这一点。
他们是相同的,因为它是基于数学理论,不是为了执行
。然而,花费者的答案是正确的,因为这是ANSI-92使用JOIN,而不是旧的“过滤笛卡尔”您发布。
为什么你在阅读有关SQL Server的WebSphere文档?你真的必须努力工作才能避免找到一篇SQL Server文章。
索引(在本文中)对SQL Server中的结果没有影响,只影响性能和使用的执行计划。对于SQL Server,索引与JOIN/WHERE命令分开考虑(无关紧要,当然这是声明式的)。如果在WebSphere改变了它的计划基础上JOIN命令则坦言这是比我想象的(我有客户使用我的数据库从WebSphere ......)
我建议更多的狗屎......
SELECT COL_A1
FROM TABLE1 A
WHERE EXISTS (SELECT *
FROM TABLE2 B
WHERE A.COL_A1 = B.COL_B1);
因为我更喜欢子查询的意见。
但它会表现更好......? (请参阅评论意见) – onedaywhen 2010-07-09 12:45:22
可能,但不可能。如果查询优化器认为合适,它将重写该子查询作为连接,如果不是,则按照它的原则评估它。它可以节省您担心使用什么样的连接(请参阅原始问题的支持者评论)。 – 2010-07-09 13:35:25
只有当您不希望TABLE2的输出为 – gbn 2010-07-10 07:49:21
更好地以什么方式? – Oded 2010-07-09 11:34:54
什么数据库?桌子是什么样的?表中有什么样的数据?那些字段是什么数据类型?无法回答没有**很多**你的部分更多的信息! – 2010-07-09 11:39:17
显然表现。 – Venom 2010-07-09 11:39:27