SQL 综合练习三

121 阅读5分钟

为一个中学的考试建立一个初步的数据库管理系统 其中初步设计包含三张表,请按下列具体要求建表、输入数据、并查询结果

具体设计要求:

建一数据库名为:StuQa (create database StuQa)

其中包括三张表

学生基本信息表 表名:StuInfo

StuId char(10) 主键-- 学号

FName varchar(50) 非空        -- 姓名

StuGen char(2)    非空-- 性别

StuAdds varchar(50)非空--地址

StuEmail varchar(50) check 约束 --Email

 

课程表:Course

CourseId   char(10) 主键      --课程号

CourseName  varchar(50)     not null 课程名

 

学生成绩表:Score

ScoreId  int 标识列 (起始1,增量1)主键 --成绩记录号

CourseId   char(10) 课程号外键

StuId  char(10)   学生号外键

Score int not null –分数

 

课程表内容:

课程号       课程名

F001          语文

F002          数学

F003          英语

F004          历史

 

学生表内容:

学号        姓名    性别     地址     Email

M001       张赛     男      上海      sai.zhang@sina.com

M002       王强     男      上海      qing.wang@sina.com

M003       王五     男      上海      wu.wang@sina.com

M004       李四     男      上海      si.li@sina.com

M005       阳阳     男      上海      yangyang@sina.com

M006       虎子     男      上海      huzi@sina.com

M007       夏雪     女      北京      xiaxue@sina.com

M008       璐璐     女      深圳      lulu@sina.com

M009       姗姗     女      广州      shanshan@sina.com

M010       香奈儿   女      重庆      xiangerer@sina.com

 

成绩表内容:

课程号 学号 分数

F001    M001   78

F002    M001   67

F003    M001   89

F004    M001   76

F001    M002   89

F002    M002   67

F003    M002   84

F004    M002   96

F001    M003   70

F002    M003   87

F003    M003   92

F004    M003   56

F001    M004   80

F002    M004   78

F003    M004   97

F004    M004   66

F001    M006   88

F002    M006   55

F003    M006   86

F004    M006   79

F002    M007   77

F003    M008   65

F004    M007   48

F004    M009   75

F002    M009   88

create table StuInfo1( StuId char(10) primary key, FName varchar(50) not null, StuGen char(2) not null, StuAdds varchar(50) not null, StuEmail varchar(50) check(StuEmail like '%@%._%') )

create table Course1( CourseId char(10) primary key, CourseName varchar(50) not null )

create table Score1( ScoreId int identity(1,1) primary key, CourseId char(10) foreign key references Course1(CourseId), StuId char(10) foreign key references StuInfo1(StuId), Score int not null )

insert into Course1 select 'F001','语文' union select 'F002','数学' union select 'F003','英语' union select 'F004','历史'

insert into StuInfo1 select 'M001','张赛','男','上海','sai.zhang@sina.com' union select 'M002','王强','男','上海','qing.wang@sina.com' union select 'M003','王五','男','上海','wu.wang@sina.com' union select 'M004','李四','男','上海','si.li@sina.com' union select 'M005','阳阳','男','上海','yangyang@sina.com' union select 'M006','虎子','男','上海','huzi@sina.com' union select 'M007','夏雪','女','北京','xiaxue@sina.com' union select 'M008','璐璐','女','深圳','lulu@sina.com' union select 'M009','姗姗','女','广州','shanshan@sina.com' union select 'M010','香奈儿','女','重庆','xiangerer@sina.com'

insert into Score1(CourseId,StuId,Score) select 'F001','M001',78 union select 'F002','M001',67 union select 'F003','M001',89 union select 'F004','M001',76 union select 'F001','M002',89 union select 'F002','M002',67 union select 'F003','M002',84 union select 'F004','M002',96 union select 'F001','M003',70 union select 'F002','M003',87 union select 'F003','M003',92 union select 'F004','M003',56 union select 'F001','M004',80 union select 'F002','M004',78 union select 'F003','M004',97 union select 'F004','M004',66 union select 'F001','M006',88 union select 'F002','M006',55 union select 'F003','M006',86 union select 'F004','M006',79 union select 'F002','M007',77 union select 'F003','M008',65 union select 'F004','M007',48 union select 'F004','M009',75 union select 'F002','M009',88

--1.查询出所有学生的总数

select count(*) '学生总数' from stuinfo1

--2.查询出所有参加考试的学生学号

select distinct(stuid) from score1

--3.向学生表插入三条新记录(M011王宝宝 男 湖南 bobo.wang@sina.com 、M012李删删 女 四川 shanshan.li@sina.com、M013赛飞飞 女 浙江 feifei.sai@sina.com

insert into stuinfo1 select 'M011','王宝宝','男','湖南','bobo.wang@sina.com' union select 'M012','李删删','女','四川','shanshan.li@sina.com' union select 'M013','赛飞飞','女','浙江','feifei.sai@sina.com'

--4.将‘王强’的数学成绩更改为76分

update score1 set score = 76 where stuid = (select stuid from stuinfo1 where fname = '王强') and courseid =(select courseid from course1 where coursename = '数学')

update score1 set score = 90 from stuinfo1 A inner join score1 B on A.stuid = B.stuid inner join course1 C on B.courseid = C.courseid where fname = '王强' and coursename = '数学'

--5.查询出每一门课程参加考试的人数---要求结果集显示课程名

select A.coursename, count(B.scoreid) '人数' from course1 A left join score1 B on A.courseid = B.courseid group by A.courseid,A.coursename

--6.查询出没有参加考试的同学信息

select * from stuinfo1 A left join score1 B on A.stuid = B.stuid where B.score is null or B.score = ''

--7.查询出参加考试学生的总数

select count(distinct(stuid)) '总数' from score1

select count(distinct(A. StuId) ) '参加考试学生的总数' from StuInfo1 A inner join Score1 B on B.StuId =A.StuId

--8.查询出所有上海的学生

select * from stuinfo1 where stuadds = '上海'

--9.查询所有北京、上海、广州的学生

select * from stuinfo1 where stuadds in ('北京','上海','广州')

--10.查询平均成绩在70分以上的学生信息

select A.stuid,A.fname, avg(B.score) from stuinfo1 A inner join score1 B on A.stuid = B.stuid group by A.stuid,A.fname having avg(B.score) > 70

--11.查询每门课程的平均分、总分

select A.coursename, avg(B.score) '平均分', sum(B.score) '总分' from course1 A left join score1 B on A.courseid = B.courseid group by A.courseid, A.coursename

--12.查询每个同学的总分、平均分

select A.stuid,A.fname, avg(B.score) '平均分', sum(B.score) '总分' from stuinfo1 A left join score1 B on A.stuid = B.stuid group by A.stuid,A.fname

select * from course1

image.png

select * from stuinfo1

image.png

select * from score1

image.png