您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 关系数据库语言SQL习题与答案
关系数据库语言SQL习题与答案一,选择题1,下面关于SQL语言的叙述中,哪一条是错误的().A.SQL既可作为联机交互环境中的查询语言又可嵌入到主语言中B.SQL没有数据控制功能C.使用SQL用户只能定义索引而不能引用索引D.使用SQL用户可以定义和检索视图2,SQL语言是()A.高级语言B.编程语言C.结构化查询语言D.宿主语言3,在学生数据库中,用SQL语句列出的所有女生的姓名,应该对学生关系进行()操作.A.选择B.连接C.投影D.选择和投影4,NULL是指()A.0B.空格C.无任何值D.空字符串5,下列哪条语句不属于SQL数据操纵功能范围()A.SELECTB.CREATTABLEC.DELETED.INSERT6,用()命令可建立唯一索引A.CREATETABLEB.CREATECLUSTERC.CREATEINDEXD.CREATEUNIQUEINDEX二,填空题1,SQL语言的使用方式有两种,一种是,另一种是2,在SQL查询中,WHERE子句的功能是.3,视图是一个虚表,它是从的表.4,SQL语言的数据操纵功能包括,,,和,5,在SQL支持的关系数据库三级模式结构中,外模式对应于,模式对应于,内模式对应于.6,在SELECT语句中,HAVING子句必须跟在子句后面.三,问题及操作题1,名词解释SQL模式SQL数据库基本表视图相关子查询联接查询嵌入式SQL游标2,对于教学数据库的三个基本表学生S(S#,SNAME,AGE,SEX)学习SC(S#,C#,GRADE)课程C(C#,CNAME,TEACHER)试用SQL的查询语句表达下列查询:(1)检索LIU老师所授课程的课程号和课程名.(2)检索年龄大于23岁的男学生的学号和姓名.(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名.(4)检索WANG同学不学的课程的课程号.(5)检索至少选修两门课程的学生学号.(6)检索全部学生都选修的课程的课程号与课程名.(7)检索选修课程包含LIU老师所授课的学生学号.3,设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:(1)R∪S(2)R∩S(3)R-S(4)πA,B(R)πB,C(S)4,试用SQL查询语句表达下列对教学数据库中三个基本表S,SC,C的查询:(1)统计有学生选修的课程门数.(2)求选修C4课程的学生的平均年龄.(3)求LIU老师所授课程的每门课程的学生平均成绩.(4)统计每门课程的学生选修人数(超过10人的课程才统计).要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列.(5)检索学号比WANG同学大,而年龄比他小的学生姓名.(6)检索姓名以WANG打头的所有学生的姓名和年龄.(7)在SC中检索成绩为空值的学生学号和课程号.(8)求年龄大于女同学平均年龄的男学生姓名和年龄.5,试用SQL更新语句表达对教学数据库中三个基本表S,SC,C的各个更新操作:(1)往基本表S中插入一个学生元组('S9','WU',18).(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号,姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX).(3)在基本表SC中删除尚无成绩的选课元组.(4)把WANG同学的学习选课和成绩全部删去(5)把选修MATHS课不及格的成绩全改为空值.(6)把低于总平均成绩的女同学成绩提高5%.(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现).6,在宿主语言的程序中使用SQL语句有哪些规定7,嵌入式SQL语句何时不必涉及到游标何时必须涉及到游标答案:一,1,B2,C3,D4,C5,B6,D二,1,嵌入式交互式2,选择3,基本表导出的表4,数据查询数据更新数据插入数据删除5,视图或部分基本表基本表存储文件6,GROUPBY三,1,名词解释SQL模式:SQL模式是表和授权的静态定义.一个SQL模式定义为基本表的集合.一个由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表,视图,索引等)的定义.SQL数据库:SQL(StructuredQueryLanguage),即'结构式查询语言',采用英语单词表示和结构式的语法规则.一个SQL数据库是表的汇集,它用一个或多个SQL模式定义.基本表:在SQL中,把传统的关系模型中的关系模式称为基本表(BaseTable).基本表是实际存储在数据库中的表,对应一个关系.视图:在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表和(或)其他视图构造出来的表.相关子查询:在嵌套查询中出现的符合以下特征的子查询:子查询中查询条件依赖于外层查询中的某个值,所以子查询的处理不只一次,要反复求值,以供外层查询使用.联接查询:查询时先对表进行笛卡尔积操作,然后再做等值联接,选择,投影等操作.联接查询的效率比嵌套查询低.嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL.游标:游标是与某一查询结果相联系的符号名,用于把集合操作转换成单记录处理方式.2,(1)检索LIU老师所授课程的课程号和课程名.SELECTC#,CNAMEFROMCWHERETEACHER='LIU'(2)检索年龄大于23岁的男学生的学号和姓名.SELECTS#,SNAMEFROMSWHERE(AGE23)AND(SEX='M')(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名.SELECTSNAMEFROMSWHERESEX='F'ANDS#IN(SELECTS#FROMSCWHEREC#IN(SELECTC#FROMCWHERETEACHER='LIU')NOTICE:有多种写法,比如联接查询写法:SELECTSNAMEFROMS,SC,CWHERESEX='F'ANDSC.S#=S.S#ANDSC.C#=C.C#ANDTEACHER='LIU'但上一种写法更好一些.(4)检索WANG同学不学的课程的课程号.SELECTC#FROMCWHEREC#NOTIN(SELECTC#FROMSCWHERES#IN(SELECTS#FROMSWHERESNAME='WANG'))(5)检索至少选修两门课程的学生学号.SELECTDISTINCTX.SNOFROMSCX,SCYWHEREX.SNO=Y.SNOANDX.CNOY.CNONotice:对表SC进行自连接,X,Y是SC的两个别名.(6)检索全部学生都选修的课程的课程号与课程名.SELECTC#,CNAMEFROMCWHERENOTEXISTS(SELECT*FROMSWHERES#NOTIN(SELECT*FROMSCWHERESC.C#=C.C#))要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学.其中,不选这门课的同学可以表示为:SELECT*FROMSWHERES#NOTIN(SELECT*FROMSCWHERESC.C#=C.C#)或者SELECT*FROMSWHERENOTEXISTS(SELECT*FROMSCWHERES.S#=C.S#ANDSC.C#=C.C#)(7)检索选修课程包含LIU老师所授课的学生学号.SELECTDISTINCTS#FROMSCWHEREC#IN(SELECTC#FROMCWHERETEACHER='LIU'))3,(1)SELECTA,B,CFROMRUNIONSELECTA,B,CFROMS(2)SELECTA,B,CFROMRINTERSECTSELECTA,B,CFROMS(3)SELECTA,B,CFROMRWHERENOTEXISTS(SELECTA,B,CFROMSWHERER.A=S.AANDR.B=S.BANDR.C=S.C)(4)SELECTR.A,R.B,S.CFROMR,SWHERER.B=S.B4,(1)统计有学生选修的课程门数.SELECTCOUNT(DISTINCTC#)FROMSC(2)求选修C4课程的学生的平均年龄.SELECTAVG(AGE)FROMSWHERES#IN(SELECTS#FROMSCWHEREC#='C4')或者,SELECTAVG(AGE)FROMS,SCWHERES.S#=SC.S#ANDC#='004'(3)求LIU老师所授课程的每门课程的学生平均成绩.SELECTCNAME,AVG(GRADE)FROMSC,CWHERESC.C#=C.C#ANDTEACHER='LIU'GROUPBYC#(4)统计每门课程的学生选修人数(超过10人的课程才统计).要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列.SELECTDISTINCTC#,COUNT(S#)FROMSCGROUPBYC#HAVINGCOUNT(S#)10ORDERBY2DESC,C#ASC(5)检索学号比WANG同学大,而年龄比他小的学生姓名.SELECTX.SNAMEFROMSASX,SASYWHEREY.SNAME='WANG'ANDX.S#Y.S#ANDX.AGE(SELECTAVG(AGE)FROMSASYWHEREY.SEX='女')5,(1)往基本表S中插入一个学生元组('S9','WU',18).INSERTINTOS(S#,SNAME,AGE)VALUES('59','WU',18)(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号,姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX).INSERTINTOSTUDENT(S#,SNAME,SEX)SELECTS#,SNAME,SEXFROMSWHERENOTEXISTS(SELECT*FROMSCWHEREGRADE80ANDS.S#=SC.S#)(3)在基本表SC中删除尚无成绩的选课元组.DELETEFROMSCWHEREGRADEISNULL(4)把WANG同学的学习选课和成绩全部删去.DELETEFROMSCWHERES#IN(SELECTS#FROMSWHERESNAME='WANG')(5)把选修MATHS课不及格的成绩全改为空值.UPDATESCSETGRADE=NULLWHEREGRADE60ANDC#IN(SELECTC#FROMCWHERECNAME='MATHS')6)把低于总平均成绩的女同学成绩提高5%.UPDATESCSETGRADE=GRADE*1.05WHEREGRADE(SELECTAVG(GRADE)FROMSC)ANDS#IN(SELECTS#FROMSWHERESEX='F')(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现).UPDATESCSETGRADE=GRADE*1.05WHEREC#='C4'ANDGRADE756,在宿主语言的程序中使用SLQ语句有以下规定:(1)在程序中要区分SQL语句与宿主语言语句(2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:1)引用时,这些变量前必须加:作为前缀标识,以示与数据库中变量有区别.2)这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明.(3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调.需要采用游标机制,把集合操作转换成单记录处理方式.7,(1)INSERT,DELETE,UPDATE语句,查询结果肯定是单元组时的SELECT语句,都可直接嵌入在主程序中使用,不必涉及到游标.(2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用,一定要用游标机制把多个元组一次一个地传送给宿主语言处理.
本文标题:关系数据库语言SQL习题与答案
链接地址:https://www.777doc.com/doc-4885841 .html