问题一.
表达式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 并不存在数据!如果不想使用默认上行的数据应该如何解决?
多谢!

解决方案 »

  1.   

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

  2.   

    我用了isnull()为什么没有效果呢?
      

  3.   

    例如: select a.id,isnull(b.id,0) from a inner join b on a.id=b.id
    可结果并没有什么改变?
      

  4.   

    你显示的不是a.name和b.name么  相应的列
      

  5.   

    a表
    id name
    1  cc1
    2  cc2
    3  cc3
    3  cc4
    --------
    b表
    id name
    1 cc11
    2 cc22
    3 cc33
    表达式1:select a.*,b.* from a inner join b on a.id=b.id
    结果:
    1  cc1  1 cc11
    2  cc2  2 cc22
    3  cc3  3 cc33
    3  cc4  3 cc33 '问题就是这个cc33在表b并没有存在!如何才能将其显示成null或其他自定义的值?
      

  6.   

    前两个语句速度差不多
    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的用法