ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQl 练习题

2022-05-26 02:00:41  阅读:179  来源: 互联网

标签:练习题 Degree -- Sno Score SQl Cno select


 

1-1数据库的表结构 

表(一)Student                          

属性名

数据类型

可否为空

含 义

Sno

Char(3)

学号(主码)

Sname

Char(8)

学生姓名

Ssex

Char(2)

学生性别

Sbirthday

datetime

学生出生年月

Class

Char(5)

学生所在班级

表(二)Course

属性名

数据类型

可否为空

含 义

Cno

Char(5)

课程号(主码)

Cname

Varchar(10)

课程名称

Tno

Char(3)

教工编号(外码)

表(三)Score

属性名

数据类型

可否为空

含 义

Sno

Char(3)

学号(外码)

Cno

Char(5)

课程号(外码)

Degree

Decimal(4,1)

成绩

主码:Sno+ Cno

 

 

表(四)Teacher

属性名

数据类型

可否为空

含 义

Tno

Char(3)

教工编号(主码)

Tname

Char(4)

教工姓名

Tsex

Char(2)

教工性别

Tbirthday

datetime

教工出生年月

Prof

Char(6)

职称

Depart

Varchar(10)

教工所在部门

1-2数据库中的数据

表(一)Student

Sno

Sname

Ssex

Sbirthday

class

108

曾华

1977-09-01

95033

105

匡明

1975-10-02

95031

107

王丽

1976-01-23

95033

101

李军

1976-02-20

95033

109

王芳

1975-02-10

95031

103

陆君

1974-06-03

95031

 

表(二)Course

Cno

Cname

Tno

3-105

计算机导论

825

3-245

操作系统

804

6-166

数字电路

856

9-888

高等数学

831

 

 

 

表(三)Score

Sno

Cno

Degree

103

3-245

86

105

3-245

75

109

3-245

68

103

3-105

92

105

3-105

88

109

3-105

76

101

3-105

64

107

3-105

91

108

3-105

78

101

6-166

85

107

6-166

79

108

6-166

81

表(四)Teacher

Tno

Tname

Tsex

Tbirthday

Prof

Depart

804

李诚

1958-12-02

副教授

计算机系

856

张旭

1969-03-12

讲师

电子工程系

825

王萍

1972-05-05

助教

计算机系

831

刘冰

1977-08-14

助教

电子工程系

 

--一、设有一数据库,包括四个表:
--学生表(Student)、课程表(Course)、
--成绩表(Score)以及教师信息表(Teacher)。
--四个表的结构分别如表1-1的表(一)~表(四)所示,
--数据如表1-2的表(一)~表(四)所示。
--用SQL语句创建四个表并完成相关题目。
create table Student(

Sno char(3) not null primary key,
Sname char(8) not null,
Ssex char(2) not null,
Sbirthday datetime ,
Class char(5)
);
insert into Student
select 108,'曾华','男','1977-09-01','95033'union
select 105,'匡明','男','1975-10-02','95031'union
select 107,'王丽','女','1976-01-23','95033'union
select 101,'李军','男','1976-02-20','95033'union
select 109,'王芳','女','1975-02-10','95031'union
select 103,'陆君','男','1974-06-03','95031'


create table Courses (

Cno char(5) not null primary key,
Cname varchar(10) not null ,
Tno char(5) not null
);
insert into Courses
select '3-105','计算机导论','825'union
select '3-245','操作系统','804'union
select '6-166','数字电路','856'union
select '9-888','高等数学','831'

create table Score(
Sno char(3) not null,
Cno char(5) not null,
Degree decimal(4,1)
);
insert into Score
select '103','3-245','86'union
select '105','3-245','75'union
select '109','3-245','68'union
select '103','3-105','92'union
select '10 5','3-105','88'union
select '109','3-105','76'union
select '101','3-105','64'union
select '107','3-105','91'union
select '108','3-105','78'union
select '101','6-166','85'union
select '107','6-166','79'union
select '108','6-166','81'


create table Teach(
Tno char(3) not null primary key ,
Tname varchar(4) not null,
Tsex char(2) not null ,
Tbirthday datetime null,
Prof varchar(6) null,
Depart varchar(10) not null
);

