我记得读书的地方/被告知后面/发明了一种传闻(^_^)两个下列查询是在MySQL服务器幕后相同:MySQL的JOIN场景
SELECT *
FROM a
JOIN b
ON a.id = b.id
和
SELECT *
FROM a, b
WHERE a.id = b.id
这是真的吗?如果是这样,是否比其他条款更好? (如解析效率或标准符合性)
我记得读书的地方/被告知后面/发明了一种传闻(^_^)两个下列查询是在MySQL服务器幕后相同:MySQL的JOIN场景
SELECT *
FROM a
JOIN b
ON a.id = b.id
和
SELECT *
FROM a, b
WHERE a.id = b.id
这是真的吗?如果是这样,是否比其他条款更好? (如解析效率或标准符合性)
事实上这是事实。第一个查询依据SQL-89标准,第二个查询依据SQL-92。
SQL-92标准引入INNER JOIN .. ON
和OUTER JOIN .. ON
为了替换SQL-89的更复杂的(?)语法。
外部联接在SQL-89将是:
SELECT ...
FROM t1, t2
WHERE t1.id *= t2.id
凡在SQL-92这将是
FROM t1 OUTER JOIN t2 ON t1.id = t2.id
我也喜欢SQL-89在SQL-92半晌,但我认为SQL Server 2008 compability删除了对SQL-89连接语法的支持。
是的,这些是相同的。但它不是特定于Mysql的 - 它只是一种不同的连接方式。您在上面写的那个是较新的,并且提供了一个
另请参阅Wikipedia coverage of inner joins。有关于显式连接和隐式连接的详细信息。
[内连接相比交叉连接的性能]可能的重复(http://stackoverflow.com/questions/670980/performance-of-inner-join-compared-to-cross-join) – soulmerge 2011-04-20 07:19:24
可能重复的[ SQL离开连接与FROM行上的多个表?](http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line) – 2011-04-20 07:20:54
oops ...应该已经花了更多时间搜索:) – daniel 2011-04-21 07:48:47