MySql

Posted 离落想AC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql相关的知识,希望对你有一定的参考价值。

mysql

MySql版本:MySQL 8.0

select…from…where基本子句的使用。

①在student表中查询出生日期在2003年以前的学生的学号、姓名、电话和年龄。

mysql> select studentno 学号,sname 姓名,

-> phone 电话,year(now())-year(birthdate) 年龄

-> from student

-> where birthdate<‘2003-01-01’;


② 在score表中查询期中成绩中有高于90的学生的学号和课程号,并按照学号排序。

mysql> select distinct studentno,courseno

-> from score

-> where daily>90

-> order by studentno;

③ 查询学号分别为的18122221324、18137221508和18137221508的学生学号、课程号、平时成绩和期末成绩。

mysql> select studentno,courseno ,daily ,final

-> from score

-> where studentno in(‘18122221324’,‘18137221508’,‘18137221508’);


④查询选修课程号为c05109 的学生学号和期末成绩,并且要求平时成绩在85到100之间。

mysql> select studentno, final

-> from score

-> where courseno=‘c05109’ and daily between 85 and 100;


⑤在student表中显示所有姓许的学生的姓名、生日和Email。

mysql> select sname, birthdate, Email

-> from student

-> where sname like ‘许%’;

⑥ 在score表中显示期中高于85分、期末成绩高于90分的学生学号、课程号和成绩。

mysql> select studentno,courseno,daily,final

-> from score

-> where daily >=85 and final >= 90;

⑦ 查询计算机学院专业为"软件工程"或"网络技术"的教师的教师号、姓名和职称。

mysql> select teacherno,tname, prof

-> from teacher

-> where department=‘计算机学院’

