日期:2014-05-19  浏览次数:20526 次

关于查询效率
问题一.
表达式1:select   a.*,b.*   from   a   inner   join   b   on   a.id=b.id
表达式2:select   a.*,b.*   from   a,b   where   a.id=b.id
两个表达式哪个效率高?
问题二.
以上两个表达式查询后的结果会出现如下情况:
a.name       b.name
------------------
name     2     names   2
name1   2     names   2     '这行的names   2   并不存在数据!如果不想使用默认上行的数据应该如何解决?
多谢!

------解决方案--------------------
第一个速度快 第二个相当于交叉联接
恶意用 isnull(字段,要替换的值)来替换出现null的值
可以用gruoping 了解是不是系统生成的null

------解决方案--------------------
你显示的不是a.name和b.name么 相应的列
------解决方案--------------------
第一个问题中的两个语句执行过程是一样的,为什么第一个快,可以给我例子吗
------解决方案--------------------
前两个语句速度差不多
select a.*,b.* from a,b where a.id=b.id 等同于
select a.*,b.* from a cross join b where a.id=b.id
但因为有限制条件所以相当于内连接,速度和第一句几乎没有差别
至于cyc308() 的需求比较特别,按照你的意思,你想要的连接条件根本不是a.id=b.id
a.id=b.id就是得出那个结果
你想要得是a.rowid=b.rowid,很可惜SQLServer2000没有rowid的用法
------解决方案--------------------
最好用INNER JOIN