执行结果完全相同 但是个人认为写成inner join on A.ID=B.ID and A.ID=1这样的执行效率会比较高一些 在A.ID=B.ID WHERE A.ID=1这种情况下where语句会在连接后的结果集中进行筛选,而第一种情况下筛选是在连接之前执行的,在记录很多的情况下会看出不同不知道我的理解对不对:)
有不同的。 create table ta( kno int primary key, c1 int) create table tb( kno int primary key, c2 int) insert into ta(kno,c1) select 1,100 union select 2,90 insert into tb(kno,c2) select 1,70 union select 3,null 用select ta.kno,ta.c1,tb.c2 from ta left join tb on ta.kno=tb.kno會得到兩條記錄 用select ta.kno,ta.c1,tb.c2 from ta,tb where ta.kno=tb.kno只有一條記錄
但是个人认为写成inner join on A.ID=B.ID and A.ID=1这样的执行效率会比较高一些
在A.ID=B.ID WHERE A.ID=1这种情况下where语句会在连接后的结果集中进行筛选,而第一种情况下筛选是在连接之前执行的,在记录很多的情况下会看出不同不知道我的理解对不对:)
create table ta(
kno int primary key,
c1 int)
create table tb(
kno int primary key,
c2 int)
insert into ta(kno,c1) select 1,100 union select 2,90
insert into tb(kno,c2) select 1,70 union select 3,null
用select ta.kno,ta.c1,tb.c2
from ta left join tb
on ta.kno=tb.kno會得到兩條記錄
用select ta.kno,ta.c1,tb.c2 from ta,tb
where ta.kno=tb.kno只有一條記錄
在查询优化时
一般都遵循先投影,再选择,再联结
因为联结所号时间资源是最大的
而INNER JOIN 是:
再联结的同时进行选择,
也就是 扫描表1的每一条记录,然后在表二中筛选满足条件的记录加入最终表,
而用 WHERE 的话
数据库是:扫描表1的每一条记录,同时将表二中所有的记录加入最终表,
然后再根据WHERE 的条件进行筛选,耗时间和 空间资源都比INNER JOIO 大的多!!!
强调一条,在数据库里,比较2记录一次比合并2记录一次花的时间要小的多!