我用Mysql查询优化了数据库,工作效率

多维立体精准白癜风治疗方案 http://m.39.net/baidianfeng/a_6188539.html

今日分享开始啦,请大家多多指教~

1.联合查询

定义及数据准备

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:

关于笛卡尔积通过一个例子理解:

如在a表中有a1,a2,a3,在b表中有b1,b2,b3等数据,因此笛卡尔积就为

a1b1,a1b2,a1b3

a2b1,a2b2,a2b3,

a3b1,a3b2,a3b3

表a中的所有数据都能跟表b的所有数据有所对应;

首先把准备好三张表和其对应的数据:

班级表:

学生表:

课程表:

分数表:

2.内连接

通过两张表共有的列来筛选信息,达到尽快查询的目的。

语法:

select字段from表1别名1[inner]join表2别名2on链接条件and其他条件

select字段from表1别名1,表2别名2where链接条件and其他条件

2.1例子1:

查询许仙的成绩;

具体看看整个查询的过程;

首先直接进行学生表和分数表的链接查询:

select*fromstudentinnerjoinscore;

以及

查询到的表中共有行数据,每个人都对应了成绩表中的所有成绩,也就是说每个人有了21个成绩,所以9个学生有条数据,与上述的笛卡尔积相互对应起来。

接下来要给查询加上条件:我们知道在score表中,有student_id和course_id,因此要从score表中筛选出sutdnet_id和student中的id相等的分数。

select*fromstudentinnerjoinscoreonstudent.id=score.student_id;

此时,我们看到的表中,所有人的成绩和本人都对应起来,现在就可以去筛选出许仙了;

select*fromstudentinnerjoinscoreonstudent.id=score.student_idandstudent.id=4;

到这一步其实查询已经结束了,我们已经获得了许仙的各科成绩了,但是只有课程id不知道课程的名字。

进行改进:

selectstu.sn,stu.name,sco.score,cou.namefromstudentstuinnerjoinscorescoonstu.id=sco.student_id

innerjoincourseonscore.course_id=course.idandstudent.id=4;

分析上述代码,要查询的是学生表中的学生sn和name,以及成绩表中的score,以及课程表中的name;

首先通过分数表中的学生id和学生表中的id对应查到当前每个学生的成绩,然后通过分数表中的课程id在课程表中查询相对应的课程名;

上述代码也可以不使用innerjoin来查询:

2.2查询所有学生的总成绩

重点


转载请注明:http://www.aierlanlan.com/grrz/2178.html