insert into Teach
select '804','李城','男','1958-12-02','副教授','计算机系'union
select '856','张旭','男','1969-03-12','讲师','电子工程系'union
select '825','王萍','女','1972-05-05','助教','计算机系'union
select '831','刘冰','女','1977-08-14','助教','电子工程系'

 

以下为题目

--1、 查询Student表中的所有记录的Sname、Ssex和Class列。
select Sname,Ssex,Class from Student

--2、 查询教师所有的单位即不重复的Depart列。
select distinct Depart from Teach

--3、 查询Student表的所有记录。
select *from Student

--4、 查询Score表中成绩在60到80之间的所有记录。
select *from Score where Degree between '60' and '80'

--5、 查询Score表中成绩为85,86或88的记录。
select *from Score where Degree='85' or Degree='86' or Degree='88'

--6、 查询Student表中“95031”班或性别为“女”的同学记录。
select *from Student where Class='95031' or Ssex= '女';

--7、 以Class降序查询Student表的所有记录。
select *from Student order by Class desc

--8、 以Cno升序、Degree降序查询Score表的所有记录。
select *from Score order by Cno ,Degree desc

--9、 查询“95031”班的学生人数。
select count(*)as '95031班人数' from Student where Class='95031' group by Class

--10、查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
select *from Score where Degree =(
select MAX(Degree) from Score
)
select top 1 Sno,Cno from Score order by Degree desc

--11、查询‘3-105’号课程的平均分。
select Cno,AVG(Degree) from Score where Cno='3-105'group by Cno;

SELECT Cno,ROUND(AVG(degree),2) FROM Score
GROUP BY Cno


--12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
select Cno ,AVG(Degree)
from Score where Cno like '3%'
group by Cno
having COUNT(Sno)>=5;


--13、查询最低分大于70,最高分小于90的Sno列。
select * from Score
where degree>70 and degree<90

select Sno from Score group by
Sno having MAX(Degree)<90 and MIN(Degree)>70


--14、查询所有学生的Sname、Cno和Degree列。
select a.Sname,b.Cno,b.Degree from Student a join Score b on a.Sno=b.Sno


--15、查询所有学生的Sno、Cname和Degree列。
select a.Sno,b.Degree,c.Cname from Student a join Score b on a.Sno=b.Sno join Courses c on b.Cno=c.Cno


--16、查询所有学生的Sname、Cname和Degree列。
select a.Sname,b.Degree,c.Cname from Student a join Score b on a.Sno=b.Sno join Courses c on b.Cno=c.Cno

--17、查询“95033”班所选课程的平均分。
select Cname,AVG(Degree) from
Student inner join Score on (Student.Sno=Score.Sno) inner join
Courses on Score.Cno=Courses.Cno where Class='95033'
group by Courses .Cno order by Cname


--18、假设使用如下命令建立了一个grade表:
create table grade(low int,upp int,ranks char(1));

insert into grade values(90,100,'A')
insert into grade values(80,89,'B')
insert into grade values(70,79,'C')
insert into grade values(60,69,'D')
insert into grade values(0,59,'E')
--现查询所有同学的Sno、Cno和rank列。
select Sno,Cno,ranks from Score inner join grade on
Score.Degree>=grade.low and Score.Degree<=grade.upp
order by Sno;
select a.Sno,b.Cno,c.ranks from Student a full join Score b on a.Sno=b.Sno full join grade c on b.Cno=c.ranks


--19、 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
select *from Student inner join
(select *from Score where Cno='3-105'
and Degree>(select Degree from Score where Sno='109'
and Cno='3-105')) as s2
on (Student.Sno=s2.Sno) order by Student.Sno


--20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
select Score.Sno,Cno,Degree,md From Score inner join(select Sno,MAX(Degree) md from Score
group by Sno having COUNT(*) >1)
max on Score.Sno=max.Sno and Degree <md order by Sno


--21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
select a.Sno,a.Degree
from Score a inner join Score b on a.Cno=b.Cno and a.Degree>b.Degree
where a.Cno='3-105' and b.Sno='109' order by a.Sno


--22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
select a.Sno ,a.Sname,a.Sbirthday from Student a join Student b on
YEAR(a.Sbirthday)=YEAR(b.Sbirthday) where b.Sno='108'


