发表于: 2017-04-20 13:41:59

1 1524


一天居然不能提交两次日报,只好把正常日报放在文末

这不是日报,这是一个关于SQL的语法练习

来自我们的群,感谢Java-1738提供。

create table Student(S varchar(10),Sname varchar(10),Sage datetime,Ssex nvarchar(10));

insert into Student values('01' , '赵雷' , '1990-01-01' , '男');

insert into Student values('02' , '钱电' , '1990-12-21' , '男');

insert into Student values('03' , '孙风' , '1990-05-20' , '男');

insert into Student values('04' , '李云' , '1990-08-06' , '男');

insert into Student values('05' , '周梅' , '1991-12-01' , '女');

insert into Student values('06' , '吴兰' , '1992-03-01' , '女');

insert into Student values('07' , '郑竹' , '1989-07-01' , '女');

insert into Student values('08' , '王菊' , '1990-01-20' , '女');

create table Course(C varchar(10),Cname varchar(10),T varchar(10));

insert into Course values('01' , '语文' , '02');

insert into Course values('02' , '数学' , '01');

insert into Course values('03' , '英语' , '03');

create table Teacher(T varchar(10),Tname varchar(10));

insert into Teacher values('01' , '张三');

insert into Teacher values('02' , '李四');

insert into Teacher values('03' , '王五');

create table SC(S varchar(10),C varchar(10),score decimal(18,1));

insert into SC values('01' , '01' , 80);

insert into SC values('01' , '02' , 90);

insert into SC values('01' , '03' , 99);

insert into SC values('02' , '01' , 70);

insert into SC values('02' , '02' , 60);

insert into SC values('02' , '03' , 80);

insert into SC values('03' , '01' , 80);

insert into SC values('03' , '02' , 80);

insert into SC values('03' , '03' , 80);

insert into SC values('04' , '01' , 50);

insert into SC values('04' , '02' , 30);

insert into SC values('04' , '03' , 20);

insert into SC values('05' , '01' , 76);

insert into SC values('05' , '02' , 87);

insert into SC values('06' , '01' , 31);

insert into SC values('06' , '03' , 34);

insert into SC values('07' , '02' , 89);

insert into SC values('07' , '03' , 98);

以上是插入数据的代码,与原文件不同的是mySQL需要加“;”以及第2,3表中一处“,”应改为空格

下面是题,一共40道,第一感觉是大同小异,决定做下面这4题

--18、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率

--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

--19、按各科成绩进行排序,并显示排名

--20、查询学生的总成绩并进行排名

--21、查询不同老师所教不同课程平均分从高到低显示 


题19,sc.C改02,03

select sc.C,student.Sname,sc.score

from sc inner join student

on sc.S=student.S

where sc.C='01'

order by sc.score DESC;

题20

select student.Sname,sum(score) as sumScore

from sc inner join student

on sc.S=student.S

group by sc.S 

order by sumScore DESC;

题21

select avg(score) as avgScore,sc.C,course.Cname,teacher.Tname

from sc,course,teacher

where sc.C=course.C and course.T=teacher.T

group by sc.C

order by avgScore DESC;

题18我看到是有点懵

课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率

没后面4个率,易得下解

select course.C,course.Cname,

MAX(sc.score) as maxSc,MIN(sc.score) as minSc,AVG(sc.score) as avgSc

from sc,course

where sc.C=course.C

group by sc.C;

passRate,CRate,BRate,ARate四个率解决一个,其他是一样的

妄想一步登天,失败,先来个简单的

select C,

count(*) as passCount

from sc 

where score>=60

group by C;

select C,

count(*) as CCount

from sc 

group by C;

我无法将他们组合到一起,我几乎认为我要失败了,我用了1个小时完成组合之前的部分,然后1个小时我都毫无进展,直到我看到了这个函数(W3C的SQL教程没提)

SUM(case...then..else..end)

这应该能解决了。

select course.C,course.Cname,

MAX(sc.score) as maxSc,MIN(sc.score) as minSc,AVG(sc.score) as avgSc,

sum(case when sc.score>=60 then 1 else 0 end)/count(*) as passRate

from sc,course

where sc.C=course.C

group by sc.C;


最后

获益良多,再次感谢Java-1738。时间关系没写ABCRate但是一样的,不过我还是有疑问能不能18用我最开始想的组合相除的方式来做,它的语法是怎样的?跪求回复


今日完成

1、进行了mySQL语法的学习及练习,详见上一日报

2、添加表“enrolledlist(已报名名单)”如图

此表由stuID对student表产生唯一对应关联,对stuID建立唯一索引。

关于外键的建立,详见问题1

3、JDBC初步成功,完成MysqlDemo如图,计划改为SQLbasic以做DAOImpl的通用部分

4、学习Junit,尝试对MysqlDome写一个test失败,只好写一个简单的(水一下),如下:

如果有一个有构造函数的对象,我可以测试其有返回值的函数,但是一个无构造函数的对象或void的函数能用Junit测试吗,这需要我进一步的学习。

明日计划

oh,我昨天计划的是什么来着,mdzz根本没完成啊

写完简单的DAOImpl,编写对应的单元测试代码

收获

SQL select及各函数熟悉一次,JDBC主要是插入语句的值格式试坑成功,Junit初步学习。

问题

1、一般来说,应该是需要对stuID建立外键约束到student.ID。纠结查阅网上资料,外键并不会带来多少方便,而且极大降低了大数据下的运行速度。不过目前在我能力之外,不做深入,暂不建外键。

2、假想我明天需要对DAOImpl进行单元测试,返回值都有,但构造函数是没有的,我该如何进行?

3、非正常篇的最后问题。


另:我可能需要一+本书,求推荐。服务器我们是推荐买谁的,什么操作系统的呢?



返回列表 返回列表
评论

    分享到