SQL习题Word文件下载.docx
《SQL习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《SQL习题Word文件下载.docx(74页珍藏版)》请在冰豆网上搜索。
基本表:
在SQL中,把传统的关系模型中的关系模式称为基本表(BaseTable).基本表是实际存储在数据库中的表,对应一个关系.
视图:
在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表和(或)其他视图构造出来的表.
相关子查询:
在嵌套查询中出现的符合以下特征的子查询:
子查询中查询条件依赖于外层查询中的某个值,所以子查询的处理不只一次,要反复求值,以供外层查询使用.
联接查询:
查询时先对表进行笛卡尔积操作,然后再做等值联接,选择,投影等操作.联接查询的效率比嵌套查询低.
嵌入式SQL:
嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL.
游标:
游标是与某一查询结果相联系的符号名,用于把集合操作转换成单记录处理方式.
2,对于教学数据库的三个基本表
学生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
WHERESEX='
F'
ANDS#IN
(SELECTS#
FROMSC
WHEREC#IN
(SELECTC#
FROMC
WHERETEACHER='
NOTICE:
有多种写法,比如联接查询写法:
SELECTSNAME
FROMS,SC,C
WHERESEX='
ANDSC.S#=S.S#
ANDSC.C#=C.C#
ANDTEACHER='
但上一种写法更好一些.
(4)检索WANG同学不学的课程的课程号.
SELECTC#
WHEREC#NOTIN
WHERES#IN
FROMS
WHERESNAME='
WANG'
))
(5)检索至少选修两门课程的学生学号.
SELECTDISTINCT(自连接)X.s###
GROUPBYX.s#
HAVINGcount(x.s#)>
=2;
Notice:
对表SC进行自连接,X,Y是SC的两个别名.
(6)检索全部学生都选修的课程的课程号与课程名.
WHERENOTEXISTS
(SELECT*
WHERES#NOTIN
WHERESC.C#=C.C#))
要从语义上分解:
(1)选择课程的课程号与课程名,不存在不选这门课的同学.
其中,"
不选这门课的同学"
可以表示为:
SELECT*
WHERES#NOTIN
(SELECT*
FROMSC
WHERESC.C#=C.C#)
或者
WHERES.S#=C.S#AND
SC.C#=C.C#)
(7)检索选修课程包含LIU老师所授课的学生学号.
SELECTDISTINCTS#
WHEREC#IN
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)
3,
(1)SELECTA,B,C
FROMR
UNION
SELECTA,B,C
(2)SELECTA,B,C
INTERSECT
4,试用SQL查询语句表达下列对教学数据库中三个基本表S,SC,C的查询:
(1)统计有学生选修的课程门数.
SELECTCOUNT(DISTINCTC#)
(2)求选修C4课程的学生的平均年龄.
SELECTAVG(AGE)
FROMS
WHERES#IN(SELECTS#
WHEREC#='
C4'
);
(3)求LIU老师所授课程的每门课程的学生平均成绩.
SELECTAVG(GRADE)
FROMSC
WHEREC#=(SELECTC#
FROMC
WHEREC.TEACHER=’LIU’)
GROUPBYC#;
或
SELECTCNAME,AVG(GRADE)
FROMSC,C
WHERESC.C#=C.C#ANDTEACHER='
GROUPBYC#
(4)统计每门课程的学生选修人数(超过10人的课程才统计).要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列.
SELECTDISTINCTC#,COUNT(S#)
GROUPBYC#
HAVINGCOUNT(S#)>
10
ORDERBY2DESC,C#ASC
(5)检索学号比WANG同学大,而年龄比他小的学生姓名.
SELECTSname
WHERES#>
(SELECTS#
WHERES.Sname=’WANG’)
ANDAGE<
(SELECTAGE
WHERES.AGE=’WANG’);
(6)检索姓名以WANG打头的所有学生的姓名和年龄.
SELECTSname,age
WHERESnamelike‘WANG%’;
(7)在SC中检索成绩为空值的学生学号和课程号.
SELECTS#,C#
WHEREgrade=NULL;
(8)求年龄大于女同学平均年龄的男学生姓名和年龄.
SELECTSNAME,AGE
FROMS
WHEREAGE>
(SELECTAVG(AGE)
FROMS
WHERESEX='
)
ANDSEX=’M’;
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,名词解释
游标是与某一查询结果相联系的符号名,用于把集合操作转换成单记录处理方式.
2,
(1)检索LIU老师所授课程的课程号和课程名.
(SELECTS#
(SELECTC#
FROMS,SC,C
ANDSC.S#=S.S#
ANDSC.C#=C.C#
ANDTEACHER='
WHERES#IN
WHERESNAME='
SELECTDISTINCTX.SNO
FROMSCX,SCY
WHEREX.SNO=Y.SNOANDX.CNOY.CNO
WHERESC.C#=C.C#))
WHER,S.C
FROMR,S
WHERER.B=S.B
4,
(1)统计有学生选修的课程门数.
SELECTCOUNT(DISTINCTC#)FROMSC
(2)求选修C4课程的学生的平均年龄.
SELECTAVG(AGE)
或者,
FROMS,SC
WHERES.S#=SC.S#ANDC#='
004'
(3)求LIU老师所授课程的每门课程的学生平均成绩.
(4)统计每门课程的学生选修人数(超过10人的课程才统计).要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列.
ORDERBY2DESC,C#ASC
(5)检索学号比WANG同学大,而年龄比他小的学生姓名.
SELECTX.SNAME
FROMSASX,SASY
WHEREY.SNAME='
ANDX.S#>
Y.S#ANDX.AGE(SELECTAVG(AGE)FROMSASYWHEREY.SEX='
女'
5,
(1)往基本表S中插入一个学生元组('
18).
INSERTINTOS(S#,SNAME,AGE)VALUES('
59'
18)
(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号,姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX).
INSERTINTOSTUDENT(S#,SNAME,SEX)
SELECTS#,SNAME,SEX
FROMSWHERENOTEXISTS
(SELECT*FROMSCWHERE
GRADE<
80ANDS.S#=SC.S#)
(3)在基本表SC中删除尚无成绩的选课元组.
DELETEFROMSC
WHEREGRADEISNULL
(4)把WANG同学的学习选课和成绩全部删去.
(5)把选修MATHS课不及格的成绩全改为空值.
UPDATESC
SETGRADE=NULL
WHEREGRADE<
60ANDC#IN
WHERECNAME='
MATHS'
6)把低于总平均成绩的女同学成绩提高5%.
SETGRADE=GRADE*1.05
(SELECTAVG(GRADE)FROMSC)ANDS#IN(SELECTS#FROMSWHERESEX='
ANDGRADE75
6,在宿主语言的程序中使用SLQ语句有以下规定:
(1)在程序中要区分SQL语句与宿主语言语句
(2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:
1)引用时,这些变量前必须加"
:
"
作为前缀标识,以示与数据库中变量有区别.
2)这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明.
(3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调.需要采用游标机制,把集合操作转换成单记录处理方式.
7,
(1)INSERT,DELETE,UPDATE语句,查询结果肯定是单元组时的SELECT语句,都可直接嵌入在主程序中使用,不必涉及到游标.
(2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用,一定要用游标机制把多个元组一次一个地传送给宿主语言处理.
Oracle面试题库-PL/SQL
1PL/SQL代表
APROCEDURALLANGUAGE/SQL
BPROGRAMLANGUAGESQL
CPOWERLANGUAGESQL
D都不对
2_____引擎执行PL/SQL块
ASQL
BPL/SQL
CORACLE
3一个对象可以呈现多种形式的能力称为
A多态
B继承
C封装
D以上都不对
4PLSQL块是由哪几个部分组成
ADECLAREBEGINEND
BBEGINEND
CEXCEPTIONBEGINEND
DDECLAREBEGINEXCEPTIONEND
5看下面代码,正确的是
ADECLARE
DBMS_OUTPUT.PUT_LINE(‘定义部分’);
BEGIN
DBMS_OUTPUT.PUT_LINE(‘语句部分’);
END;
BBEGIN
NUMNUMBER:
=100;
DBMS_OUTPUT.PUT_LINE(‘NUM的值为:
’||NUM);
CDECLARE
NUM:
=NUM+NUM/2;
DBEGIN
DECLARE
6看下面语句正确的是
AIF(N%M=0)THEN
DBMS_OUTPUT.PUT_LINE(‘这是一个偶数’);
ELSEIF(N%M=1)THEN
DBMS_OUTPUT.PUT_LINE(‘这是一个奇数’);
ENDIF;
BDECLARE
VARNUMBER:
=0;
VAR:
=&
V;
CASE
WHENVAR=1THEN
DBMS_OUTPUT.PUT_LINE(‘A’);
WHENVAR=2THEN
DBMS_OUTPUT.PUT_LINE(‘B’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘O’);
ENDCASE;
INUMBER:
FORIIN10..20LOOP
DBMS_OUTPUT.PUT_LINE(I);
ENDLOOP;
DLOOP
7.当在一个PLSQL块中通过查询得到一个值,但是没有任何值返回时,会产生异常吗?
如果产生,是什么异常?
A不会有异常,只不过没有结果而已
B有异常,异常为No_data_found
C有异常,异常为Value_erro
D编译都不通过
8.在PLSQL块中处理异常的语句是
AEXCEPTION
IFEXCEPTION_NAMETHEN
DBMS_OUTPUT.PUT_LINE();
BEXCEPTION
WHENEXCEPTION_NAMETHEN
ENDEXCEPTION;
CWHENEXCEPTION_NAMETHEN
NULL;
EXCEPTION
END;
9.当用户在PLSQL块中,像抛出自定义异常或者是系统异常时,所使用的关键字是
ATHROW
BRAISE
CRAISE_APPLICATION_ERROR
DEXCEPTION
10.在自定义异常中,用户可用的错误号范围在
A20000~29999
B-20000~-20999
C1~65535
D没有限制
11.阅读代码
DBMS_OUTPUT.PUT_LINE(‘外不快’);
MYEXCEEXCEPTION;