网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQL语言习题及答案

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

    数据库原理之关系数据库SQL语言课后习题及答案
    educity作者:不详来源:2006年9月12日发表评论进入社区
    3.1
    名词解释
    (1)SQL模式模式:SQL模式是表和授权的静态定义.一个SQL模式定义为基本表的集合.一个由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表,视图,索引等)的定义.数据库(2)SQL数据库:SQL(StructuredQueryLanguage),即'结构式查询语言',采用英语单词表示和结构式的语法规则.一个SQL数据库是表的汇集,它用一个或多个SQL模式定义.(3)基本表基本表:在SQL中,把传统的关系模型中的关系模式称为基本表(BaseTable).基本表基本表是实际存储在数据库中的表,对应一个关系.(4)存储文件存储文件:在SQL中,把传统的关系模型中的存储模式称为存储文件(StoredFile).每存储文件个存储文件与外部存储器上一个物理文件对应.(5)视图视图:在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表视图和(或)其他视图构造出来的表.(6)行:在SQL中,把传统的关系模型中的元组称为行(row).行(7)列:在SQL中,把传统的关系模型中的属性称为列(coloumn).(8)实表实表:基本表被称为"实表",它是实际存放在数据库中的表.实表(9)虚表:视图被称为"虚表",创建一个视图时,只把视图的定义存储在数据词典中,而不虚存储视图所对应的数据.(10)相关子查询相关子查询:在嵌套查询中出现的符合以下特征的子查询:子查询中查询条件依赖于外相关子查询层查询中的某个值,所以子查询的处理不只一次,要反复求值,以供外层查询使用.(11)联接查询联接查询:查询时先对表进行笛卡尔积操作,然后再做等值联接,选择,投影等操作.联接查询联接查询的效率比嵌套查询低.(12)交互式SQL:在终端交互方式下使用的SQL语言称为交互式SQL.交互式(13)嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL.嵌入式(14)共享变量共享变量:SQL和宿主语言的接口.共享变量有宿主语言程序定义,再用SQL的共享变量DECLARE语句说明,SQL语句就可引用这些变量传递数据库信息.
    (15)游标游标是与某一查询结果相联系的符号名,游标:用于把集合操作转换成单记录处理方式.游标(16)卷游标卷游标:为了克服游标在推进时不能返回的不便,SQL2提供了卷游标技术.卷游标在卷游标推进时不但能沿查询结果中元组顺序从头到尾一行行推进,也能一行行返回.
    3.2对于教学数据库的三个基本表学生S(S#,SNAME,AGE,SEX)学习SC(S#,C#,GRADE)课程C(C#,CNAME,TEACHER)试用SQL的查询语句表达下列查询:
    (1)检索LIU老师所授课程的课程号和课程名.SELECTC#,CNAMEFROMCWHERETEACHER='LIU'
    (2)检索年龄大于23岁的男学生的和.SELECTS#,SNAMEFROMSWHERE(AGE>23)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.CNO<>Y.CNONotice:对表SC进行自连接,X,Y是SC的两个别名.(6)检索全部学生都选修的课程的课程号与课程名.SELECTC#,CNAMEFROMCWHERENOTEXISTS(SELECT*FROMSWHERES#NOTIN(SELECT*
    FROMSCWHERESC.C#=C.C#))要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学.其中,"不选这门课的同学"可以表示为:
    或者
    SELECT*FROMSWHERENOTEXISTS(SELECT*FROMSCWHERES.S#=C.S#ANDSC.C#=C.C#)
    SELECT*FROMSWHERES#NOTIN(SELECT*FROMSCWHERESC.C#=C.C#)
    (7)检索选修课程包含LIU老师所授课的学生.SELECTDISTINCTS#FROMSCWHEREC#IN(SELECTC#FROMCWHERETEACHER='LIU'))
    3.3设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达下列关系代数表达式:(1)πA(R)(2)σB='17'(R)(3)R×S(4))πA,F(σC=D(R×S))
    (1)SELECTAFROMR(2)SELECT*FROMRWHEREB='17'(3)SELECTA,B,C,D,E,FFROMR,S(4)SELECTA,FFROMR,SWHERER.C=S.D
    3.43.4设有两个基本表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)
    (1)SELECTA,B,CFROMRUNION
    SELECTA,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.B
    3.5
    试叙述SQL语言的关系代数特点和元组演算特点.
    (P61-62)
    3.6试用SQL查询语句表达下列对教学数据库中三个基本表S,SC,C的查询:
    (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    (6)检索以WANG打头的所有学生的和年龄.SELECTSNAME,AGEFROMSWHERESNAMELIKE'WANG%'(7)在SC中检索成绩为空值的学生和课程号.SELECTS#,C#FROMSCWHEREGRADEISNULL(8)求年龄大于女同学平均年龄的男学生和年龄.SELECTSNAME,AGEFROMSASXWHEREX.SEX='男'ANDX.AGE>(SELECTAVG(AGE)FROMSASYWHEREY.SEX='女')
    (9)求年龄大于所有女同学年龄的男学生和年龄.SELECTSNAME,AGEFROMSASXWHEREX.SEX='男'ANDX.AGE>ALL(SELECTAGEFROMSASYWHEREY.SEX='女')
    3.7试用SQL更新语句表达对教学数据库中三个基本表S,SC,C的各个更新操作:
    (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*FROMSCWHEREGRADE<80ANDS.S#=SC.S#)(3)在基本表SC中删除尚无成绩的选课元组.DELETEFROMSCWHEREGRADEISNULL(4)把WANG同学的学习选课和成绩全部删去.DELETEFROMSCWHERES#IN(SELECTS#FROMSWHERESNAME='WANG')(5)把选修MATHS课不及格的成绩全改为空值.UPDATESCSETGRADE=NULLWHEREGRADE<60ANDC#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'ANDGRADE<=75UPDATESCSETGRADE=GRADE*1.04WHEREC#='C4'ANDGRADE>753.8在第1章例1.4中提到"仓库管理"关系模型有五个关系模式:零件PART(P#,PNAME,COLOR,WEIGHT)项目PROJECT(J#,JNAME,DATE)供应商SUPPLIER(S#,SNAME,SADDR)供应P_P(J#,P#,TOTOAL)采购P_S(P#,S#,QUANTITY)(1)试用SQLDDL语句定义上述五个基本表,并说明主键和外键.CREATETABLEPART(P#CHAR(4)NOTNULL,PNAMECHAR(12)NOTNULL,COLORCHAR(10),WEIGHTREAL,PRIMARYKEY(P#))
    CREATETABLEPROJECT(J#CHAR(4)NOTNULL,JNAMECHAR(12)NOTNULL,DATEDATE,PRIMARYKEY(J#))
    CREATETABLESUPLIER(S#CHAR(4)NOTNULL,SNAMECHAR(12),SADDRVARCHAR(20),PRIMARYKEY(S#))
    CREATETABLEP_P
    (J#CHAR(4),P#CHAR(4),TOTALINTEGER,PRIMARYKEY(J#,P#),FOREIGNKEY(J#)REFERENCEPROJECT(J#),FOREIGNKEY(P#)REFERENCEPART(P#))
    CREATETABLEP_S(P#CHAR(4),S#CHAR(4),QUANTITYINTEGER,PRIMARYKEY(P#,S#),FOREIGNKEY(P#)REFERENCEPART(P#),FOREIGNKEY(S#)REFERENCESUPLIER(S#))
    (2)试将PROGECT,P_P,PART三个基本表的自然联接定义为一个视图VIEW1,PART,P_S,SUPPLIER三个基本表的自然联接定义为一个视图VIEW2.CREATEVIEWVIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL)ASSELECTPROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTALFROMPROJECT,PART,P_PWHEREPART.P#=P_P.P#ANDP_P.J#=PROJECT.J#
    CREATEVIEWVIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY)ASSELECTPART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITYFROMPART,P_S,SUPPLIERWHEREPART.P#=P_S.P#ANDP_S.S#=SUPPLIER.S#(3)试在上述两个视图的基础上进行数据查询:
    1)检索上海的供应商所供应的零件的编号和名字.SELECTP#,PNAMEFROMVIEW2WHERESADDR='SHANGHAI'2)检索项目J4所用零件的供应商编号和名字.SELECTS#,SNAMEFROMVIEW2WHEREP#IN(SELECTP#FROMVIEW1WHEREJ#='J4')3.9对于教学数据库中基本表SC,已建立下列视图:CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE)
    ASSELECTS#,COUNT(C#),AVG(GRADE)FROMSCGROUPBYS#试判断下列查询和更新是否允许执行.若允许,写出转换到基本表SC上的相应操作.(1)SELECT允许SELECTS#,COUNT(C#),AVG(GRADE)FROMSCGROUPBYS#(2)SELECTS#,C_NUM*
    FROMS_GRADE
    FROMS_GRADEWHEREAVG_GRADE>80允许SELECTS#,COUNT(C#)FROMSCWHEREAVG(GRADE)>80(3)SELECTS#,AVG_GRADE
    FROMS_GRADEWHEREC_NUM>(SELECTC_NUMFROMS_GRADEWHERES#='S4')允许SELECTS#,AVG(GRADE)FROMSCASXWHERECOUNT(X.C#)>(SELECTCOUNT(Y.C#)FROMSCASYWHEREY.S#='S4')GROUPBYS#(4)UPDATES_GRADESETC_NUM=C_NUM+1WHERES#='S4'不允许(5)DELETEFROMS_GRADEWHEREC_NUM>4不允许
    3.10
    预处理方式对于嵌入式SQL的实现有什么重要意义?
    预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成宿主语言的函数调用形式;然后再用宿主语言的编译程序把源程序编译成目标程序.这样,不用扩充宿主语言的编译程序,就能处理SQL语句.
    3.11在宿主语言的程序中使用SQL语句有哪些规定?
    在宿主语言的程序中使用SLQ语句有以下规定:(1)在程序中要区分SQL语句与宿主语言语句(2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:1)引用时,这些变量前必须加":"作为前缀标识,以示与数据库中变量有区别.2)这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明.(3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调.需要采用游标机制,把集合操作转换成单记录处理方式.
    3.12
    SQL的集合处理方式与宿主语言单记录处理方式之间如何协调?
    由于SQL语句处理的是记录集合,而宿主语言语句一次只能处理一个记录,因此需要用游标(cousor)机制,把集合操作转换成单记录处理方式.
    2.13嵌入式SQL语句何时不必涉及到游标?何时必须涉及到游标?
    (1)INSERT,DELETE,UPDATE语句,查询结果肯定是单元组时的SELECT语句,都可直接嵌入在主程序中使用,不必涉及到游标.(2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用,一定要用游标机制把多个元组一次一个地传送给宿主语言处理.
    
  • 上一篇资讯: SQL语言基础
  • 下一篇资讯: sql语法学习
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师