select c.uid,c.name,c.age,c.sex, b.cid,b.cname,b.credit,a.time,a.score from exams a innerjoin course b on a.cid = b.cid innerjoin student c on a.uid = c.uid where a.uid =1and a.cid =2;
测试结果:
1 2 3 4 5 6 7 8 9 10 11 12
mysql>select c.uid,c.name,c.age,c.sex, b.cid,b.cname,b.credit,a.time,a.score from exams a ->innerjoin course b on a.cid = b.cid ->innerjoin student c on a.uid = c.uid ->where a.uid =1and a.cid =2; +-----+----------+-----+-----+-----+-----------------+--------+------------+-------+ | uid | name | age | sex | cid | cname | credit |time| score | +-----+----------+-----+-----+-----+-----------------+--------+------------+-------+ |1| zhangsan |18| M |2| C++高级课程 |10|2021-04-10|80| +-----+----------+-----+-----+-----+-----------------+--------+------------+-------+ 1rowinset (0.02 sec)
mysql>
如果是查询zhangsan同学的详细信息,所有选修课程的信息和对应的成绩,则sql应该如下:
1 2 3 4
select c.uid,c.name,c.age,c.sex, b.cid,b.cname,b.credit,a.time,a.score from exams a innerjoin course b on a.cid = b.cid innerjoin student c on a.uid = c.uid where a.uid =1;
测试结果:
1 2 3 4 5 6 7 8 9 10 11 12 13
mysql>select c.uid,c.name,c.age,c.sex, b.cid,b.cname,b.credit,a.time,a.score from exams a ->innerjoin course b on a.cid = b.cid ->innerjoin student c on a.uid = c.uid ->where a.uid =1; +-----+----------+-----+-----+-----+-----------------+--------+------------+-------+ | uid | name | age | sex | cid | cname | credit |time| score | +-----+----------+-----+-----+-----+-----------------+--------+------------+-------+ |1| zhangsan |18| M |1| C++基础课程 |5|2021-04-09|99| |1| zhangsan |18| M |2| C++高级课程 |10|2021-04-10|80| +-----+----------+-----+-----+-----+-----------------+--------+------------+-------+ 2rowsinset (0.02 sec)
mysql>
如果是要查看课程id为2,且成绩大于等于90的信息
1 2 3 4
select c.uid,c.name,c.age,c.sex, b.cid,b.cname,b.credit,a.time,a.score from exams a innerjoin course b on a.cid = b.cid innerjoin student c on a.uid = c.uid where a.cid =2and a.score >=90;
测试结果:
1 2 3 4 5 6 7 8 9 10 11 12 13
mysql>select c.uid,c.name,c.age,c.sex, b.cid,b.cname,b.credit,a.time,a.score from exams a ->innerjoin course b on a.cid = b.cid ->innerjoin student c on a.uid = c.uid ->where a.cid =2and a.score >=90; +-----+---------+-----+-----+-----+-----------------+--------+------------+-------+ | uid | name | age | sex | cid | cname | credit |time| score | +-----+---------+-----+-----+-----+-----------------+--------+------------+-------+ |2| gaoyang |20| W |2| C++高级课程 |10|2021-04-10|90| |3| chenwei |22| M |2| C++高级课程 |10|2021-04-10|93| +-----+---------+-----+-----+-----+-----------------+--------+------------+-------+ 2rowsinset (0.00 sec)
mysql>
通过课程分组,计算每个课程的选课人数,按降序排序
1 2 3 4
select b.cid,b.cname,b.credit,count(*) number from exams a innerjoin course b on a.cid = b.cid groupby a.cid orderby number desc;
测试结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
mysql>select b.cid,b.cname,b.credit,count(*) number from exams a ->innerjoin course b on a.cid = b.cid ->groupby a.cid ->orderby number desc; +-----+-----------------+--------+--------+ | cid | cname | credit | number | +-----+-----------------+--------+--------+ |2| C++高级课程 |10|4| |3| C++项目开发 |8|3| |4| C++算法课程 |12|3| |1| C++基础课程 |5|2| +-----+-----------------+--------+--------+ 4rowsinset (0.00 sec)
mysql>
通过课程分组,计算每个课程成绩大于等于90分的选课人数,按降序排序
1 2 3 4 5
select b.cid,b.cname,b.credit,count(*) number from exams a innerjoin course b on a.cid = b.cid where a.score >=90 groupby a.cid orderby number desc;
测试结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
mysql>select b.cid,b.cname,b.credit,count(*) number from exams a ->innerjoin course b on a.cid = b.cid ->where a.score >=90 ->groupby a.cid ->orderby number desc; +-----+-----------------+--------+--------+ | cid | cname | credit | number | +-----+-----------------+--------+--------+ |4| C++算法课程 |12|3| |2| C++高级课程 |10|2| |1| C++基础课程 |5|1| |3| C++项目开发 |8|1| +-----+-----------------+--------+--------+ 4rowsinset (0.01 sec)
mysql>
cid=2这门课程考试成绩的最高分的学生信息和课程信息
1 2 3 4 5 6 7 8 9 10
select c.uid, c.name, c.age, c.sex, b.cid, b.cname, b.credit, a.score from exams a innerjoin course b on a.cid = b.cid innerjoin student c on a.uid = c.uid where a.cid =2 and a.score = ( selectmax(score) from exams where cid =2 );
select b.cid,b.cname,b.credit,ROUND(AVG(a.score), 2) average_score from exams a innerjoin course b on a.cid = b.cid groupby a.cid orderby average_score desc;