加入mysql5

时间:2009-09-05 16:49:15

标签: sql mysql syntax

我见过有人写下面的查询

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

它实际上有什么不同吗?

3 个答案:

答案 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闪回。要躺下......