sql练习题+答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

(一)新建以下几个表student(学生表):snosnamesexdeptbirthage其中约束如下:(1)学号不能存在相同的(2)名字为非空(3)性别的值只能是’男’或’女’(4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系(5)出生日期为日期格式(6)年龄为数值型,且在0~100之间createtablestudent(snosmallintconstraintaprimarykey,----设置学生学号为student的主键snamevarchar(10)notnull,sexvarchar(2)constraintbcheck(sexin('男','女')),----检查约束——性别的值只能是’男’或’女’deptvarchar(20)constraintccheck(deptin('信息系','计算机科学系','数学系','管理系','中文系','外语系','法学系')),----检查约束——系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系birthdatetime,agesmallintconstraintdcheck(agebetween0and100)----检查约束——年龄为数值型,且在~100之间)cs(成绩表):snocnocj其中约束如下:(1)sno和cno分别参照student和course表中的sno,cno的字段(2)cj(成绩)只能在0~100之间,可以不输入值createtablecs(snosmallintnotnullreferencesstudent(sno),----定义成外键cnosmallintnotnullreferencescourse(cno),----定义成外键cjsmallintconstraintecheck(cjbetween0and100),----检查约束——cj(成绩)只能在~100之间,可以不输入值constraintfprimarykey(sno,cno)----定义学生学号和课程号为sc表的主键)course(课程表)cnocname其约束如下:(1)课程号(cno)不能有重复的(2)课程名(cname)非空createtablecourse(cnosmallintnotnullconstraintgprimarykey,----设置课程号为course的主键cnamevarchar(20)notnull)(三)针对学生课程数据库查询(1)查询全体学生的学号与姓名。Selectsno,snamefromstudent(2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。Selectsnameas'姓名',snoas'学号',deptas'所在地'fromstudent(3)查询全体学生的详细记录。select*fromstudent(4)查全体学生的姓名及其出生年份。selectsname,birthfromstudent(5)查询学校中有哪些系。selectdistinctdeptfromstudent(6)查询选修了课程的学生学号。selectsnofromcswherecnoisnotnull(7)查询所有年龄在20岁以下的学生姓名及其年龄。selectsname,agefromstudentwhereage20(8)查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。selectsname,dept,agefromstudentwhereagebetween20and23(9)查询年龄不在20~23岁之间的学生姓名、系别和年龄。selectsname,dept,agefromstudentwhereage20orage23(10)查询信息系、数学系和计算机科学系生的姓名和性别。selectsname,sexfromstudentwheredept='信息系'ordept='数学系'ordept='计算机科学系'(11)查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。selectsname,sexfromstudentwheredept!='信息系'anddept!='数学系'anddept!='计算机科学系'(12)查询所有姓刘学生的姓名、学号和性别。selectsname,sno,sexfromstudentwheresnamelike('刘%')(13)查询学号为2009011的学生的详细情况。(具体的学号值根据表中数据确定)select*fromstudentwheresno=5(14)查询姓“欧阳”且全名为三个汉字的学生姓名selectsnamefromstudentwheresnamelike('欧阳_')(15)查询名字中第2个字为“晨”字的学生的姓名和学号selectsname,snofromstudentwheresnamelike('_晨')(16)查询所有不姓刘的学生姓名。selectsname,snofromstudentwheresnamenotlike('刘%')(17)查询sql课程的课程号和学分。selectcnofromcoursewherecname='sql'(18)查询以DB_开头,且倒数第3个字符为i的课程的详细情况。select*fromcoursewherecnamelike('DB[_]%i__')(19)查询缺少成绩的学生的学号和相应的课程号。selectsno,cnofromcswherecjisnull(20)查所有有成绩的学生学号和课程号。selectsno,cnofromcswherecjisnotnull(21)查询计算机系年龄在20岁以下的学生姓名。selectsnamefromstudentwhereage20anddept='计算机科学系'(22)查询信息系、数学系和计算机科学系学生的姓名和性别。(使用多个条件表达式)selectsname,sexfromstudentwheredept='信息系'ordept='数学系'ordept='计算机科学系'(23)查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。(使用多个条件表达式)selectsname,dept,agefromstudentwhereagebetween20and23(24)查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。selectsno,cjfromcswherecno=3orderbycjdesc(25)查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。select*fromstudentorderbydeptasc,agedesc(26)查询学生总人数。selectcount(*)fromstudent(27)查询选修了课程的学生人数。selectcount(sno)fromcswherecnoisnotnull(28)计算1号课程的学生平均成绩。selectavg(cj)fromcswherecno=1(29)查询选修1号课程的学生最高分数。selectmax(cj)fromcswherecno=1(30)求各个课程号及相应的选课人数。selectcourse.cno,count(cs.sno)fromcourseleftjoincsoncourse.cno=cs.cnogroupbycourse.cno(31)查询选修了3门以上课程的学生学号。selectsno,count(cno)fromcsgroupbysnohavingcount(cno)3(32)查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数。selectsno,count(cno)as'课程数'fromcswherecj90groupbysnohavingcount(cno)=3(33)查询学生2006011选修课程的总学分。selectsum(course)fromcourse,cswherecourse.cno=cs.snoandcs.sno=2006011(34)查询每个学生选修课程的总学分。selectsno,sum(cj)fromcs,coursewherecs.cno=course.cnogroupbysnounionselectsno,0fromstudentwheresnonotin(selectsnofromcs)(35)查询每个学生及其选修课程的情况。selectcs.sno,course.*fromcs,coursewherecs.cno=course.cno(36)查询选修2号课程且成绩在90分以上的所有学生的学号、姓名selectsno,snamefromstudentwheresno=(selectsnofromcswherecno=2andcj90)(37)查询每个学生的学号、姓名、选修的课程名及成绩。selectstudent.sno,sname,course.course,cs.cjfromstudent,course,cswherestudent.sno=cs.snoandcs.cno=course.cno(38)查询与“刘晨”在同一个系学习的学生(分别用嵌套查询和连接查询)----嵌套查询select*fromstudentwheredeptin(selectdeptfromstudentwheresname='刘晨')----连接查询selectstu1.*fromstudentasstu1,studentasstu2wherestu1.dept=stu2.deptandstu2.sname='刘晨'----exists查询select*fromstudents1whereexists(select*fromstudents2wheres1.dept=s2.deptands2.sname='刘晨')(39)查询选修了课程名为“信息系统”的学生学号和姓名selectsno,snamefromstudentwheresnoin(selectsnofromcswherecnoin(selectcnofromcoursewherecname='信息系统'))(40)查询其他系中比信息系任意一个(其中某一个)学生年龄小的学生姓名和年龄selectsname,agefromstudentwhereageany(selectagefromstudentwheredept='信息系')(41)查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。分别用ALL谓词和集函数----用ALLselectsname,agefromstudentwhereageall(selectagefromstudentwheredept='信息系')----聚合函数selectsname,agefromstudentwhereage(selectmin(age)fromstudentwheredept='信息系')(42)查询所有选修了1号课程的学生姓名。(分别用嵌套查询和连查询)----嵌套查询selectsnamefromstudentwheresnoin(selectsnofromcswherecno=1)----连接查询selectsnamefromstudent,cswherestudent.sno=cs.snoandcs.cno=1(43)查询没有选修1号课程的学生姓名。selectsnamefromstudentwheresnoin(selectsnofromcswherecno!=1)(44)查询选修了全部课程的学生姓名。selectsnamefromstudentwherenotexists(select*fromcoursewherenotexists(select*fromcswherecs.sno=student.snoandcs.cno=course.cno))(45)查询至少选修了学

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功