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 ;
在这里插入图片描述

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值