我见过有人写下面的查询
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
像这样写的
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name2.column_name =table_name1.column_name
它实际上有什么不同吗?
答案 0 :(得分:7)
没有区别。
table_name1.column_name=table_name2.column_name
和
table_name2.column_name=table_name1.column_name
具有相同的含义。
联接的“左”部分是指表而不是比较 - 我猜这是你的隐含问题?
答案 1 :(得分:4)
不是在正常情况下,没有。可以想象,可能存在一些足够复杂的查询,比你的例子复杂得多,其中连接优化器会如此不堪重负以至于这可能很重要,但如果这甚至可能你必须努力工作。
顺便说一下,你可以将这两个写成USING (column_name)
。 :)
我还建议,为了解析这类问题,您要熟悉EXPLAIN
。
答案 2 :(得分:0)
这可能是个人品味的问题;我碰巧像你的第二个例子那样编写联接,但不能说我在这方面100%一致。
此外,回到Bad Old Days,当查询优化器不像现在那样聪明时,您会发现在连接表达式或WHERE
子句中重新排序操作数可能会产生很大的不同;也就是说,如果操作数是以一种方式排序而不是在它们被反转时,优化器将使用索引。
我想我有一个Oracle 7闪回。要躺下......