oracle复习题讲解

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

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

一、选择题

1. Oracle数据表中,下面哪个可以作为有效的列名( A )(选择一项) A. class B. 123_NUM C. date D. #123_NUM

2. Oracle中的三种系统文件分别是( ABC )〔选择三项〕 A. 数据文件 DBF B. 控制文件 CTL C. 日志文件 LOG D. 归档文件 ARC

3. 下面哪个命令可以用来查看学生表(表名student)的表结构( C )〔选择一项〕

A. Select student ; B. Display student ; C. Describe student ; D. Show student ;。

4. 下面哪个命令不属于数据定义语言(DDL)( D )(选择一项) A. alter table… B、drop index… C、 create view… D、update tablename…

5. 在设计数据库时,要充分考虑数据的完整性或准确性。下面关于primary key和unique的描述错误的是( )〔选择一项)

A. primary key用来在表中设置主键,主键列的值是不能重复的,用来唯一标识表中的每一条记录

B. 设为unique的列的值是不能重复的,用来唯一区别unique列的值 C. primary key列不可以有null值, 而unique列是可以有null的 D. primary key列和unique列都不可以有null值

6. 假定有一张表员工表employee,其中一性别字段sex,该列只能存入'男'或'女'。为了维护数据的完整性,在设计数据库时,最好对sex字段添加约束,请问应该添加什么约束( B )(选择一项)

A. primary key B、check C、default D、unique 7. 为表TEST中ID列添加主键约束的语法是( D )〔选择一项〕 A. ALTER TABLE TEST CHANGE( ID INT PRIMARY KEY) B. ALTER TABLE TEST ADD( ID INT PRIMARY KEY)

C. ALTER TABLE TEST MODIFY( ID INT PRIMARY KEY) D. ALTER TABLE TEST ADD CONSTRAINT PK PRIMARY KEY (ID) 8. 如果表DEPT包含3条记录,现在用如下命令对其进行修改, ALTER TABLE DEPT ADD(COMP NUMBER(4) NOT NULL); 请问下面哪一个说法是正确的?( D )(选择一项) A. 该语句在表的最前面插入一个非空列 B. 该语句在表的最后插入一个非空列

C. 该语句执行完成后,应当立即执行COMMIT语句,以确保更改生效 D. 该语句将产生错误

9. 关于聚合行数描述错误的是( B )〔选择一项) A. avg(), sum() 只能用于数值类型的字段上 B. max() , min() 只能用于数值类型的字段上

C. max() , min() 可以用于数值类型 或 日期类型 或 字符串类型的字段上

D. count()可以用于任何类型的字段上

10.删除emp表中所有数据,且无法rollback,以下语句哪个命令可以实现(A )(选择一项)

A. truncate table emp B. drop table emp C. delete * from emp D. delete from emp

11.你发出命令: DROP TABLE emp;

此时你还没有明确发出COMMIT命令。你能用什么命令撤消上面的drop语句所做的操作?( D )〔选择一项〕

A. 关闭数据库

B. 发出一个ROLLBACK命令 C. 终断正在活动的会话

D. 什么命令都不可以,因为DDL语句不能被回滚

12.有Oracle表”cd”,它包含属性”cdcode”,”category”

和”cdname”,你要查询category取值为”CLASSIC”或”ROCK”的行,你采用语句( A )(选择两项)

A. SELECT * FROM cd WHERE category IN ('CLASSIC','ROCK'); B. SELECT * FROM cd WHERE category BETWEEN 'CLASSIC' AND 'ROCK'; C. SELECT * FROM cd WHERE category='CLASSIC' AND category='ROCK';

D. SELECT * FROM cd WHERE category='CLASSIC' OR category='ROCK' 13.更改oracle用户HR,使其变为不可用(锁定)状态( D )〔选择一项〕

A. UPDATE USER HR ACCOUNT DISABLE ; B. UPDATE USER HR ACCOUNT LOCK ; C. ALTER USER HR ACCOUNT DISABLE ; D. ALTER USER HR ACCOUNT LOCK ;

