SQL综合练习(填空操作)

更新时间:2024-03-30 04:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一,选择题

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.0 B.空格 C.无任何值 D.空字符串

5,下列哪条语句不属于SQL数据操纵功能范围( )

A.SELECT B. CREAT TABLE C.DELETE D.INSERT

6,用( )命令可建立唯一索引

A.CREATE TABLE B.CREATE CLUSTER

C.CREATE INDEX D.CREATE UNIQUE INDEX

二,填空题

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,B 2,C 3,D 4,C 5,B 6,D

二,1,嵌入式 交互式 2,选择

3,基本表导出的表 4,数据查询 数据更新 数据插入 数据删除

5,视图或部分基本表 基本表 存储文件

6,GROUP BY

三,

1,名词解释

SQL模式:SQL模式是表和授权的静态定义.一个SQL模式定义为基本表的集合. 一个由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表,视图,索引等)的定义.

SQL数据库:SQL(Structured Query Language),即'结构式查询语言',采用英语单词表示和结构式的语法规则. 一个SQL数据库是表的汇集,它用一个或多个SQL模式定义.

基本表:在SQL中,把传统的关系模型中的关系模式称为基本表(Base Table). 基本表是实际存储在数据库中的表,对应一个关系.

视图:在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表和(或)其他视图构造出来的表.

相关子查询:在嵌套查询中出现的符合以下特征的子查询:子查询中查询条件依赖于外层查询中的某个值, 所以子查询的处理不只一次,要反复求值,以供外层查询使用.

联接查询:查询时先对表进行笛卡尔积操作,然后再做等值联接,选择,投影等操作. 联接查询的效率比嵌套查询低.

嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL.

游标:游标是与某一查询结果相联系的符号名,用于把集合操作转换成单记录处理方式.

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

SELECT C#,CNAME

FROM C

WHERE TEACHER='LIU'

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

SELECT S#,SNAME

FROM S

WHERE (AGE>23) AND (SEX='M')

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

SELECT SNAME

FROM S

WHERE SEX='F' AND S# IN

(SELECT S#

FROM SC

WHERE C# IN

(SELECT C#

FROM C

WHERE TEACHER='LIU')

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

SELECT SNAME

FROM S,SC,C

WHERE SEX='F' AND SC.S#=S.S#

AND SC.C#=C.C#

AND TEACHER='LIU'

但上一种写法更好一些.

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

SELECT C#

FROM C

WHERE C# NOT IN

(SELECT C#

FROM SC

WHERE S# IN

(SELECT S#

FROM S

WHERE SNAME='WANG'))

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

SELECT DISTINCT X.SNO

FROM SC X,SC Y

WHERE X.SNO=Y.SNO AND X.CNOY.CNO

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

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

SELECT C#,CNAME

FROM C

WHERE NOT EXISTS

(SELECT *

FROM S

WHERE S# NOT IN

(SELECT *

FROM SC

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

要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学.

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

SELECT *

FROM S

WHERE S# NOT IN

(SELECT *

FROM SC

WHERE SC.C#=C.C#)

或者

SELECT *

FROM S

WHERE NOT EXISTS

(SELECT *

FROM SC

WHERE S.S#=C.S# AND

SC.C#=C.C# )

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

SELECT DISTINCT S#

FROM SC

WHERE C# IN

(SELECT C#

FROM C

WHERE TEACHER='LIU'))

3,(1)SELECT A,B,C

FROM R

UNION

SELECT A,B,C

FROM S

(2)SELECT A,B,C

FROM R

INTERSECT

SELECT A,B,C

FROM S

(3)SELECT A,B,C

FROM R

WHERE NOT EXISTS

(SELECT A,B,C

FROM S

WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)

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

FROM R,S

WHERE R.B=S.B

4, (1)统计有学生选修的课程门数.

SELECT COUNT(DISTINCT C#) FROM SC

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

SELECT AVG(AGE)

FROM S

WHERE S# IN

(SELECT S#

FROM SC

WHERE C#='C4')

或者,

SELECT AVG(AGE)

FROM S,SC

WHERE S.S#=SC.S# AND C#='004'

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

SELECT CNAME,AVG(GRADE)

FROM SC ,C

WHERE SC.C#=C.C# AND TEACHER='LIU'

GROUP BY C#

(4)统计每门课程的学生选修人数(超过10人的课程才统计).要求输出课程号和选修人数, 查询结果按人数降序排列,若人数相同,按课程号升序排列.

SELECT DISTINCT C#,COUNT(S#)

FROM SC

GROUP BY C#

HAVING COUNT(S#)>10

ORDER BY 2 DESC, C# ASC

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

SELECT X.SNAME

FROM S AS X, S AS Y

WHERE Y.SNAME='WANG' AND X.S#>Y.S# AND X.AGE(SELECT AVG(AGE) FROM S AS Y WHERE Y.SEX='女')

5, (1)往基本表S中插入一个学生元组('S9','WU',18).

INSERT INTO S(S#,SNAME,AGE) VALUES('59','WU',18)

(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号,姓名和性别, 并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX).

INSERT INTO STUDENT(S#,SNAME,SEX)

SELECT S#,SNAME,SEX

FROM S WHERE NOT EXISTS

(SELECT * FROM SC WHERE

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

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

DELETE FROM SC

WHERE GRADE IS NULL

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

DELETE FROM SC

WHERE S# IN

(SELECT S#

FROM S

WHERE SNAME='WANG')

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

UPDATE SC

SET GRADE=NULL

WHERE GRADE<60 AND C# IN

(SELECT C#

FROM C

WHERE CNAME='MATHS')

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

UPDATE SC

SET GRADE=GRADE*1.05

WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S# FROM S WHERE SEX='F')

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

UPDATE SC

SET GRADE=GRADE*1.05

WHERE C#='C4' AND GRADE75

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

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

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

1)引用时,这些变量前必须加\作为前缀标识,以示与数据库中变量有区别.

2)这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明.

(3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调. 需要采用游标机制,把集合操作转换成单记录处理方式.

7, (1)INSERT,DELETE,UPDATE语句,查询结果肯定是单元组时的SELECT语句, 都可直接嵌入在主程序中使用,不必涉及到游标.

(2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用, 一定要用游标机制把多个元组一次一个地传送给宿主语言处理.

本文来源:https://www.bwwdw.com/article/5iqr.html

Top