可能重复:
Explicit vs implicit SQL joins
In MySQL queries, why use join instead of where?
使用=运算符查询: -
Select us.FirstName
,uf.FileTitle
,pq.Question
,pa.Answer from
UserMst us,UploadedFile uf,PollQuestion pq,PollAnswer pa,PollResult pr
where us.UserId = pr.U_id
and uf.FileId=pr.A_id
and pq.Q_id=pr.Q_id
and pa.A_id=pr.ans_id
使用Join关键字进行查询: -
Select us.FirstName,uf.FileTitle ,pq.Question,pa.Answer from
PollResult pr join UserMst us on us.UserId = pr.U_id
join UploadedFile uf on uf.FileId = pr.A_id
join PollQuestion pq on pq.Q_id= pr.Q_id
join PollAnswer pa on pa.A_id =pr.ans_id
哪一个更好执行?
答案 0 :(得分:1)
在SQL 2008中,它几乎没有任何区别。 (虽然我认为以前的方法可能会被弃用?)
但是,在很多SQL实现中,如果每个连接都有一个条件,那么后续连接将以较少的值连接,因此稍快一些。
如果你把所有条件都放在最后,那么这种优化不会发生到最后。因此,您最终会得到一个大量的行列表,这些行列表一次性过滤,理论上会慢一些。
例如:
如果表A有1000行,并且您连接到另一个表B,有1000行,但是指定了仅加入B中10个行的连接条件,那么您有10行。如果你然后加入表C,那么你只会加入10行。
如果你加入A到B到C然后过滤,你过滤1000行(或者可能是1,000,000,取决于连接)
因此,为了交叉实现兼容性和可读性,最好使用后一版本。
答案 1 :(得分:0)
我更喜欢连接我觉得最常见的习惯是总是将连接条件放在ON子句中(除非它是一个外连接,而你实际上确实需要在where子句中)对于读取查询的人来说,更清楚地了解表的连接条件,并且它还有助于防止WHERE子句长达数十行。因为它很干净