编程中遇到的SQL困惑总结

来源:互联网 发布:软件联盟 编辑:程序博客网 时间:2024/05/19 09:03

坚信唯有总结,才能真正深刻掌握知识,所以最近在逼自己写博客。

周六,大雨倾盆,是该写点东西了,特意选了一直搞的不太懂,最近略懂的SQL来写,这些内容很多做开发两三年的人也可能理解的不清楚的,可能不全,恳请大家指正。


首先,讲下SQL语句执行顺序。

举例说明:

1.select  s.no,min(s.name),sum(sc.score)   -------------- f

from student s left join sc on s.sno = sc .sno  ----------- a

where s.class = '1405'   --------------------------------------- b

group by s.sno  ------------------------------------------------- c

having sum(sc.score) > 500  -------------------------------- d 

order by s.sno asc; --------------------------------------------  e

通过这条sql查询出1405班所有科目总成绩大于500分所有学生,查询出的信息包括学生的学号、名字、总成绩,按学号升序排列。

执行顺序见上英文标示。

其实语序是不用记的,执行流程很容易理解:先粗略找到目标范围(a),再过滤(b、c、d),确定好目标后再处理显示效果(e、f)。


a步骤初步确定查询的数据来自student表和sc表的连接结果;

b步骤进行初步筛选,只选出1405班级的数据,考虑到sql性能,这一步要尽量将数据的范围缩小,这样后面的操作的耗时才小。

c、d步骤是进行聚合处理,将所有记录中学号相同的记录合成一条记录,基于此,合成的记录的字段不能再是合成前的具体字段,而是集体数据经过某种逻辑运算得出的结果,如表明总体、最高、最低情况的字段等。所以,如果在select后,加上sc的cno课程号这个字段,sql会报错。经过c、d步骤数据过滤完成。

e步骤对最终数据进行按学号升序排列。

f步骤标明要显示的字段集。


语序虽然很简单,这么啰嗦,也是希望能对sql执行机制有更明朗的认识。


未完待续...



0 0
原创粉丝点击