14.INSERT INTO TEST VALUES(‘&ID’, ’&NAME’); 语句在执行时将(D )〔选择一项〕

A. 编译错:提示变量未定义 B. 运行错:提示不能识别符号 C. 将值&ID和&NAME插入到表中

D. 提示用户输入ID和NAME的值,再将输入值插入表中

15.下面关于删除视图的说法哪一个是正确的( B )。(选择一项) A. 删除视图后应立即用COMMIT语句使更改生效 B. 删除视图后,和视图关联的表中的数据依然存在 C. 视图被删除后视图中的数据也将被删除 D. 用delete VIEW删除视图

16.若update emp set salary=1000 中缺少where 条件:( A )(选择一项)

A. 更改表中所有记录 B. 更改第一条记录 C. 记录未更改。

D. 提示错误:缺少where字句

19. 在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列值增加的是( C )(选择一项)

A. select seq.ROWNUM from dual; B. select seq.ROWID from dual; C. select seq.CURRVAL from dual; D. select seq.NEXTVAL from dual;

20. 在Oracle中,有一个名为seq的序列对象,假定此时查看seq序列当前值显示为7,那么执行下面的sql

insert into stu(id, name) values(seq.NEXTVAL,'tom' );

很不幸,这个insert没有执行成功,随后马上执行rollback,问:此时查看seq序列当前值显示为(B )〔选择一项〕

A. 6 B、8 C、7 D、不能确定

21. Oracle中,在一个PL/SQL块中调用另一个PL/SQL过程的方法是( D )(选择一项)

A. 使用CALL语句 B. 使用EXECUTE语句 C. 使用RUN语句 D 直接使用过程名

22. 关于聚合行数描述错误的是( B )。 A. avg(), sum() 只能用于数值类型的字段上 B. max() , min() 只能用于数值类型的字段上

C. max() , min() 可以用于数值类型 或 日期类型 或 字符串类型的字段上

D. count()可以用于任何类型的字段上

23. PL/SQL块中哪几部分是可选的( A )〔选择二项〕 A Declare B Begin C Exception D 以上均是

24. 在触发器中可使用的引用有( D )〔选一项〕 A new B Old C :Update D :New和:Old

25. 如果表DEPT包含3条记录,现在用如下命令对其进行修改, ALTER TABLE DEPT ADD(COMP NUMBER(4) NOT NULL); 请问下面哪一个说法是正确的( D ) A. 该语句在表的最前面插入一个非空列 B. 该语句在表的最后插入一个非空列

C. 该语句执行完成后,应当立即执行COMMIT语句,以确保更改生效 D. 该语句将产生错误

26.( C )是用于控制数据访问的语言。 A.DML B.DDL C.DCL D.DLL

27. 数据定义语言是用于( B )的方法。〔选择一项〕 A. 确保数据的准确性 B、定义和修改数据结构

C、查看数据 D、删除和更新数据、

28. 要以自身的模式创建私有同义词,用户必须拥有( C )系统权限。〔选择一项〕

A CREATE PRIVATE SYNONYM B CREATE PUBLIC SYNONYM C CREATE SYNONYM D CREATE ANY SYNONYM

29. 通常情况下,( BD )值可以唯一地标识数据库中的一行。〔选择二项〕 A ROWNUM B PRIMARY KEY C UNIQUE D ROWID

30. Oracle数据表中,下面哪个可以作为有效的列名__A____。 A. class B. 123_NUM C. date D. #123_NUM

31. 你发出命令: DROP TABLE emp;

此时你还没有明确发出COMMIT命令。你能用什么命令撤消上面的drop语句所做的操作?( B )〔选择一项〕

A 关闭数据库

B 什么命令都不可以,因为DDL语句不能被回滚 C 发出一个ROLLBACK命令 D 终断正在活动的会话

32. 以下哪些是有效的Oracle约束类型?( ACEG )(选择四项) A. UNIQUE B.NONUNIQUE C. CHECK D.CASCADE E. PRIMARY KEY F.CONSTANTG G.NOT NULL