--23、查询“张旭“教师任课的学生成绩。
select Sno Degree
from Score a inner join Courses b
on a.Cno=b.Cno join Teach c on b.Tno=c.Tno where c.Tname='张旭';


--24、查询选修某课程的同学人数多于5人的教师姓名。
select distinct Tname from Score a join Courses b on
a.Cno=b.Cno join Teach c on b.Tno=c.Tno where b.Cno in (
select Cno from Score group by (Cno) having COUNT(Sno)>5);


--25、查询95033班和95031班全体学生的记录。
select * from student
where class='95033' or class='95031'

select sno,sname as s1 from Student where class='95033'
union
SELECT sno,sname as s2 FROM Student WHERE class='95031'


--26、查询存在有85分以上成绩的课程Cno.
select cno from Score where degree>85
--27、查询出“计算机系“教师所教课程的成绩表。
select Tname ,Cname ,Sname ,Degree
from Teach a join Courses b on a.Tno=b.Tno join Score c
on b.Cno=c.Cno join Student d on c.Sno=d.Sno where a.Depart='计算机系'
order by Tname,Cname,Cname,Degree desc;


--28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
select Tname ,Prof from Teach
where Depart='计算机系' and Prof Not in(
select distinct Prof
from Teach
where Depart='电子工程师');


--29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
select Cno,Sno,Degree from Score where
Cno='3-105' and Degree> any(
select Degree from Score where Cno ='3-245')
order by Degree desc;


--30、 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
select Cno ,Sno Degree from Score
where Cno='3-105' and Degree >all(
select Degree from Score where Cno='3-245')
order by Degree desc;


--31、查询所有教师和同学的name、sex和birthday.
select tname name,Tsex sex,Tbirthday birthday from Teach
union
select sname,ssex,sbirthday from student


--32、查询所有“女”教师和“女”同学的name、sex和birthday.
select tname,Tsex,Tbirthday from Teach where tsex='女'
union
select sname,ssex,sbirthday from Student where ssex='女'


--33、查询成绩比该课程平均成绩低的同学的成绩表。
select a.*from Score a join (select Cno ,AVG(Degree) as aDegree
from Score group by Cno) b on
a.Cno=b.Cno and a.Degree<b.aDegree;


--34、查询所有任课教师的Tname和Depart.
SELECT tname,depart FROM Teach
WHERE tno IN ( SELECT DISTINCT tno FROM courses )


--35、 查询所有未讲课的教师的Tname和Depart.
SELECT tname,depart FROM Teach
WHERE tno NOT IN ( SELECT DISTINCT tno FROM Courses )


--36、查询至少有2名男生的班号。
select Class ,COUNT(1) as boyCount from Student
where Ssex='男'
group by Class having COUNT(1) >=2;


--37、查询Student表中不姓“王”的同学记录。
select *from Student where Sname not like '王%';


--38、查询Student表中每个学生的姓名和年龄。
select Sname ,YEAR(getdate())-YEAR(sbirthday) as Sage from Student;


--39、查询Student表中最大和最小的Sbirthday日期值。
select MIN(Sbirthday),MAX(sbirthday) from Student;


--40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
select *from Student order by Class Desc ,Sbirthday asc;


--41、查询“男”教师及其所上的课程。
select a.Tname ,b.Cname from Teach a join Courses b on a.Tno=b.Tno

where a.Tsex='男'


--42、查询最高分同学的Sno、Cno和Degree列。
select *from Score group by Cno having Degree=MAX(Degree)


--43、查询和“李军”同性别的所有同学的Sname.
select a.Sname from Student a join Student b on a.Ssex=b.Ssex where b.Sname='李军'


--44、查询和“李军”同性别并同班的同学Sname.
select a.Sname from Student a join Student b on a.Sno=b.Sno and a.Class=b.Class
where b.Sname='李军';


--45、查询所有选修“计算机导论”课程的“男”同学的成绩表。
SELECT * FROM Score
WHERE cno=(SELECT cno FROM courses WHERE cname='计算机导论')
ORDER BY degree DESC

 

标签:练习题,Degree,--,Sno,Score,SQl,Cno,select
来源: https://www.cnblogs.com/ljt12/p/16311632.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有