本次试题设计两个表:student、exam函数
student表spa
exam表设计
1、写一条SQL语句,按学号排序输出数学成绩code
SELECT s.sno sno,score FROM exam e,student s WHERE e.`subject` = '数学' AND e.name = s.name GROUP BY s.sno
2、写一条SQL语句,按学号排序,输出:学号,姓名,总分,平均分blog
SELECT sno,s.`name`,SUM(score) ss,AVG(score) gg FROM exam e,student s WHERE e.`name` = s.`name` GROUP BY `name` ORDER BY ss
3、写一条SQL语句,查询出数学考试成绩最高的学生学号和姓名排序
SELECT sno,exam.name name,score FROM exam,student WHERE (exam.`subject` = '数学') AND (exam.name = student.name) ORDER BY exam.score DESC LIMIT 0,1;
4、写一条SQL语句,查询出每门课都大于80分的学生姓名索引
方法一:ALL()函数数学
思路:查找出每一个人全部科目是否都大于80class
SELECT DISTINCT NAME FROM exam a WHERE 80 < ALL(SELECT score FROM exam e WHERE e.name = a.name );
方法二:not exists 字段方法
思路:排除掉存在学科分数低于80的学生,剩下的就是全部学科分数都大于80的学生
SELECT DISTINCT NAME FROM exam a WHERE NOT EXISTS (SELECT name FROM exam e WHERE e.name = a.name AND e.score < 80 );
方法三:not in 字段
思路:同上
SELECT DISTINCT NAME FROM exam WHERE NAME NOT IN (SELECT NAME FROM exam WHERE score<=80)
方法四:having 字段
思路:过滤出学科中最低分数大于80的学生
SELECT name FROM exam GROUP BY name HAVING min(score) > 80
5、张三退学后,请写相关的SQL语句,注意严谨
DELETE FROM exam WHERE name = '张三'; DELETE FROM student WHERE name = '张三';
DELETE exam,student FROM exam LEFT JOIN student ON exam.name = student.name WHERE exam.name = '张三' ;
6、你会对该表哪些字段作索引
id - 惟一索引
7、这两个表的设计,有哪些能够改进的地方
student表中sno字段能够改为‘studentID’,更语义化,
exam表中取消name字段及该列数据,改用student中sno学号字段代替,更易于检索