33.更改oracle用户HR,使其变为不可用(锁定)状态( C )〔选择一项〕

A UPDATE USER HR ACCOUNT DISABLE ; B UPDATE USER HR ACCOUNT LOCK ; C ALTER USER HR ACCOUNT LOCK ; D ALTER USER HR ACCOUNT DISABLE ;

34.( B )函数通常用来计算累计排名、移动平均数和报表聚合等。〔选择一项)

A 汇总 B 分析 C 分组 D 单行

35.PL/SQL块中不能直接使用的SQL命令是( D )〔选一项〕 A. SELECT B. INSERT C. UPDATE D DROP

36. 下面哪些是过程中的有效参数模式?( ABC )〔不定项选择〕 A.IN B. INOUT C.OUT D. OUT IN 37.一般在( D )中有机会使用:NEW和:OLD A.游标 B.存储过程 C.函数 D.触发器

38.在Oracle中,PL/SQL块中定义了一个带参数的游标: CURSOR emp_cursor(dnum NUMBER) IS

SELECT sal, comm FROM emp WHERE deptno = dnum; 那么正确打开此游标的语句是(D ) A. OPEN emp_cursor; B. OPEN emp_cursor FOR 20; C. OPEN emp_cursor USING 20;

D. FOR emp_rec IN emp_cursor(20) LOOP … END LOOP; 39.( C )是一个单一的逻辑工作单元。 A.记录 B.数据库 C.事务 D.字段

40.当每个非主键列完全依赖于(整个)主键列时,关系设计属于下列哪一种形式( B )

A.第一范式 B.第二范式 C.第三范式 D.第四范式 41.下面的查询中哪一个会产生笛卡尔集?( B )

A.SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d

WHERE e.deptno = d.deptno;

B.SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d;

C.SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d

WHERE e.empno = 101 and e.deptno = d.deptno;

D.SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d

WHERE e.deptno= d.deptno and d.deptno = 60;

42.当给一个有主键的表中插入重复行时,将引发下列哪个异常?( C ) A.NO_DATA_FOUND B.TOO_MANY_ROWS C.DUP_VAL_ON_INDEX D.ZERO_DIVIDE

43.授予删除任何表的系统权限(DROP ANY TABLE)给user1,并使其能继续授该权限给其他用户,以下正确的SQL语句是( B )

A.Grant drop any table to user1;

B.Grant drop any table to user1 with admin option; C.Grant drop table to user1;

D.Grant drop any table to user1 with check potion;

44. 数据库中有两个用户scott和myuser,物资表wz是属于myuser用户的,但当前用户是scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit列为null的记录,取结果的前5条记录显示,以下正确的SQL语句是( C )

A.select*from scott.wz where wunit is null and rownum<5; B.select*from myuser.wz where wunit = null and rownum<5; C.select*from myuser.wz where wunit is null and rownum<6; D.select*form scott.wz where wunit is null and rownum<6; 45.已创建序列S1,若当前值为2,先执行3次S1.CURRVAL,再执行3次S1.NEXTVAL,最后S1的值是( C )

A.3 B.4 C.5 D.6

46.语句SELECT * FROM dept WHERE NOT EXISTS (SELECT * FROM emp WHERE deptno=dept.deptno)执行后的结果为( B )

A.只显示存在于EMP表中的部门全部信息。 B.只显示不存在于EMP表中的部门全部信息 C.未返回任何数据

D.显示DEPT表中的全部信息

47.视图可以用于( C ) A.限制对表中指定列的访问 B.限制对表中行的子集的访问 C.A和B都是 D.A和B都不是

48.当删除父表中的数据时,在CREATE TABLE语句的外键定义中指定的( B )选项删除子表中的数据。

A.ON TRUNCATE CASCADE B.ON DELETE CASCADE C.ON UPDATE CASCADE D.A和C都是

49.下列哪个是组合主键的特征( B ) A.每列有唯一的值,但不是NULL值

