SQL习题.doc_第1页
SQL习题.doc_第2页
SQL习题.doc_第3页
SQL习题.doc_第4页
SQL习题.doc_第5页
免费预览已结束,剩余141页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关系数据库语言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.0 B.空格 C.无任何值 D.空字符串5,下列哪条语句不属于SQL数据操纵功能范围( )A.SELECT B. CREAT TABLE C.DELETE D.INSERT6,用( )命令可建立唯一索引A.CREATE TABLE B.CREATE CLUSTERC.CREATE INDEX D.CREATE UNIQUE INDEX二,填空题1,SQL语言的使用方式有两种,一种是嵌入式 ,另一种是交互式2,在SQL查询中,WHERE子句的功能是选择.3,视图是一个虚表,它是从基本表导出的表的表.4,SQL语言的数据操纵功能包括数据查询, 数据更新, 数据插入,和数据删除,5,在SQL支持的关系数据库三级模式结构,外模式对应于中视图或部分基本表 ,模式对应于基本表 ,内模式对应于存储文件.6,在SELECT语句中,HAVING子句必须跟在GROUP BY 子句后面.三,问题及操作题1,名词解释SQL模式 SQL数据库 基本表 视图 相关子查询 联接 SQL模式:SQL模式是表和授权的静态定义.一个SQL模式定义为基本表的集合. 一个由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表,视图,索引等)的定义. SQL数据库:SQL(Structured Query Language),即结构式查询语言,采用英语单词表示和结构式的语法规则. 一个SQL数据库是表的汇集,它用一个或多个SQL模式定义. 基本表:在SQL中,把传统的关系模型中的关系模式称为基本表(Base Table). 基本表是实际存储在数据库中的表,对应一个关系. 视图:在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表和(或)其他视图构造出来的表. 相关子查询:在嵌套查询中出现的符合以下特征的子查询:子查询中查询条件依赖于外层查询中的某个值, 所以子查询的处理不只一次,要反复求值,以供外层查询使用. 联接查询:查询时先对表进行笛卡尔积操作,然后再做等值联接,选择,投影等操作. 联接查询的效率比嵌套查询低. 嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL. 游标:游标是与某一查询结果相联系的符号名,用于把集合操作转换成单记录处理方式.2,对于教学数据库的三个基本表 学生 S(S#,SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE) 课程 C(C#,CNAME,TEACHER) 试用SQL的查询语句表达下列查询: (1)检索LIU老师所授课程的课程号和课程名. SELECT C#,CNAME FROM C WHERE TEACHER=LIU (2)检索年龄大于23岁的男学生的学号和姓名. SELECT S#,SNAME FROM S WHERE (AGE23) 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.s# FROM SC X,SC Y WHERE X.S#=Y.S# GROUP BY X.s#HAVING count(x.s#)=2;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, 设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式: (1)RS (2)RS (3)R-S (4)A,B(R)B,C(S) 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.B4, 试用SQL查询语句表达下列对教学数据库中三个基本表S,SC,C的查询:(1)统计有学生选修的课程门数.SELECT COUNT(DISTINCT C#) FROM SC (2)求选修C4课程的学生的平均年龄.SELECT AVG(AGE)FROM SWHERE S# IN (SELECT S# FROM SC WHERE C#=C4); (3)求LIU老师所授课程的每门课程的学生平均成绩.SELECT AVG(GRADE)FROM SCWHERE C#=(SELECT C#FROM CWHERE C.TEACHER=LIU)GROUP BY C#;或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 SnameFROM SWHERE S#(SELECT S#FROM SWHERE S.Sname=WANG)AND AGE(SELECT AVG(AGE) FROM S WHERE SEX=F)AND SEX=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,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 (AGE23) 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.B4, (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 GRADE80 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 GRADE60 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语句查询结果是多个元组时,此时宿主语言程序无法使用, 一定要用游标机制把多个元组一次一个地传送给宿主语言处理.Oracle面试题库-PL/SQL1 PL/SQL代表A PROCEDURAL LANGUAGE/SQLB PROGRAM LANGUAGE SQLC POWER LANGUAGE SQLD 都不对2 _引擎执行PL/SQL块A SQLB PL/SQLC ORACLED 都不对3 一个对象可以呈现多种形式的能力称为A 多态B 继承C 封装D 以上都不对4 PLSQL块是由哪几个部分组成A DECLARE BEGIN ENDB BEGIN ENDC EXCEPTION BEGIN ENDD DECLARE BEGIN EXCEPTION END5 看下面代码,正确的是A DECLAREDBMS_OUTPUT.PUT_LINE(定义部分);BEGINDBMS_OUTPUT.PUT_LINE(语句部分);END;B BEGINNUM NUMBER:=100;DBMS_OUTPUT.PUT_LINE(NUM 的值为:|NUM);END;C DECLARENUM NUMBER:=100;BEGINNUM:=NUM+NUM/2;DBMS_OUTPUT.PUT_LINE(NUM 的值为:|NUM);END;D BEGINNUM NUMBER:=100;DECLARENUM:=NUM+NUM/2;DBMS_OUTPUT.PUT_LINE(NUM 的值为:|NUM);END;6 看下面语句正确的是A IF(N%M=0) THENDBMS_OUTPUT.PUT_LINE(这是一个偶数);ELSEIF(N%M=1) THENDBMS_OUTPUT.PUT_LINE(这是一个奇数);END IF;B DECLAREVAR NUMBER:=0;BEGINVAR:=&V;CASEWHEN VAR=1 THENDBMS_OUTPUT.PUT_LINE(A);WHEN VAR=2 THENDBMS_OUTPUT.PUT_LINE(B);ELSEDBMS_OUTPUT.PUT_LINE(O);END CASE;END;C DECLAREI NUMBER:=0;BEGINFOR I IN 10.20 LOOPDBMS_OUTPUT.PUT_LINE(I);END LOOP;END;D LOOPDBMS_OUTPUT.PUT_LINE(I);END LOOP;7. 当在一个PLSQL块中通过查询得到一个值,但是没有任何值返回时,会产生异常吗?如果产生,是什么异常?A 不会有异常,只不过没有结果而已B 有异常,异常为No_data_foundC 有异常,异常为Value_erroD 编译都不通过8. 在PLSQL块中处理异常的语句是A EXCEPTIONIF EXCEPTION_NAME THENDBMS_OUTPUT.PUT_LINE();END;B EXCEPTIONWHEN EXCEPTION_NAME THENDBMS_OUTPUT.PUT_LINE();END EXCEPTION ;C WHEN EXCEPTION_NAME THENDBMS_OUTPUT.PUT_LINE();D BEGINNULL;EXCEPTIONWHEN EXCEPTION_NAME THENDBMS_OUTPUT.PUT_LINE();END ;9. 当用户在PLSQL块中,像抛出自定义异常或者是系统异常时,所使用的关键字是A THROWB RAISEC RAISE_APPLICATION_ERRORD EXCEPTION10. 在自定义异常中,用户可用的错误号范围在A 20000 29999B -20000 -20999C 165535D 没有限制11. 阅读代码DECLAREBEGINDBMS_OUTPUT.PUT_LINE(外不快);DECLAREMYEXCE EXCEPTION;BEGINRAISE MYEXCE;END;EXCEPTIONWHEN MYEXCE THENDBMS_OUTPUT.PUT_LINE(异常捕获);END;出现的结果是A 编译时报错 PLS-00201: 必须说明标识符 MYEXCEB 运行时报错,在外部无法捕获到内部异常C 可以正常执行D 编译时报错,PLSQL块不能嵌套12. 使用游标的步骤,有哪几步A 打开游标、使用游标、关闭游标B 定义游标、打开游标、使用游标、关闭游标C 定义游标、使用游标、关闭游标D 定义游标、打开游标、使用游标、13 游标有哪几种类型A 静态游标、动态游标B 隐式游标、显示游标C 变量游标、常量游标D 参数游标、ref 游标14 阅读下列代码DECLARETOTALEMP NUMBER;BEGINSELECT COUNT(*) INTO TOTALEMP FROM EMP;IF(SQL%FOUND) THENDBMS_OUTPUT.PUT_LINE(有数据);END IF;END;这段代码中是否使用了游标,如果使用了,使用的是什么类型的游标A 使用了游标,游标类型为参数游标B 使用了游标,游标类型为隐式游标C 使用了游标,游标类型为ref 游标D 这段代码中根本没有使用到游标15. 下列哪个游标的定义是正确的A TYPE CURSOR EMPCUR IS SELECT * FROM EMP;B TYPE EMPCUR IS CURSOR OF SELECT * FROM EMP;C CURSOR EMPCUR IS SELECT * FROM EMP;D TYPE EMPCUR IS REF CURSOR AS SELECT * FROM EMP;16 在存储过程中,参数模式有哪几种A IN、OUTB IN、OUT、IN OUTC INPUT、OUTPUTD OUT INOUT17 关于存储过程返回值的类型,说法对的是A 只能是基本类型B 可以是任何类型C 只能是 NUMBER VARCHAR2 DATE BOOLEAND 可以使基本类型和用户类型18 存储过程和函数的区别是A 过程可以返回多个值,而函数只能返回一个值B 函数可以作为PLSQL表达式的一部分,而过程不能C 函数可以返回多个值,过程只能返回一个D 函数和过程都必须包含RETURN语句19 过程和函数的重载,正确的是A Oracle中过程和函数不能重载B Oracle中的过程和函数只有在包中存在时,才能被重载C Oracle中的过程和函数随时随地都可以被重载D 函数可以重载,过程不能被重载20 Oracle中程序包的特点是A 可以写函数和过程B 任何能够定义在声明部分的内容,都可以出现在包中,包就是用来对代码进行封装的C 包是一个可选结构,其中只能定义函数和过程D 定义在包中的过程和函数不能被外部代码所访问21 下面关于保的说法错误的是A 有包头,就必须有包体B 包可分为包头和包体两部分,但包体不是必须的C 如果只用函数和过程,则可以只有包体,没有包头D 包可以继承22 阅读代码,函数被正确重载是A CREATE OR REPLACE PACKAGE TESTPACKAGE ASFUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2)RETURN BOOLEAN;FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 IN OUT VARCHAR2)RETURN BOOLEAN;END TESTPACKAGE;B CREATE OR REPLACE PACKAGE TESTPACKAGE ASFUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2);RETURN BOOLEAN;FUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM3 OUT VARCHAR2);RETURN VARCHAR2;END TESTPACKAGE;C CREATE OR REPLACE PACKAGE TESTPACKAGE ASFUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2);RETURN BOOLEANFUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT NUMBER);RETURN OBJECTEND TESTPACKAGE;D CREATE OR REPLACE PACKAGE TESTPACKAGE ASFUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2);RETURN BOOLEANFUNCTION PROCEDURE_NAME(PARAM1 IN NUMBER,PARAM2 OUT CHAR);RETURN OBJECTEND TESTPACKAGE;23 触发器有哪些级别A 行级触发器和字段级触发器B 行级触发器C 语句及触发器D行级触发器和语句及触发器26 触发器有哪些种类A BEFORE和AFTERB BEFORE 和BEFORE ROWC AFTER 和AFTER STATEMENTD FOR EACH ROW和FOR EACH STATEMENT27 触发器的执行过程是A 行前(多次)、语句前(多次)、行后(多次)、语句后(一次)B 语句前(一次)、行前(多次)、字段有效验证、行后(多次)、语句后(一次)C语句前(一次)、语句后(一次)、行前(多次)、行后(多次)D行前(多次)、行后(多次)、语句前(一次)、语句后(一次)28 触发器的动作有哪几个A INSERT、UPDATE、DELETEB INSERT、ALTER、DROPC UPDATE、CREATED REMOVE、INSERT、DELETE29 看代码CREATE OR REPLACE TRIGGER STUDENTUPDATEINFOAFTER INSERT OR UPDATE OR DELETE ON STUDENTFOR EACH ROWWHEN (NEW.STUID IS NOT NULL OR OLD.STUID IS NOT NULL)BEGINCASEWHEN INSERTING THENDBMS_OUTPUT.PUT_LINE(:NEW.STUNAME);DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME);DBMS_OUTPUT.NEW_LINE();DBMS_OUTPUT.PUT_LINE(STUDENT表增加一条信息!);WHEN UPDATING THENDBMS_OUTPUT.PUT_LINE(:NEW.STUNAME);DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME);DBMS_OUTPUT.NEW_LINE();DBMS_OUTPUT.PUT_LINE(STUDENT表更新一条信息!);ELSEDBMS_OUTPUT.PUT_LINE(:NEW.STUNAME);DBMS_OUTPUT.PUT_LINE(:OLD.STUNAME);DBMS_OUTPUT.NEW_LINE();DBMS_OUTPUT.PUT_LINE(STUDENT表删除一条信息!);END CASE;END;当执行了以下命令后INSERT INTO STUDENT VALUES(STU0010,TOM,TB007,JAVA);UPDATE SET CALSSNAME=ORACLE WHERE STUID=STU0010;DELETE STUDENT WHERE STUID=STU0010输出结果为:A INSERT后输出: TOM TOM STUDENT表增加一条信息!UPDATE后输出: TOM TOM STUDENT表更新一条信息!DELETE后输出: TOM TOM STUDENT表删除一条信息!B INSERT后输出: TOM STUDENT表增加一条信息!UPDATE后输出: TOM TOM STUDENT表更新一条信息!DELETE后输出: TOM STUDENT表删除一条信息!C INSERT后输出: TOM TOM STUDENT表增加一条信息!UPDATE后输出: TOM STUDENT表更新一条信息!DELETE后输出: TOM STUDENT表删除一条信息!D INSERT后输出: TOM STUDENT表增加一条信息!UPDATE后输出: TOM TOM STUDENT表更新一条信息!DELETE后输出: STUDENT表删除一条信息!Oracle PL/SQL练习题总目录第一章:Oracle概述(安装及常见对象)书面作业1、Oracle实例和数据库的概念和关系是什么?2、SGA的各个组成部分的名称和作用,PGA与它有什么区别?3、数据库的逻辑结构是什么?4、视图是什么,有什么作用?5、为什么要用同义词,与视图有什么区别?6、为什么要用,序列在Oracle中通常有什么用?7、dual是什么表,有什么作用?8、scott是什么,有什么用?9、谈谈对Oracle的认识(体系架构)?10、SGA三个部分为什么能够提高性能?代码作业1、使用scott用户登录以后,创建班级表和学生表,并用insert插入一些数据,学号要求用序列seqStu产生。2、创建查询各班男女人数的视图,并用select查询这个视图。3、为学生表创建私有同义词,使用以后再删除这个同义词。4、使用dual查询根据指定格式(年月日时分秒)今天的日期,以及当前的日期。(查询:sysdate,to_date,to_char)参考答案:第一章1、Oracle实例和数据库的概念和关系是什么?参考:数据库,就是指保存与用户数据相关的各种文件,如数据文件、索引文件、日志文件等。在Oracle中,还有控制文件,密码文件等。实例:就是指管理这些文件的程序。启动以后叫做进程,同时还需要分配内存。2、SGA的各个组成部分的名称和作用,PGA与它有什么区别?参考:SGA包含三个部分共享池:提升了程序执行的效率日志缓冲区:提升了数据修改的效率数据缓冲区:提升了查询的效率SGA内存是所有进程都可以访问的,而PGA中连接到Oracle的某个程序专用的。3、数据库的逻辑结构是什么?参考:块:最小存储空间区:最小分配空间段:不同的数据类型在不同的段,如索引段、数据段、临时段、回滚段(修改以后的数据先在回滚段)表空间:对应数据文件,一个表空间可以有多个文件,一个文件只能属于一个表空间4、视图是什么,有什么作用?参考:视图就是一个包含一条查询语句的对象,它能够简化复杂sql语句的调用。如果在java程序中使用视图,则sql改变时,java程序也不需要改。实现了sql的复用。5、为什么要用同义词,与视图有什么区别?参考:在需要给对象一个新的名称时可以使用同义词。视图中包含了一条查询语句,而同义词相当于是一个对象快捷方式。6、为什么要用,序列在Oracle中通常有什么用?参考:序列能够非常高效的提供一个不重复的整数。Oracle中没有自动增长的数据类型,所以经常用序列来为主键提供编号。7、dual是什么表,有什么作用?参考:dual是一个系统表,叫做哑表。通常用于计算表达式的值。8、scott是什么,有什么用?参考:scott是安装Oracle以后自带的一个用户,主要目的是为了提供一些原始数据,以方便学习SQL和PL/SQL。9、谈谈对Oracle的认识(体系架构)?回答:Oracle的体系很复杂,复杂的原因是(需要充分利用内存),它在整体上分(实例)和(数据库)两部分。实例主要由(SGA)和(后台进程)组成。其中与Oracle性能关系最大的是(SGA),它包含三个部分分别是(数据缓冲区,日志缓冲区,共享池)。数据缓冲区(避免重复读取常用的数据),日志缓冲区(减少了磁盘的读写);共享池(减少了相同SQL的编译,提高了SQL执行的速度)。10、SGA三个部分为什么能够提高性能?共享池:使相同的SQL不再编译;SQL所涉及的表结构(数据字典)不再从系统表中读取。日志缓冲:减少了写日志时对磁盘的访问次数,提高了数据增删改的速度数据缓冲:因为避免再读取已经被读取过数据而加快速度。第二章:定义变量1、Oracle表有几种数据类型?其中CLOB,BLOB有什么用?2、Oracle脚本中变量有几种数据类型,哪些变量是表不能使用的类型?3、定义各种标量数据类型,并分别举例。4、替代变量是什么,它能保存数据吗?5、table类型有什么用,为什么它的索引可以负?6、根据员工编号打印:ename(员工姓名)、dname(部门名称)要求分别使用三种方法1、type2、rowtype (提示:视图%rowtype)3、record第二章参考答案-用typedeclare v_empno emp.empno%type;v_ename emp.ename%type;v_dname dept.dname%type;beginv_empno := &请输入编号;select ename,dname into v_ename,v_dname from emp,deptwhere emp.deptno = dept.deptno and empno = v_empno;dbms_output.put_line(v_ename|,|v_dname);end;-recorddeclare v_empno emp.empno%type;type my_type is record( v_ename emp.ename%type, v_dname dept.dname%type);v_row my_type;beginv_empno := &请输入编号;select ename,dname into v_row from emp,deptwhere emp.deptno = dept.deptno and empno = v_empno;dbms_output.put_line(v_row.v_ename|,|v_row.v_dname);end;-视图create or replace view v_emp as select ename,dname,empno from emp,dept where emp.deptno=dept.deptno;-使用视图%rowtypedeclare v_row v_emp%rowtype;v_empno emp.empno%type;beginv_empno := &请输入编号;select * into v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论