sql数据查询练习题.docx
《sql数据查询练习题.docx》由会员分享,可在线阅读,更多相关《sql数据查询练习题.docx(9页珍藏版)》请在冰豆网上搜索。
sql数据查询练习题
一、 设有一数据库,包括四个表:
学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。
四个表的结构分别如表1-1的表
(一)~表(四)所示,数据如表1-2的表
(一)~表(四)所示。
用SQL语句创建四个表并完成相关题目。
表1-1数据库的表结构
表
(一)Student(学生表)
属性名
数据类型
可否为空
含义
Sno
varchar(20)
否
学号(主码)
Sname
varchar(20)
否
学生姓名
Ssex
varchar(20)
否
学生性别
Sbirthday
datetime
可
学生出生年月
Class
varchar(20)
可
学生所在班级
表
(二)Course(课程表)
属性名
数据类型
可否为空
含义
Cno
varchar(20)
否
课程号(主码)
Cname
varchar(20)
否
课程名称
Tno
varchar(20)
否
教工编号(外码)
表(三)Score(成绩表)
属性名
数据类型
可否为空
含义
Sno
varchar(20)
否
学号(外码)
Cno
varchar(20)
否
课程号(外码)
Degree
Decimal(4,1)
可
成绩
主码:
Sno+Cno
表(四)Teacher(教师表)
属性名
数据类型
可否为空
含义
Tno
varchar(20)
否
教工编号(主码)
Tname
varchar(20)
否
教工姓名
Tsex
varchar(20)
否
教工性别
Tbirthday
datetime
可
教工出生年月
Prof
varchar(20)
可
职称
Depart
varchar(20)
否
教工所在部门
表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
助教
电子工程系
1、查询Student表中的所有记录的Sname、Ssex和Class列。
selectSname,Ssex,ClassfromStudent
2、查询教师所有的单位即不重复的Depart列。
selectdistinctDepartfromteacher
3、查询Student表的所有记录。
select*fromstudent
4、查询Score表中成绩在60到80之间的所有记录。
select*fromScorewhereDegreebetween60and80
5、查询Score表中成绩为85,86或88的记录。
select*fromScorewhereDegree=85orDegree=86orDegree=88
6、查询Student表中“95031”班或性别为“女”的同学记录。
select*fromstudentwhereClass='95031'orSsex='女'
7、以Class降序查询Student表的所有记录。
select*fromstudentorderbyClassdesc
8、以Cno升序、Degree降序查询Score表的所有记录。
select*fromScoreorderbycnoasc,Degreedesc
9、查询“95031”班的学生人数。
selectcount(*)fromstudentwhereclass='95031'
10、 查询Score表中的最高分的学生学号和课程号。
(子查询或者排序)
selectCno,snofromScorewheredegreein(selectMAX(Degree)fromScore)
11、查询每门课的平均成绩。
selectavg(degree),cnofromScoregroupbycno
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
selectAVG(Degree)fromScoregroupbycnohavingcount(cno)>5andCnolike'3%'
13、查询分数大于70,小于90的Sno列。
SelectSnofromScorewhereDegreebetween70and90
14、查询所有学生的Sname、Cno和Degree列。
selectSname,Cno,DegreefromStudentjoinScoreonStudent.Sno=Score.Sno
15、查询所有学生的Sno、Cname和Degree列。
selectCname,Sno,DegreefromcoursejoinScoreono=So
16、查询所有学生的Sname、Cname和Degree列。
selectCname,Sname,Degreefromcourse,Score,StudentwhereStudent.Sno=Score.SnoandCo=Score.Cno
17、 查询“95033”班学生的平均分。
selectavg(degree)fromscore,studentwherescore.sno=student.snoandclass='95033'
18、假设使用如下命令建立了一个grade表:
createtablegrade(lowint(3),uppint(3),rankchar
(1))
insertintogradevalues(90,100,’A’)
insertintogradevalues(80,89,’B’)
insertintogradevalues(70,79,’C’)
insertintogradevalues(60,69,’D’)
insertintogradevalues(0,59,’E’)
现查询所有同学的Sno、Cno和rank列。
Selectsno,cno,[rank]fromscorejoingradeonscore.Degreebetweengrade.lowandgrade.upp
19、 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
select*fromScorewherecno='3-105'andDegree>(selectdegreefromScorewherecno='3-105'andSno='109')
20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
select*fromscoreawheresnoin(Selectsnofromscoregroupbysnohavingcount(sno)>1)anddegree<(selectmax(degree)fromscorebwhereo=o)
21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
select*fromScorewherecno='3-105'andDegree>(selectdegreefromScorewhereSno='109'andcno='3-105')
22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
selectSno,Sname,SbirthdayfromStudentwhereYEAR(Sbirthday)=(selectYEAR(sbirthday)fromStudentwhereSno='108')
23、查询“张旭“教师任课的学生成绩。
SelectDegreefromscorewherecno=(Selectcnofromcoursewheretno=(Selecttnofromteacherwheretname='张旭'))
24、查询选修某课程的同学人数多于5人的教师姓名。
SelecttnamefromteacherwhereTno=(selectTnofromCoursewhereCno=(selectCnofromScoregroupbyCnohavingCOUNT(*)>5))
25、查询95033班和95031班全体学生的记录。
select*fromStudentwhereClass='95033'orClass='95031'
26、 查询存在有85分以上成绩的课程Cno.
selectdistinctcnofromscorewhereDegree>85
27、查询出“计算机系“教师所教课程的成绩表。
selectdegreefromscorewhereCnoin(selectcnofromCoursewhereTnoin(selecttnofromTeacherwhereDepart='计算机系'))
28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
selectTname,Proffromteacherwhereprofnotin(selectproffromteacherwheredepart='计算机系'andprofin(selectproffromteacherwheredepart='电子工程系'))
29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
selectCno,Sno,DegreefromScorewhereCno='3-105'andDegree>(selectMAX(degree)fromScorewhereCno='3-245')orderbyDegreedesc
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
selectCno,Sno,DegreefromScorewhereCno='3-105'andDegree>(selectMAX(degree)fromScorewhereCno='3-245')
31、 查询所有教师和同学的name、sex和birthday.
selectsnameasname,ssexassex,sbirthdayasbirthdayfromStudent
union
selecttname,tsex,tbirthdayfromteacher
32、查询所有“女”教师和“女”同学的name、sex和birthday.
selectsnameasname,ssexassex,sbirthdayasbirthdayfromStudentwhereSsex='女'
union
selecttname,tsex,tbirthdayfromteacherwheretsex='女'
33、 查询成绩比该课程平均成绩低的同学的成绩表。
Selectdegreefromscoreawheredegree<(selectavg(degree)fromscorebwhereo=o)
34、查询所有任课教师的Tname和Depart.
Selecttname,departfromteacherwheretnoin(selecttnofromcoursewherecnoin(selectcnofromscoregroupbycno))
35 、查询所有未讲课的教师的Tname和Depart.
Selecttname,departfromteacherwheretnonotin(selecttnofromcoursewherecnoin(selectcnofromscoregroupbycno))
36、查询至少有2名男生的班号。
Selectclassfromstudentwheressex='男'groupbyclasshavingcount(*)>=2
37、查询Student表中不姓“王”的同学记录。
select*fromstudentwheresnamenotlike'王%'
38、查询Student表中每个学生的姓名和年龄。
Selectsname,YEAR(GETDATE())-YEAR(sbirthday)as'年龄'fromstudent
39、查询Student表中最大和最小的Sbirthday日期值。
selectMAX(Sbirthday),MIN(Sbirthday)fromStudent
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
select*fromStudentorderbyClassdesc,SbirthdayASC
41、查询“男”教师及其所上的课程。
Selecttname,cnamefromteacherjoincourseonteacher.tno=course.tnoandteacher.tsex='男'
42、查询最高分同学的Sno、Cno和Degree列。
selectSno,Cno,DegreefromScorewhereDegreein(selectMAX(Degree)fromScore)
43、查询和“李军”同性别的所有同学的Sname.
Selectsnamefromstudentwheressex=(selectssexfromstudentwheresname='李军')
44、查询和“李军”同性别并同班的同学Sname.
Selectsnamefromstudentwheressex=(selectssexfromstudentwheresname='李军')andClass=(selectclassfromstudentwheresname='李军')
45、查询所有选修“计算机导论”课程的“男”同学的成绩表。
selectdegreefromScorewhereSnoin(selectSnofromStudentwhereSsex='男')andCnoin(selectCnofromCoursewherecname='计算机导论')