left join很浪费资源吗?

lovemybaby 2006-03-17 03:09:49
left join很浪费资源吗?
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovemybaby 2006-03-17
  • 打赏
  • 举报
回复
要查询tb1,tb2中相关联的部分的sql语句有三种写法:
请问以下三种sql语句的写法,哪一种的效率最好?

方法一、
$sql="select * from tb1,tb2 where tb1.id=tb2.uid";

方法二、
$sql="select * from tb1 left join tb2 on tb1.id=tb2.uid";

方法三、
$sql="select * from tb1 inner join tb2 on tb1.id=tb2.uid";
lovemybaby 2006-03-17
  • 打赏
  • 举报
回复
哦,那我如果是取得tb1.id=tb2.id的数据的话,用inner join会比left join的效率高吧?
xuzuning 2006-03-17
  • 打赏
  • 举报
回复
INNER JOIN和,(逗号)在语义上是等价的,都是进行一个在使用的表之间的全联结。通常,你指定表应该如何用WHERE条件联结起来。
ON条件是可以用在一个WHERE子句形式的任何条件。
如果在一个LEFT JOIN中没有右表的匹配记录,一个所有列设置为NULL的行被用于右表。你可以使用这个事实指出表中在另一个表中没有对应记录的记录:
mysql> select table1.* from table1
LEFT JOIN table2 ON table1.id=table2.id
where table2.id is NULL;

这个例子找出在table1中所有的行,其id值在table2中不存在(即,所有table1中的在table2中没有对应行的行)。当然这假定table2.id被声明为NOT NULL。

USING (column_list)子句命名一系列必须存在于两个表中的列。 例如一个USING子句:
A LEFT JOIN B USING (C1,C2,C3,...)

被定义成在语义上等同一个这样的ON表达式:

A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...

2个表的NATURAL LEFT JOIN被定义为在语义上等同于一个有USING子句命名在两表中存在的所有列的一个LEFT JOIN。
STRAIGHT_JOIN等同于JOIN,除了左表在右表之前被读入,这能用于这些情况,联结优化器将表的顺序放错了。


更详细的说明,请件数据库相关书籍
lovemybaby 2006-03-17
  • 打赏
  • 举报
回复
up
lovemybaby 2006-03-17
  • 打赏
  • 举报
回复
大家有没有用过inner join?他们效率方面怎样?
lovemybaby 2006-03-17
  • 打赏
  • 举报
回复
用到两表关联查询就用到left join了吧
julychina 2006-03-17
  • 打赏
  • 举报
回复
没有具体试过。我一般不用。我直接用两表关联查询

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