B.组合有唯一的值,并且其中每列没有NULL值 C.组合的第一列和最后一列有唯一值

D.组合的第一列和最后一列有唯一值,但没有NULL值 50.下面哪一个语句可以使用子查询( D ) A.SELECT 语句 B.UPDATE语句 C.DELETE语句 D.以上都是 51.哪一个是子查询执行的顺序( A ) A.最里面的查询到最外面的查询 B.最外面的查询到最里面的查询 C.简单查询到复杂查询 D.复杂查询到简单查询

52.若当前日期为’25-5月-06’,以下( D )表达式能计算出5个月后那一天所在月份的最后一天的日期。

A.NEXT_DAY(ADD_MONTHS(’28-5月-06’,5)) B.NEXT_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) C.LAST_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) D.LAST_DAY(ADD_MONTHS(’28-5月-06’,5)) 53.以下运算结果不为空值的是( C ) A.12+NULL B.60*NULL C.NULL‖’NULL’

D.12/(60+NULL)

54. 下面哪一个like命令会返回名字象HOTKA的行?( B ) A. where ename like ‘_HOT%' B. where ename like ‘H_T%' C. where ename like ‘%TKA_' D. where ename like ‘%TOK%' 55.( B )子句用于列出唯一值。

A.unique B.distinct C.order by D.group by

二、SQL编写题

1.统计公司有多少个岗位(工种的个数)。 select count(distinct job) from emp;

2.检索出10部门或20部门的员工信息,显示字段:empno、ename、deptno。 select empno,ename,deptno from emp where deptno=10 or deptno=20;

3.检索公司员工中姓张的员工信息。显示字段:empno、ename、deptno。 select empno,ename,deptno from emp where ename like ‘张%’;

4. 检索部门编号、部门名称、部门所在地及其每个部门的员工总数。 select d.deptno,d.dname,d.loc,count(*) from emp e,dept d where e.deptno=d.deptno group by d.deptno,d.dname,d.loc;

5.检索10部门中1980年2月份之前入职的员工信息。显示:empno、ename、deptno、hiredat e。

select * from emp where deptno=10 and

hiredate

6. 检索工资等级高于smith的员工信息。

select * from emp e join salgrade s on (e.sal between s.losal and s.hisal) where s.grade>(select distinct s.grade from emp e join salgrade s on ((select sal from emp where ename='SMITH') between s.losal and s.hisal));

7.按部门号(deptno) 及工资(sal)排序检索公司的员工信息(要求部门号从小到大 ,部门号相同的按工资由高到低),显示的字段为:empno、ename、sal、deptno。

select empno,ename,sal,deptno from emp order by deptno asc,sal desc;

8. 检索与SCOTT从事相同工作的员工信息。

select * from emp where job=(select job from emp where ename='SCOTT');

9. 检索与30部门员工工资等级相同的员工姓名与工资。

select * from emp e join salgrade s on (e.sal between s.LOSAL and s.HISAL) where s.grade=(select distinct s.grade from emp e join salgrade s on ((select avg(sal) from emp where deptno=30) between s.LOSAL and s.HISAL));

10.检索每位员工的年收入(基本计算方法为:(月工资sal+月奖金comm)*12 ),显示字段:员工号、员工名、年收入(要求年收入有别名‘年收入’)。

select empno,ename,((sal+nvl(comm,0))*12) as 年收入 from emp;

11.检索和名叫SCOTT的员工相同工资的员工信息,但不显示SCOTT。显示字段:员工号、员工名、工资。

select empno,ename,sal from emp where sal =(select sal from emp where ename='SCOTT') and ename!='SCOTT';

12. 检索雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名。<自连接>

select e.ename 雇员,m.ename 经理,e.HIREDATE 雇员的雇佣日

期,m.hiredate 经理雇佣日期 from emp e,emp m where e.mgr=m.empno and e.hiredate

13.检索出员工表emp中的第6条到第10条记录。显字段:emp表中的全部字段。

