三个表:
学生:student(s_no,name,age)
成绩表:sc(s_no,c_no,score)--score代表分数;c_no,课程号
学生销售表(道理上不通,但逻辑正确):sales(s_no,p_no,amount) --p_no,销售的产品编号;amount:销售量想查成绩大于60分,并且有销量超过100的学生记录。如何写速度才快?用exists而不用连接实现?exists比关联要快很多

解决方案 »

  1.   


    select s.* from student s inner join sc on s.s_no=sc.s_no
    inner join sales on s.s_no=sales.s_no
    where avg(sc.score)>60 and sales.amount>100
    group by s.s_no
      

  2.   

    不是平均成绩,而是只要有成绩大于60即可。用inner join也就是自然连接吧,这个效率在大数据量下很低的,假设student 1000W条,sc400万条,即使sales没数据,也是极慢的,如果只有两表相连,在p_no上建好索引,一下就查出来了,很快,我说的两表连接的时候用的是exists的写法。