数据库期末复习资料sql.docx

上传人:b****6 文档编号:5767084 上传时间:2023-01-01 格式:DOCX 页数:13 大小:22.76KB
下载 相关 举报
数据库期末复习资料sql.docx_第1页
第1页 / 共13页
数据库期末复习资料sql.docx_第2页
第2页 / 共13页
数据库期末复习资料sql.docx_第3页
第3页 / 共13页
数据库期末复习资料sql.docx_第4页
第4页 / 共13页
数据库期末复习资料sql.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据库期末复习资料sql.docx

《数据库期末复习资料sql.docx》由会员分享,可在线阅读,更多相关《数据库期末复习资料sql.docx(13页珍藏版)》请在冰豆网上搜索。

数据库期末复习资料sql.docx

数据库期末复习资料sql

对于教学数据库的三个基本表

    学生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老师所授课的学生学号。

   

设有两个基本表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))

设有两个基本表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)

试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:

学生S(S#,SNAME,AGE,SEX)

    学习SC(S#,C#,GRADE)

    课程C(C#,CNAME,TEACHER)

(1)统计有学生选修的课程门数。

(2)求选修C4课程的学生的平均年龄。

(3)求LIU老师所授课程的每门课程的学生平均成绩。

(4)统计每门课程的学生选修人数(超过10人的课程才统计)。

要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

(5)检索学号比WANG同学大,而年龄比他小的学生姓名。

(6)检索姓名以WANG打头的所有学生的姓名和年龄。

(7)在SC中检索成绩为空值的学生学号和课程号。

(8)求年龄大于女同学平均年龄的男学生姓名和年龄。

(9)求年龄大于所有女同学年龄的男学生姓名和年龄。

试用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语句实现)。

“仓库管理”关系模型有五个关系模式:

    零件 PART(P#,PNAME,COLOR,WEIGHT)

    项目 PROJECT(J#,JNAME,DATE)

    供应商 SUPPLIER(S#,SNAME,SADDR)

    供应 P_P(J#,P#,TOTOAL)

    采购 P_S(P#,S#,QUANTITY)

(1)试用SQL DDL语句定义上述五个基本表,并说明主键和外键。

(2)试将PROGECT、P_P、PART三个基本表的自然联接定义为一个视图VIEW1,PART、P_S、SUPPLIER三个基本表的自然联接定义为一个视图VIEW2。

(3)试在上述两个视图的基础上进行数据查询:

   1)检索上海的供应商所供应的零件的编号和名字。

  2)检索项目J4所用零件的供应商编号和名字。

   

对于教学数据库中基本表SC,已建立下列视图:

    CREATE VIEW S_GRADE(S#,C_NUM,AVG_GRADE)

     AS SELECT S#,COUNT(C#),AVG(GRADE)

      FROM SC

      GROUP BY S#

  试判断下列查询和更新是否允许执行。

若允许,写出转换到基本表SC上的相应操作。

  

(1)SELECT *

     FROM S_GRADE

  

(2)SELECT S#,C_NUM

      FROM S_GRADE

       WHERE AVG_GRADE>80

  (3)SELECT S#,AVG_GRADE

       FROM S_GRADE

       WHERE C_NUM>(SELECT C_NUM

               FROM S_GRADE

               WHERE S#=‘S4’)

  (4)UPDATE S_GRADE

       SET C_NUM=C_NUM+1

       WHERE S#=‘S4’

  (5)DELETE FROM S_GRADE

       WHERE C_NUM>4

 

对于教学数据库的三个基本表

    学生S(S#,SNAME,AGE,SEX)

    学习SC(S#,C#,GRADE)

    课程C(C#,CNAME,TEACHER)

   试用SQL的查询语句表达下列查询:

(1)检索LIU老师所授课程的课程号和课程名。

   SELECTC#,CNAME

   FROMC

   WHERETEACHER=‘LIU’

(2)检索年龄大于23岁的男学生的学号和姓名。

   SELECTS#,SNAME

   FROMS

   WHERE(AGE>23)AND(SEX=‘M’)

(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。

   SELECTSNAME

   FROMS

   WHERESEX=‘F’ANDS#IN

    (SELECTS#

    FROMSC

    WHEREC#IN

     (SELECTC#

     FROMC

     WHERETEACHER=‘LIU’)

NOTICE:

有多种写法,比如联接查询写法:

   SELECTSNAME

   FROMS,SC,C

   WHERESEX=‘F’ANDSC.S#=S.S#

   ANDSC.C#=C.C#

   ANDTEACHER='LIU'

但上一种写法更好一些。

(4)检索WANG同学不学的课程的课程号。

  SELECTC#

   FROMC

   WHEREC#NOTIN

    (SELECTC#

    FROMSC

    WHERES#IN

     (SELECTS#

     FROMS

     WHERESNAME='WANG'))

(5)检索至少选修两门课程的学生学号。

   SELECTDISTINCTX.SNO

   FROM SCX,SCY

   WHEREX.SNO=Y.SNOANDX.CNO<>Y.CNO

Notice:

对表SC进行自连接,X,Y是SC的两个别名。

(6)检索全部学生都选修的课程的课程号与课程名。

   SELECTC#,CNAME

   FROMC

   WHERENOTEXISTS

    (SELECT*

    FROMS

    WHERES#NOTIN

     (SELECT*

     FROMSC

     WHERE SC.C#=C.C#))

要从语义上分解:

(1)选择课程的课程号与课程名,不存在不选这门课的同学。

  其中,“不选这门课的同学”可以表示为:

SELECT*

 FROM S

 WHERE S#NOTIN

  (SELECT *

      FROMSC  

      WHERE SC.C#=C.C#)

 

或者

SELECT*

 FROM S

 WHERE  NOTEXISTS

  (SELECT *

      FROMSC  

     WHERES.S#=C.S#AND 

SC.C#=C.C#)

 

      

(7)检索选修课程包含LIU老师所授课的学生学号。

   

    SELECTDISTINCTS#

    FROMSC

    WHEREC#IN

     (SELECTC#

     FROMC

     WHERETEACHER='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.4 3.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,C

     FROMR

     UNION

     SELECTA,B,C

     FROMS

   

(2)SELECTA,B,C

     FROMR

     INTERSECT

     SELECTA,B,C

     FROMS

   (3)SELECTA,B,C

     FROMR

     WHERENOTEXISTS

      (SELECTA,B,C

      FROMS

      WHERER.A=S.AANDR.B=S.BANDR.C=S.C)

   (4)SELECTR.A,R.B,S.C

     FROMR,S

     WHERER.B=S.B

3.5 试叙述SQL语言的关系代数特点和元组演算特点。

(P61-62)

3.6 试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:

(1)统计有学生选修的课程门数。

   SELECTCOUNT(DISTINCTC#)FROMSC

(2)求选修C4课程的学生的平均年龄。

   SELECTAVG(AGE)

   FROMS

   WHERES#IN

    (SELECTS#

    FROMSC

    WHEREC#='C4')

或者,

   SELECTAVG(AGE)

   FROMS,SC

   WHERES.S#=SC.S#ANDC#='004'

(3)求LIU老师所授课程的每门课程的学生平均成绩。

   SELECTCNAME,AVG(GRADE)

   FROMSC,C

   WHERESC.C#=C.C#ANDTEACHER='LIU'

  GROUPBYC#  

(4)统计每门课程的学生选修人数(超过10人的课程才统计)。

要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

   SELECTDISTINCTC#,COUNT(S#)

   FROMSC

   GROUPBYC#

   HAVINGCOUNT(S#)>10

   ORDERBY2DESC,C#ASC

(5)检索学号比WANG同学大,而年龄比他小的学生姓名。

   SELECTX.SNAME

   FROMSASX,SASY

   WHEREY.SNAME='WANG'ANDX.S#>Y.S#ANDX.AGE

 

(6)检索姓名以WANG打头的所有学生的姓名和年龄。

   SELECTSNAME,AGE

   FROMS

   WHERESNAMELIKE'WANG%'

(7)在SC中检索成绩为空值的学生学号和课程号。

   SELECTS#,C#

   FROMSC

   WHEREGRADEISNULL

(8)求年龄大于女同学平均年龄的男学生姓名和年龄。

   SELECTSNAME,AGE

   FROMSASX

   WHERE X.SEX='男'ANDX.AGE>(SELECTAVG(AGE)FROMSASYWHEREY.SEX='女')

(9)求年龄大于所有女同学年龄的男学生姓名和年龄。

   SELECTSNAME,AGE

   FROMSASX

   WHEREX.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,SEX

    FROMSWHERE NOTEXISTS

      (SELECT*FROMSCWHERE

      GRADE<80ANDS.S#=SC.S#)

(3)在基本表SC中删除尚无成绩的选课元组。

   DELETEFROMSC

    WHEREGRADEISNULL

(4)把WANG同学的学习选课和成绩全部删去。

   DELETEFROMSC

    WHERES#IN

     (SELECTS#

     FROMS

     WHERESNAME='WANG')

(5)把选修MATHS课不及格的成绩全改为空值。

   UPDATESC

   SETGRADE=NULL

   WHEREGRADE<60ANDC#IN

     (SELECTC#

     FROMC

     WHERECNAME='MATHS')

(6)把低于总平均成绩的女同学成绩提高5%。

   UPDATESC

   SETGRADE=GRADE*1.05

   WHEREGRADE<(SELECTAVG(GRADE)FROMSC)ANDS#IN(SELECTS#FROMSWHERESEX='F')

(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。

   UPDATESC

    SETGRADE=GRADE*1.05

    WHEREC#='C4'ANDGRADE<=75

   UPDATESC

    SETGRADE=GRADE*1.04

    WHEREC#='C4'ANDGRADE>75

3.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)试用SQL DDL语句定义上述五个基本表,并说明主键和外键。

   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,TOTAL

         FROMPROJECT,PART,P_P

         WHEREPART.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,QUANTITY

         FROMPART,P_S,SUPPLIER

         WHEREPART.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,已建立下列视图:

    CREATE VIEW S_GRADE(S#,C_NUM,AVG_GRADE)

     AS SELECT S#,COUNT(C#),AVG(GRADE)

      FROM SC

      GROUP BY S#

  试判断下列查询和更新是否允许执行。

若允许,写出转换到基本表SC上的相应操作。

  

(1)SELECT *

     FROM S_GRADE

     允许

   SELECTS#,COUNT(C#),AVG(GRADE)FROMSCGROUPBYS#

  

(2)SELECT S#,C_NUM

      FROM S_GRADE

       WHERE AVG_GRADE>80

   允许

   SELECTS#,COUNT(C#)FROMSCWHEREAVG(GRADE)>80

  (3)SELECT S#,AVG_GRADE

       FROM S_GRADE

       WHERE C_NUM>(SELECT C_NUM

               FROM S_GRADE

               WHERE S#=‘S4’)

   允许

   SELECTS#,AVG(GRADE)

   FROMSCASX

   WHERECOUNT(X.C#)>(SELECTCOUNT(Y.C#)FROMSCASYWHEREY.S#='S4')

   GROUPBYS#

  (4)UPDATE S_GRADE

       SET C_NUM=C_NUM+1

       WHERE S#=‘S4’

   不允许

  (5)DELETE FROM S_GRADE

       WHERE C_NUM>4

   不允许

3.10 预处理方式对于嵌入式SQL的实现有什么重要意义?

   预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成宿主语言的函数调用形式;然后再用宿主语言的编译程序把源程序编译成目标程序。

这样,不用扩充宿主语言的编译程序,就能处理SQL语句。

3.11在宿主语言的程序中使用SQL语句有哪些规定?

在宿主语言的程序中使用SLQ语句有以下规定:

(1)在程序中要区分SQL语句与宿主语言语句

(2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:

   1)引用时,这些

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1