-> and (major ='软件工程’or major =‘网络技术’);

排序、分组和限定记录的查询。

① 在student表中输出高于800分的学生的学号、姓名、电话和入学成绩,并按照入学成绩的降序排列。

mysql> select studentno ,sname ,phone,entrance

-> from student

-> where entrance>800

-> order by entrance desc;

tips: desc为降序。


②在score表中查询总评成绩大于85分的学生的学号、课程号和总评成绩,并先按照课程号的升序、再按照总评成绩的降序排列。总评成绩计算公式如下:

总评成绩=daily0.2+final0.8

mysql> select courseno,daily 0.2+ final0.8 as ‘总评’,studentno

-> from score

-> where daily 0.2+ final0.8>85

-> order by courseno, daily 0.2+ final0.8 desc;


③利用group by子句对score表数据分组,显示每个学生的学号和平均总评成绩。总评成绩计算公式如下:

总评成绩=daily0.3+final0.7

mysql> select studentno , round(avg(daily0.3+final0.7),2) as avg1

-> from score

-> group by studentno;


④使用group by关键字和group_concat()函数对score表中的courseno字段进行分组查询。可以查看选学该学生选修的课程号。

mysql> select studentno 学号,group_concat(courseno) 选课学生

-> from score

-> group by studentno ;

⑤查询选课在2门以上且各门课程期末成绩均高于85分的学生的学号及其总成绩,查询结果按总成绩降序列出。

mysql> select studentno 学号,sum(daily0.3+final0.7) as ‘总分’

-> from score

-> where final>=85

-> group by studentno

-> having count(*)>=2

-> order by sum(daily0.3+final0.7) desc;

⑥查询score表中,期末成绩final高于90分的,按照平时成绩daily进行升序排列,从编号1开始,查询3条记录。

mysql> select * from score

-> where final>90

-> order by daily asc

-> limit 1,3;


(3)聚合函数的应用。

①查询score表中学生的期末总成绩大于75分的学生学号、总成绩及平均成绩。

mysql> select studentno 学号, sum(final) 总分, avg(final)平均分

-> from score

-> group by studentno

-> having sum(final)>75

-> order by studentno;

②查询选修课程号为c05109号课程的期末最高分、最低分及之间相差的分数。

mysql> select max(final) 最高分, min(final) 最低分,

-> max(final)- min(final) as 分差

-> from score

-> where (courseno = ‘c05109’);

③查询score表中每个学生的期末平均值和所有成绩的平均值

mysql> select studentno 学号,avg(final) 平均分

-> from score

-> group by studentno with rollup;

(4)多表连接

① 查询选修课程号为c05109的学生的学号、姓名和期末成绩。

mysql> select student.studentno,sname,final

-> from student inner join score

-> on student.studentno= score.studentno

-> where score.courseno = ‘c05109’;



②利用左外连接方式查询学生的学号、姓名、平时成绩和期末成绩。

mysql> select student.studentno,sname,daily,final

-> from student left join score

-> on student.studentno=score.studentno;


③利用右外连接方式查询教师的排课情况。

mysql> select teacher.teacherno,tname, major, courseno

-> from teacher right join teach_course

-> on teacher.teacherno = teach_course.teacherno;

④查询19级学生的学号、姓名、课程名、期末成绩及学分。

mysql> select student.studentno,sname,cname,final,round(period/16,1)

-> from score join student on student.studentno=score.studentno

-> join course on score.courseno=course.courseno

-> where left(student.studentno,2)=‘19’;

⑤查询期末成绩高于90分、总评成绩高于85分的学生的学号、课程号和总评成绩。

mysql> select TT.studentno 学号 ,TT.courseno 课程号 ,

-> TT.final0.8+TT.daily0.2 总评

-> from (select * from score where final>90) as TT

-> where TT.final0.8+TT.daily0.2>85;


(5)子查询

①查询期末成绩比选修该课程平均期末成绩低的学生的学号、课程号和期末成绩。

mysql> select studentno,courseno,final

-> from score as a

-> where final < (select avg(final)

-> from score as b

-> where a.courseno=b.courseno

-> group by courseno );


②获取期末成绩中含有高于90分的学生的学号、姓名、电话和Email。

mysql> select studentno,sname,phone,Email

-> from student

-> where studentno in ( select studentno

-> from score

-> where final>90);



③查找score表中所有比c05103课程期末成绩都高的学号、姓名、电话和期末成绩。

mysql> select student.studentno,sname, phone,final

-> from score inner join student

-> on score.studentno= student.studentno

-> where final >all

-> (select final from score where courseno= ‘c05103’);

④将student表中1999年以后出生的学生记录添加到stud表中。

mysql> insert into stud

-> ( select * from student

-> where birthdate>=‘1999-12-31’);

⑤查询student表中学生电话号码尾数为8的学生部分信息。

mysql> select studentno, sname, phone, Email

-> from student

-> where phone regexp ‘8$’;

(6)创建和管理视图

①在teacher表上创建一个简单的视图,视图名称为v_teacher。

mysql> create view v_teacher

-> as select * from teacher;

mysql> select * from v_teacher;

②在student表、course表和score表上创建一个名为stu_score的视图。视图中保留19级的女生的学号、姓名、电话、课程名和期末成绩。

mysql> create view stu_score

-> as select student.studentno, sname, phone, cname,final

-> from score join student on student.studentno=score. studentno

-> join course on course.courseno=score.courseno

-> where sex=‘女’ and left(student.studentno,2)= ‘19’;

mysql> select * from stu_score;

③创建视图v_teach,统计材料学院的教师中的不是教授或副教授的教师号、教师名和专业。

mysql> create view v_teach

-> as select teacherno, tname, major

-> from teach_view1

-> where prof not like ‘%教授’ and department=‘材料学院’;

④查看视图定义情况。

mysql>show create view stu_score;

⑤修改视图v_teach,统计材料学院的教师中的教授和副教授的教师号、教师名、和专业,并在视图名后面指明视图列名称。

mysql> alter view v_teach (教师号,教师名,专业)

-> as select teacherno, tname, major

-> from teach_view1

-> where prof like ‘%教授’ and department=‘材料学院’ ;

mysql> select * from v_teach;

⑥ 删除视图v_teach命令:

mysql> drop view v_teach;

执行命令之前:


执行命令之后:

(7)利用视图修改表数据。

① 创建视图view_avg,统计各门课程平均成绩,并按课程名称升序排列。

mysql> create view view_avg

-> as select cname 课程名, avg(final) 平均成绩

-> from score join course on score.courseno= course.courseno

-> group by cname asc;




mysql> select * from view_avg;

②通过视图v_teacher,对基表teacher进行插入、更新和删除数据的操作。

mysql> insert into v_teacher (teacherno,tname,major,prof,department)

-> values (‘t07027’ , ‘陶颐年’ , ‘合金技术’ , ‘副教授’ , ‘材料学院’ );



mysql> update v_teacher set prof = ‘副教授’ where teacherno = ‘111’;


mysql> delete from v_teacher where teacherno = ‘t07027’;



③ 视图stu_score依赖于源表student、course和score等3张表,包括studentno、sname、 phone、cname和final等5个字段,通过stu_score修改基本表student中的学号为19120000111的电话号码。

mysql> update stu_score set phone=‘133123456777’

-> where studentno =‘19120000111’;


mysql> select studentno,sname, phone from student

-> where studentno =‘19126113307’ ;

tips: stu_score是针对19级的视图,验证能否修改18级数据。

mysql> update stu_score set phone=‘135123456777’

-> where studentno =‘18125121107’;

④ 修改v_teacher的视图定义,添加with check option选项。

mysql> alter view v_teacher

-> as

-> select * from teacher

-> where department = ‘计算机学院’

-> with check option ;

以上是关于MySql的主要内容,如果未能解决你的问题,请参考以下文章

实验六

实验6

实验6 结构体共用体与枚举

实验六

实验6

实验六