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

时间:2015-09-04 11:41:47

标签: mysql

查询1。

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    |
+-----------------+

哪种方式更可靠,更快?

2 个答案:

答案 0 :(得分:1)

我会说Query1符合ANSI标准且可取。如果省略WHERE条件,则Query2将成为交叉连接,从而提供不需要的数据。在Query1中,如果未指定JOINed列,则会出现更可靠的错误

答案 1 :(得分: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样式,因为它更具可读性并清除你的意图。