SQL语句练习及答案.docx
- 文档编号:27133378
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:17
- 大小:199.91KB
SQL语句练习及答案.docx
《SQL语句练习及答案.docx》由会员分享,可在线阅读,更多相关《SQL语句练习及答案.docx(17页珍藏版)》请在冰豆网上搜索。
SQL语句练习及答案
现在有一教学管理系统,具体的关系模式如下:
Student(no,name,sex,birthday,class)
Teacher(no,name,sex,birthday,prof,depart)
Course(cno,cname,tno)
Score(no,cno,degree)
其中表中包含如下数据:
Course表:
Score表:
Student表:
Teacher表:
根据上面描述完成下面问题:
(注意:
注意保存脚本,尤其是DDL和DML,以便进行数据还原)
DDL
1.写出上述表的建表语句。
命令:
createtableStudent
(nonvarchar(5),
namenvarchar(5),
sexnvarchar
(1),
birthdaydatetime,
classnvarchar(5)
)
DML
2.给出相应的INSERT语句来完成题中给出数据的插入。
命令:
单表查询
3.以class降序输出student的所有记录(student表全部属性)
命令:
select*fromStudentorderbyclassdesc
4.列出教师所在的单位depart(不重复)。
命令:
selectdistinctdepartfromteacher
5.列出student表中所有记录的name、sex和class列
命令:
selectname,sex,classfromstudent
6.输出student中不姓王的同学的姓名。
命令:
selectnamefromStudentwherenamenotlike'王%'
7.输出成绩为85或86或88或在60-80之间的记录(no,cno,degree)
命令:
select*fromScorewheredegree=85ordegree=86ordegree=88ordegreebetween60and80
8.输出班级为95001或性别为‘女’的同学(student表全部属性)
命令:
select*fromStudentwhereclass='95001'orsex='女'
9.以cno升序、degree降序输出score的所有记录。
(score表全部属性)
命令:
select*fromScoreorderbycno,degreedesc
10.输出男生人数及这些男生分布在多少个班级中
命令:
selectCOUNT(*),COUNT(distinctclass)fromStudentwheresex='男'
11.列出存在有85分以上成绩的课程编号。
命令:
selectdistinctcnofromScorewheredegree>85
12.输出95001班级的学生人数
命令:
selectCOUNT(*)fromStudentwhereclass='95001'
13.输出‘3-105’号课程的平均分
命令:
selectAVG(DEGREE)fromScorewherecno='3-105'
14.输出student中最大和最小的birthday日期值
命令:
selectMAX(birthday),MIN(birthday)fromstudent
15.显示95001和95004班全体学生的全部个人信息(不包括选课)。
(student表全部属性)
命令:
select*fromStudentwhereclass='95001'orclass='95004'
聚合查询
16.输出至少有5个同学选修的并以3开头的课程的课程号,课程平均分,课程最高分,课程最低分。
命令:
selectcno,AVG(degree),MAX(degree),MIN(degree)
fromScore
wherecnolike'3%'
groupbycno
havingCOUNT(no)>5
17.输出所选修课程中最低分大于70分且最高分小于90分的学生学号及学生姓名
命令:
selectstudent.no,student.namefromScoreinnerjoinStudentonstudent.no=score.nogroupbystudent.no,namehaving(MIN(degree)>70andMAX(degree)<90)
18.显示所教课程选修人数多于5人的教师姓名
命令:
selectnamefromScoreinnerjoincourseono=oinnerjoinTeacheronTeacher.no=course.tnogroupbyteacher.no,namehavingCOUNT(*)>5
19.输出’95001’班级所选课程的课程号和平均分
命令:
selectcno,AVG(degree)fromStudentinnerjoinScoreonstudent.no=score.nowherestudent.class='95001'groupbycno
20.输出至少有两名男同学的班级编号。
命令:
selectclassfromStudentinnerjoinScoreonstudent.no=score.nowheresex='男'groupbyclasshavingCOUNT(distinctstudent.no)>1
多表查询
21.列出与108号同学同年出生的所有学生的学号、姓名和生日
命令:
selectno,name,birthdayfromStudentwhereyear(birthday)=(selectYEAR(birthday)fromStudentwhereno=108)
22.列出存在有85分以上成绩的课程名称
命令:
selectcnamefromcourseinnerjoinScoreono=ogroupbycnamehavingMAX(degree)>85
23.列出“计算机系”教师所教课程的成绩表(课程编号,课程名,学生名,成绩)。
命令:
selecto,cname,student.name,DEGREEfromStudentinnerjoinScoreonstudent.no=score.noinnerjoincourseono=oinnerjoinTeacheroncourse.tno=Teacher.nowhereteacher.depart='计算机系'
24.列出所有可能的“计算机系”与“电子工程系”不同职称的教师配对信息,要求输出每个老师的姓名(name)和(职称)
命令:
selectex1.name,ex1.prof,ex2.name,ex2.proffromTeacherex1,Teacherex2whereex1.depart='计算机系'andex2.depart='电子工程系'andex1.prof!
=ex2.prof
25.列出所有处于不同班级中,但具有相同生日的学生,要求输出每个学生的学号和姓名。
(提示:
使用datediff函数,具体用法可以参考:
命令:
selectex1.no,ex1.name,ex2.no,ex2.namefromStudentex1innerjoinStudentex2onex1.birthday=ex2.birthdaywhereex1.class!
=ex2.class
selectex1.no,ex1.name,ex2.no,ex2.name
fromStudentex1,Studentex2
whereex1.class!
=ex2.class
anddatediff(day,ex1.birthday,ex2.birthday)=0
26.显示‘张三’教师任课的学生姓名,课程名,成绩
命令:
selectstudent.name,cname,DEGREEfromStudentinnerjoinScoreonstudent.no=score.noinnerjoincourseono=oinnerjoinTeacheroncourse.tno=teacher.nowhereteacher.name='张三'
27.列出所讲课已被选修的教师的姓名和系别
命令:
selectdistinctteacher.name,departfromScoreinnerjoincourseono=oinnerjoinTeacheroncourse.tno=Teacher.no
28.输出所有学生的name、no和degree。
(degree为空的不输出和为空的输出两种情况)。
命令:
selectstudent.name,student.no,DEGREEfromStudentinnerjoinScoreonstudent.no=score.no
selectstudent.name,student.no,DEGREEfromStudentleftjoinScoreonstudent.no=score.no
29.列出所有任课教师的name和depart。
(从课程选修和任课两个角度考虑)
命令:
(课程选修)
selectdistinctteacher.name,depart
fromscore
leftjoincourseono=o
leftjointeacheroncourse.tno=teacher.no
(任课)
selectdistinctteacher.name,departfromteacherinnerjoincourseonTeacher.no=course.tno
30.输出男教师所上课程名称。
命令:
selectcnamefromTeacherinnerjoincourseonTeacher.no=course.tnowhereteacher.sex='男'
31.出与“李军”同性别的所有同学的name。
命令:
selectnamefromStudentwheresex=(selectsexfromStudentwherename='李军')
32.输出选修“数据结构”课程的男同学的成绩。
命令:
selectDEGREEfromStudentinnerjoinScoreonstudent.no=score.nowheresex='男'
33.列出选修编号为‘3-105’课程并且该门课程成绩比课程‘3-111’的最高分要高的cno,no和degree。
命令:
selectcno,student.no,DEGREEfromStudentinnerjoinScoreonstudent.no=score.nowherecno='3-105'anddegree>(selectMAX(degree)fromScorewherecno='3-111')
子查询
34.输出score中成绩最高的学号和课程号
命令:
selectno,cnofromScorewheredegree=(selectMAX(degree)fromScore)
35.输出选修3-105课程,其成绩高于109号同学在此课程所得成绩的所有同学的学号,姓名
命令:
selectstudent.no,namefromStudentinnerjoinScoreonstudent.no=score.nowherecno='3-105'anddegree>(selectdegreefromStudentinnerjoinScoreonstudent.no=score.nowherestudent.no=109andcno='3-105')
36.列出成绩比该课程平均成绩低的同学的学号,成绩和该门课的平均成绩
命令:
selectno,DEGREE,temp.avgdegree
fromScoreinnerjoin
(selectcno,AVG(degree)avgdegreefromScoregroupbycno)astemp
ono=o
wheredegree 37.列出没有实际授课的教师的姓名和系别 命令: selectdistinctname,depart fromTeacher leftjoincourseonTeacher.no=course.tno leftjoinScoreono=o wherescore.noisnull 38.列出选修了编号为‘3-105’课程且其成绩高于‘4-109’课程最高成绩的同学的课程编号,学号和成绩 命令: selectcno,student.no,DEGREEfromStudentinnerjoinScoreonstudent.no=score.nowherecno='3-105'anddegree>(selectMAX(degree)fromScorewherecno='4-109') 39.**列出符合下述条件的所有可能的同学配对(sno1,sname1,sno2,sname2,difference)。 其中要求学号为sno1的sname1同学的所学课程的平均分大于学号为sno2的sname2同学的所学课程平均分,两个同学的课程平均分的差值difference为(sno1同学平均分-sno2同学平均分) 命令: selectex1.no,ex1.name,ex2.no,ex2.name, AVG(ex3.degree)-AVG(ex4.degree)asdiffenence from(Studentex1innerjoinScoreex3onex1.no=ex3.no), (Studentex2innerjoinScoreex4onex2.no=ex4.no) groupbyex1.no,ex1.name,ex2.no,ex2.name havingAVG(ex3.degree)>AVG(ex4.degree) selectstuavg1.no,stuavg1.name,stuavg2.no,stuavg2.name, stuavg1.avgscore-stuavg2.avgscoreasdiffenence from ( selectstudent.no,name,avg(degree)asavgscore fromscore leftjoinstudentonscore.no=student.no groupbystudent.no,name )asstuavg1 innerjoin ( selectstudent.no,name,avg(degree)asavgscore fromscore leftjoinstudentonscore.no=student.no groupbystudent.no,name )asstuavg2 onstuavg1.avgscore>stuavg2.avgscore
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语句 练习 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)