详细:select Sname,SC.S# ,avg(score)     
from Student,SC     
where Student.S#=SC.S# 
group by SC.S#,Sname 
having    avg(score)>85; 
和Left Join的区别还有,为什么用","的时候,不加where也可以用

解决方案 »

  1.   

    逻辑完全不一样...没有where就是给了两个完全没关系的表,加了where还得看你的condition跟两个表是什么关系...你这个例子相当于inner join,你说有啥区别...
      

  2.   

    应该是left join 和inner join的区别
      

  3.   

    简单点说:
    逗号表示两个表都存在的记录才显示出来;
    left join 表示只要左边表里面有符合条件的数据就可以查找出来
    你可以参考一下数据库的几个范式说明为什么用","的时候,不加where也可以用?
    不加where条件可以用,但是这样的数据查出来有什么用吗?
      

  4.   

    没有where就是给了两个完全没关系的表也可以组合成一个表
    加了where两个表根据关系进行匹配,默认:inner join 
    inner join是全链接,两个表中都必须匹配上
    left join是左链接,left join左边表里的数据都会读出来,右边匹配上了就显示,没有就不显示。
    欢迎光临我的博客
      

  5.   

    where = inner join
    left join 左边表有的全部显出来,右边表只去匹配左表
      

  6.   

    Left Join和right join是一样的,习惯问题
    其它的不一样
      

  7.   

    ,号是进行笛卡尔积,然后再筛选。几个例子吧,假设有1000个学生,对应10个教师,每一个学生都有一名班主任。那么进行笛卡尔积,就是先找出1万个匹配,然后再去筛选出所谓的where条件的记录。而进行join则是最多只去找出1千个而已。专业的数据库编程人员,不应该会去随便写笛卡尔积的代码的,否则你就是没有经过合格的学校的学习。
    至于说Sql Server有没有对此语句进行优化,我不知道(即使是优化也要花费巨大的代价来分析好几十种可能性)。对于标准SQL规范而言,是不考虑系统有没有额外去优化的,要求专业的开发人员在写sql时就应该懂得这个差别。
      

  8.   

    楼上说的不对,join和where中关联的执行效率是一样的,甚至where中关联的执行效率更高,这是我实际数据库编程的结论。至于原因,因为数据库对这个优化过了,如你所说,虽然join后的结果很少,但是join本身的匹配是非常耗时的操作,只是产生的结果少而已,但是如果我们改为了where中关联,情况就不同了,数据库会先优化这个where,把不符合条件的记录去掉,剩下满足条件的记录进行关联,这样关联的效率是比全部数据先关联后筛选要快得多。
    因此一般使用where中关联会比join更好。
      

  9.   

    当然有区别,Left Join是左外连接就是当两个表中其中一个表有空值,此时能把空值也显示出来而","不能显示!