2015-09-04 28 views
1

查询1.有和没有连接的这两个sql查询有什么区别?

select friends.name,social.facebook 
from friends inner join social on friends.id=social.fid where facebook="Yes"; 

输出。

+-----------------+ 
| name | facebook | 
+-----------------+ 
| ABC | Yes | 
| BCD | Yes | 
| CDE | Yes | 
+-----------------+ 

查询2.

select f.name,s.facebook from friends as f,social as s 
where f.id=s.fid && s.facebook="Yes"; 

输出。

+-----------------+ 
| name | facebook | 
+-----------------+ 
| ABC | Yes | 
| BCD | Yes | 
| CDE | Yes | 
+-----------------+ 

哪种方式更可靠,更快?

回答

1

对结果无差异集睿智但低于您的查询使用ANSI风格明确的连接语法

select friends.name,social.facebook 
from friends inner join social on friends.id=social.fid 
where social.facebook="Yes"; //also qualify the column with alias/table name 

,而第二个查询如下所示使用旧式隐式连接语法。

select f.name,s.facebook from friends as f,social as s 
where f.id=s.fid && s.facebook="Yes" 

更喜欢JOIN第一的风格,因为它更具可读性和清除你的意图。

1

我会说Query1符合ANSI并且是可取的。如果您省略WHERE条件,则Query2变为交叉连接,从而提供不需要的数据。在查询1,如果没有指定联接的列是你得到一个错误,这是更可靠的

+0

如果省略'ON'子句,MySQL不会给出错误消息。它只是把它看作'CROSS JOIN'。 – Barmar