select * from (select rownum num,e.* from emp e) where num>=6 and num<=10;

14. 检索出员工的总工资及平均工资 select sum(sal),avg(sal) from emp;

15. 检索工资在2000元至4000元之间的员工信息。 select * from emp where sal between 2000 and 4000;

16.编写一sql语句,将7521号员工的入职日期改为1998/5/26,工资提高500 ,其他信息不变。

update emp set

hiredate=to_date(‘1998-05-26’,’yyyy-mm-dd’),sal=sal+500 where empno=7521;

17.删除部门20下的所有员工。 delete from emp where deptno=20;

18. 编写SQL语句,将部门30下的员工工资下调5%。 update emp set sal=sal*0.95 where deptno=30;

19、查询所在部门编号为20,工资高于2500或岗位是CLERK的所有雇员信息

select * from emp where DEPTNO=20 and SAL>2500 or JOB='CLERK';

20、查询所在部门为20/30的,岗位不是CLERK或SALESMAN的雇员信息 select * from emp where DEPTNO in (20,30) and JOB not in('SALESMAN','CLERK');

21、查询工资在2500-3500之间,1981年出生的没有领到补助的雇员信息 select * from emp where SAL between 2500 and 3500 and to_char(HIREDATE,'yyyy')='1981' and COMM is null;

22、查询姓名首字母为A或第二个字符为B的雇员信息

select * from emp where ENAME like'A%' or ENAME like'_B%';

23、部门编号降序姓名升序

select * from emp order by DEPTNO desc,ename asc;

24、每个部门平均工资和最高工资

select avg(SAL),max(SAL) from emp group by DEPTNO; 25、每个部门平均工资和最高工资按平均工资排序

select avg(SAL),max(SAL) from emp group by DEPTNO order by avg(SAL) desc;

26、显示每个部门、每种岗位的平均工资和最高工资 select avg(SAL),max(SAL) from emp group by DEPTNO,JOB;

27、查询平均工资高于2000的部门编号,部门的工资和最高工资 select DEPTNO,avg(SAL),max(SAL) from emp group by DEPTNO having avg(SAL)>2000;

28、查询emp表所在部门30的雇员及管理员的姓名

select 雇员表.ename,管理员表.ename from emp 雇员表,emp 管理员表 where 雇员表.MGR=管理员表.EMPNO and EMPNO=30;

29、显示工作在new york的雇员信息

select * from emp inner join dept on emp.deptno=dept.deptno where dept.loc='NEW YORK';

30. 用PL/SQL实现输出7369号员工的姓名。 set serveroutput on; declare

var_empno number(4) := 7369 ; var_name varchar2(10); var_sal number(9,2); begin

select ename ,sal into var_name ,var_sal from emp where empno = var_empno;

dbms_output.put_line(var_empno || ' 的名字是 :' || var_name); dbms_output.put_line(var_empno || ' 的工资是 :' || var_ sal ); end;

31. 对所有员工,如果该员工职位是MANAGER,并且在DALLAS工作那么就给他薪金加15%;如果该员工职位是CLERK,并且在NEW YORK工作那么就给他薪金扣除5%;其他情况不作处理。要求:使用游标或函数编程实现。

set serveroutput on; declare

cursor c1 is select * from emp; c1rec c1%rowtype; v_loc varchar2(20); begin

for c1rec in c1 loop

select loc into v_loc from dept where deptno = c1rec.deptno; if c1rec.job = 'MANAGER' and v_loc = 'DALLAS' then

update emp set sal = sal * 1.15 where empno = c1rec.empno; elsif c1rec.job='CLERK' and v_loc = 'NEW YORK' then

update emp set sal = sal * 0.95 where empno = c1rec.empno; else null; end if; end loop; end;

32、将插入的雇员的名字变成以大写字母开头。 CREATE OR REPLACE TRIGGER INITCAP BEFORE INSERT ON EMP FOR EACH ROW BEGIN

:new.ename:=INITCAP(:new.ename); END;

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

Top