文章目录
- MySQL实验
- 实验一:利用SQL语言完成数据库定义
- 实验二:利用SQL语言完成数据库维护
- 实验题目1:修改“CS”的学生成绩,不及格学生的成绩增加5分。
- 实验题目2:删除“CS”系学生的成绩记录。(不小心写成CS的了。。。)
- 自造题目3:删除所有2号课程的成绩
- 自造题目4:选修cno=6的课程的成绩中高于90分的都扣5分。
- 实验三:利用SQL语句完成数据库查询
- 实验题目1:查询平均成绩大于80的学生姓名。
- 实验题目2:查询课程成绩大于课程平均成绩的选课信息,显示学生姓名、课程名称和成绩。
- 实验题目3:查询至少选修了C1和C2课程的学生名单。
- 实验题目4:查询选修了C1课程而没有选修C2课程的学生名单。
- 实验题目5:统计每门课程成绩大于80分的学生数。
- 实验题目6:统计计算机系CS学生的平均分
- 实验题目7:统计至少选修了两门课程的学生数
- 实验题目8:查询至少选修了两门课程的学生名单
- 实验题目9:查询没有被选修的课程信息
- 实验题目10:查询没有选修C1课程的学生信息
- 实验题目11:统计没有选修C1课程的学生人数
- 实验题目12:查询平均分最高的课程信息
- 实验题目13:查询平均分最高的课程的选课信息(学号,姓名,课程名程,成绩)
- 实验题目14:查询平均分最高的学生所在院系。
- 实验题目15:统计学生平均选修课程数。
- 实验题目16:统计各院系学生平均选课数。
- 实验题目17:统计每门课程的选课人数,最高分,平均分和最低分。
- 实验题目18:查询平均分75以上,并且没有不及格成绩的学生信息。
- 实验四:利用SQL语句完成视图设计
- 插入数据随机生成器
MySQL实验
实验一:利用SQL语言完成数据库定义
建立数据库结构,完成数据库中的基本表的建立,同时将表中数据进行添加。
实验题目1:建立数据库结构,完成数据库中的基本表的建立
实验代码及注释:
建立Student表
Course表之前已建立
建立Sc表
实验题目2:修改表结构
实验代码及注释:
Student表增加新的属性s_entrance
Sc表grade属性的类型改为int
删除student表中s_entrance属性
实验题目3:插入数据
实验代码及注释:
Student表插入数据(中间错误是因为忘更改学号了)
Course表插入数据
Sc表插入数据
mysql> insert sc(sno,cno,grade) values('201215121','7',50);
mysql> insert sc(sno,cno,grade) values('201215121','4',45);
mysql> insert sc(sno,cno,grade) values('201215121','6',55);
实验二:利用SQL语言完成数据库维护
对于已完成数据库中数据进行修改、删除操作。
实验题目1:修改“CS”的学生成绩,不及格学生的成绩增加5分。
实验代码及注释:
mysql> update sc
-> set grade=grade+5
-> where 'cs'=
-> (select sdept
-> from student
-> where student.sno=sc.sno and sc.grade<60 );
实验题目2:删除“CS”系学生的成绩记录。(不小心写成CS的了。。。)
实验代码及注释:
mysql> delete
-> from sc
-> where 'CS'=
-> (select sdept
-> from student
-> where student.sno=sc.sno);
自造题目3:删除所有2号课程的成绩
实验代码及注释:
mysql> delete
-> from sc
-> where cno=2;
自造题目4:选修cno=6的课程的成绩中高于90分的都扣5分。
实验代码及注释:
mysql> update sc
-> set grade=grade-10
-> where grade>90 and cno=6;
实验三:利用SQL语句完成数据库查询
采用查询语句对于数据库中数据进行查询或统计功能的操作。
实验题目1:查询平均成绩大于80的学生姓名。
实验代码及注释:
实验题目2:查询课程成绩大于课程平均成绩的选课信息,显示学生姓名、课程名称和成绩。
实验代码及注释:
mysql> select sname,cname,grade
-> from student,sc,course
-> where student.sno=sc.sno
-> and course.cno=sc.cno
-> and grade>
-> (select avg(grade)
-> from sc
-> where course.cno=cno);
实验题目3:查询至少选修了C1和C2课程的学生名单。
实验代码及注释:
mysql> select sname
-> from student
-> where exists
-> (select *
-> from sc
-> where sno=student.sno and cno=1)
-> and exists
-> (select *
-> from sc
-> where sno=student.sno and cno=2);
实验题目4:查询选修了C1课程而没有选修C2课程的学生名单。
实验代码及注释:
mysql> select sname
-> from student
-> where exists
-> (select * from sc where student.sno=sno and cno=1)
-> and not exists
-> (select * from sc where student.sno=sno and cno=2);
实验题目5:统计每门课程成绩大于80分的学生数。
实验代码及注释:
mysql> select cno,count(sno)
-> from sc
-> where grade>80
-> group by cno;
实验题目6:统计计算机系CS学生的平均分
实验代码及注释:
mysql> select avg(grade)
-> from sc
-> where sno in
-> (select sno
-> from student
-> where sdept='CS');
实验题目7:统计至少选修了两门课程的学生数
实验代码及注释:
mysql> select count(sname)
-> from student
-> where exists
-> (select *
-> from sc
-> where student.sno=sno
-> group by sno
-> having count(cno)>2);
实验题目8:查询至少选修了两门课程的学生名单
实验代码及注释:
mysql> select sname
-> from student
-> where exists
-> (select *
-> from sc
-> where student.sno=sno
-> group by sno
-> having count(cno)>=2);
实验题目9:查询没有被选修的课程信息
实验代码及注释:
mysql> select cno,cname,cpno,ccredit
-> from course
-> where not exists
-> (select *
-> from sc
-> where course.cno=cno);
实验题目10:查询没有选修C1课程的学生信息
实验代码及注释:
mysql> select *
-> from student
-> where not exists
-> (select *
-> from sc
-> where cno=1 and sno=student.sno);
实验题目11:统计没有选修C1课程的学生人数
实验代码及注释:
mysql> select count(sno)
-> from student
-> where not exists
-> (select *
-> from sc
-> where cno=1 and sno=student.sno);
实验题目12:查询平均分最高的课程信息
实验代码及注释:
mysql> select *
-> from course
-> where cno=
-> (select cno
-> from sc
-> group by cno
-> having avg(grade)>= all
-> (select avg(grade)
-> from sc
-> group by cno));
实验题目13:查询平均分最高的课程的选课信息(学号,姓名,课程名程,成绩)
实验代码及注释:
mysql> select sc.sno,sname,cname,grade
-> from sc,student,course
-> where sc.sno=student.sno
-> and course.cno=sc.cno
-> and sc.cno=7;
这个课程号是我上一问求出来的,大家根据自己的数据课程号可能不同。我只是懒得上面再重复一遍了。
实验题目14:查询平均分最高的学生所在院系。
实验代码及注释:
mysql> select sdept
-> from student
-> where sno=
-> (select sno
-> from sc
-> group by sno
-> having avg(grade)>= all
-> (select avg(grade)
-> from sc
-> group by sno));
实验题目15:统计学生平均选修课程数。
实验代码及注释:
mysql> select count(*)/count(distinct sno) from sc;
实验题目16:统计各院系学生平均选课数。
实验代码及注释:
mysql> select sdept,count(*)/count(distinct student.sno)
-> from student,sc
-> where student.sno=sc.sno
-> group by sdept;
实验题目17:统计每门课程的选课人数,最高分,平均分和最低分。
实验代码及注释:
mysql> select cno,count(*),max(grade),avg(grade),min(grade)
-> from sc
-> group by cno;
实验题目18:查询平均分75以上,并且没有不及格成绩的学生信息。
实验代码及注释:
mysql> select *
-> from student
-> where sno in
-> (select sno
-> from sc
-> group by sno
-> having avg(grade)>75
-> and min(grade)>60);
实验四:利用SQL语句完成视图设计
对于已有数据库进行建立相应视图,同时在视图上进行相应的查询、修改、删除等操作
实验题目1:查询没有选修C1课程的学生信息
实验代码及注释:
创建视图:
mysql> create view not_c1
-> as
-> select *
-> from student
-> where not exists
-> (select *
-> from sc
-> where cno=1 and sno=student.sno);
查询视图:
mysql> select sname
-> from not_c1
-> where sage=18;
修改视图:
mysql> update not_c1
-> set sage=sage+1
-> where sdept='MA';
删除视图:
mysql> drop view not_c1;
实验题目2:查询平均分75以上,并且没有不及格成绩的学生信息。
实验代码及注释:
创建视图
mysql> create view good_stu
-> as
-> select *
-> from student
-> where sno in
-> (select sno
-> from sc
-> group by sno
-> having avg(grade)>75
-> and min(grade)>60);
插入新的数据
mysql> insert sc(sno,cno,grade) values('201215127','7',100);
视图自动更新
mysql> select * from good_stu;
查询视图:
mysql> select *
-> from good_stu
-> where sage<20;
删除视图:
mysql> drop view good_stu;
实验题目3:统计每门课程的选课人数,最高分,平均分和最低分。
实验代码及注释:
创建视图:
mysql> create view final(cno,countt,maxx,avgg,minn)
-> as
-> select cno,count(*),max(grade),avg(grade),min(grade)
-> from sc
-> group by cno;
该视图不可更改!
查询视图:
mysql> select *
-> from final
-> where countt>=4;
实验题目4:查询选修了C1课程而没有选修C2课程的学生名单。
实验代码及注释:
创建视图:
mysql> create view c2_yes
-> as
-> select *
-> from student
-> where exists
-> (select * from sc where student.sno=sno and cno=1)
-> and not exists
-> (select * from sc where student.sno=sno and cno=2);
更新视图:
删除所有选修2的记录。
mysql> delete
-> from sc
-> where cno=2;
插入数据随机生成器
生成sc表插入数据,输出格式是可以直接用MySQL运行的。
生成一个在本cpp同目录下的sctxt.out文件,用记事本打开即可。
生成数据随机,可能不符合范式,可能不均匀,自行更改。
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
typedef long long ll;
int main()
{
freopen("sctxt.out","w",stdout);
srand((int)time(0));
for(int i=1;i<=20;i++)
{
int sno=rand()%6,cno=rand()%8,grade=rand()%100;//学号末尾1~6,课程号1~7,成绩百分制,可自行更改
if(sno==0) sno=1;
if(cno==0) cno=1;
cout<<"insert sc(sno,cno,grade) values(\'20121512"<<sno<<"\',"<<cno<<","<<grade<<");"<<endl;
}
}