《2022年ORACLE数据库习题 .pdf》由会员分享,可在线阅读,更多相关《2022年ORACLE数据库习题 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1.ORACLE 数据库物理结构包括以下三种文件,以下不属于的是()A系统文件B日志文件C数据文件D控制文件2.下列哪个命令是用于ORACLE 中数据导出的()AexpBimp Cinput Doutput 3.()是用于控制数据访问的语言。ADML BDDL CDCL DDLL 4.NULL 表示什么()A0 B空格C值D没有值5.下面四个语句中哪一个是正确的?()ASELECT*,ENAME FROM EMP;B DELETE*FROM EMP;C SELECT DISTINCT EMPNO,HIREDATE FROM EMP;D SELECT ENAME|SAL AS“name”FROM
2、 EMP;6.假定有一张表用户表users,其中一身份证字段ID_card。为了维护数据的完整性,在设计数据库时,最好对ID_card 字段添加约束,请问应该添加什么约束()A primary keyBcheck Cdefault Dnot null7.下面哪一个like 命令会返回名字象HOTKA的行?()A where ename like,_HOT%B where ename like,H_T%C where ename like,%TKA_ D where ename like,%TOK%8.()操作符只返回由第一个查询选定但是没有被第二个查询选定的行。A.UNION B.UNION
3、ALL C.INTERSECT D.MINUS 9EMPLOYEES表的结构如下:EMPLOYEE_ID NUMBER PRIMARY KEY FIRST_NAME VARCHAR2(25)LAST_NAME VARCHAR2(25)HIRE_DATE DATE 考虑下面的语句。1.CREATE table new_emp(employee_id NUMBER,name VARCHAR2(30);2.INSERT INTO new_emp SELECT employee_id,last_name from employees;3.Savepoint s2;4.DELETE from new_e
4、mp;5.ROLLBACK to s2;6.DELETE from new_emp where employee_id=180;7.UPDATE new_emp set name=James;8.ROLLBACK to s2;9.UPDATE new_emp set name=JamesWHERE employee_id=180;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 16 页 -10.ROLLBACK;完成本次事务处理以后,以下说法正确的有()A.表中没有行。B.有一个姓名为James的员工。C.不能多次回滚到相同的保存点。D.由于已经删除了员工ID180,因此最后一次
5、更新未更新任何行。10以下运算结果不为空值的是()A12+NULL B60*NULL CNULL?NULL?D12/(60+NULL)11若当前日期为?25-5 月-06?,以下()表达式能计算出5 个月后那一天所在月份的最后一天的日期。ANEXT_DAY(ADD_MONTHS(?28-5 月-06?,5)BNEXT_DAY(MONTHS_BETWEEN(?28-5 月-06?,5)CLAST_DA Y(MONTHS_BETWEEN(?28-5 月-06?,5)DLAST _DAY(ADD_MONTHS(?28-5 月-06?,5)12()子句用于列出唯一值。Aunique Bdistinct
6、 Corder by Dgroup by13哪一个是子查询执行的顺序()A最里面的查询到最外面的查询B最外面的查询到最里面的查询C简单查询到复杂查询D复杂查询到简单查询14下面哪一个语句可以使用子查询()ASELECT 语句B UPDATE 语句CDELETE 语句D以上都是15如果表DEPT 包含 3 条记录,现在用如下命令对其进行修改,ALTER TABLE DEPT ADD(COMP NUMBER(4)NOT NULL);请问下面哪一个说法是正确的()A该语句在表的最前面插入一个非空列B该语句在表的最后插入一个非空列C该语句执行完成后,应当立即执行COMMIT语句,以确保更改生效D该语句
7、将产生错误16下列哪个是组合主键的特征()A每列有唯一的值,但不是NULL 值B组合有唯一的值,并且其中每列没有NULL 值C组合的第一列和最后一列有唯一值D组合的第一列和最后一列有唯一值,但没有NULL 值17当删除父表中的数据时,在CREATE TABLE语句的外键定义中指定的()选项删除子表中的数据。AON TRUNCATE CASCADE BON DELETE CASCADE CON UPDA TE CASCADE 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 16 页 -DA 和 C 都是18视图可以用于()A限制对表中指定列的访问B限制对表中行的子集的访问CA 和
8、B 都是DA 和 B 都不是19语句 SELECT*FROM dept WHERE NOT EXISTS(SELECT*FROM emp WHERE deptno=dept.deptno)执行后的结果为()A只显示存在于EMP 表中的部门全部信息。B只显示不存在于EMP 表中的部门全部信息C未返回任何数据D显示 DEPT 表中的全部信息20已创建序列S1,若当前值为2,先执行 3 次 S1.CURRVAL,再执行 3 次 S1.NEXTV AL,最后 S1的值是()A3 B4 C5 D6 21 数据库中有两个用户scott 和 myuser,物资表wz 是属于 myuser 用户的,但当前用户
9、是 scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit 列为 null的记录,取结果的前5 条记录显示,以下正确的SQL 语句是()Aselect*from scott.wz where wunit is null and rownum5;Bselect*from myuser.wz where wunit=null and rownum5;Cselect*from myuser.wz where wunit is null and rownum6;Dselect*form scott.wz where wunit is null and rownu
10、m=100 AND=100 AND order_total5;B.SELECT ENAME FROM EMP1 WHERE HIRE_DATE-SYSDATE5;C.SELECT ENAME FROM EMP1 WHERE(SYSDATE-HIRE_DATE)/3655;D.SELECT ENAME FROM EMP1 WHERE(SYSDATE-HIRE_DATE)*3655;20在 Oracle 中,使用下列的语句:CREATE PUBLIC SYNONYM parts FOR Scott.inventory;完成的任务是()。(选择一项)A.需要给出 schema被除去的对象名B.指定了
11、新的对象权限C.指定了新的系统权限D.给 Scott.inventory对象创建一个公用同义词parts21在 Oracle 中,有一个名为seq_id 的序列对象,假定此时查看seq_id 序列当前值显示为100,那么执行下面的sql insert into test(id,name)values(seq_id.NEXTVAL,tom);很不幸,这个insert没有执行成功,随后马上执行rollback,问:此时查看seq_id序列当前值显示为()“选择一项”A.99 B、100 C、101 D、不能确定22 PL/SQL块中不能直接使用的SQL命令是()“选一项”A.SELECT B.IN
12、SERT C.UPDATE D.DROP 23在 PL/SQL块中,以零作除数时会引发下列()异常。(选择一项)A.VALUE_ERROR B.ZERO_DIVIDE C.VALUE_DIVIDE D.ZERO_ERROR 24在 Oracle 中,有一个名为seq 的序列对象,以下语句能返回序列值但不会引起序列值增加的是()(选择一项)A.select seq.ROWNUM from dual;B.select seq.NEXTVAL from dual;C.select seq.CURRVAL from dual;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 16 页 -D
13、.select seq.CURIVAL from dual;25当 Select Into语句的返回没有数据时,将引发下列哪个异常?()选择一项 A.No_Data_Found B.To_Many_Row C.Too_Many_Rows D.Invalid_Number 26创建序列时,若未指定Cycle 选项,则当前值大于MaxValue 时将()“选择一项”A.从 MinValue 重新开始循环B.重复使用MaxValue 值C.执行出错D.使用随机值27 PL/SQL块中哪几部分是可选的()“选择二项”A.Declare B.Begin C.Exception D.以上均是28在 Ora
14、cle 中,PL/SQL块中定义了一个带参数的游标:CURSOR emp_cursor(dnum NUMBER)IS SELECT sal,comm FROM emp WHERE deptno=dnum;那么正确打开此游标的语句是()(选择两项)E.OPEN emp_cursor(20);F.OPEN emp_cursor FOR 20;G.OPEN emp_cursor USING 20;H.FOR emp_rec IN emp_cursor(20)LOOP END LOOP;29在 Insert触发器中可使用的引用有()“选一项”A.new B.Old C.:Update D.:New和:
15、Old30下面哪些是过程中的有效参数模式?()“不定项选择”A.IN B.INOUT C.OUT D.OUT IN1.检索部门编号、部门名称、部门所在地及其每个部门的员工总数。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;2.检索员工和所属经理的姓名。select e.ename 雇员,m.ename 经理 from emp e,emp m where e.mgr=m.empno;3.检索工资等级处于第四级别的员工的姓
16、名。select e.ename from emp e inner join salgrade s on(e.sal between s.losal and s.hisal)where 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 16 页 -s.grade=4;4.检索工资等级高于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
17、(select sal from emp where ename=SMITH)between s.losal and s.hisal);5.检索 30 部门中 1980 年 1 月份之前入职的员工信息。显示:员工号、员工名、部门号,部门名、入职日期。select empno,ename,d.deptno,d.dname,hiredate from emp,dept d where emp.deptno=d.deptno and d.deptno=30 and hiredateto_date(1980-01-01,yyyy-mm-dd);6.检索雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名
18、。select e.ename 雇员,m.ename 经理,e.HIREDATE 雇员的雇佣日期,m.hiredate 经理雇佣日期from emp e,emp m where e.mgr=m.empno and e.hiredate=3 and num=8;14.检索与 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(s
19、elect avg(sal)from emp where deptno=30)between s.LOSAL and s.HISAL);15.求分段显示薪水的个数。显示结果如下:DEPTNO 800-2000 2001-5000-30 5 1 20 2 3 10 1 2 select t1.deptno,800-2000,2001-5000 from (select deptno,count(*)as 800-2000 from emp where sal between 800 and 2000 group by deptno)t1 join(select deptno,count(*)as
20、 2001-5000 from emp where sal between 2001 and 5000 group by deptno)t2 on t1.deptno=t2.deptno;16.用 PL/sql实现输出7369 号员工的姓名。-用 PL/sql 实现输出7369 员工的姓名;set serveroutput on;-将 sql*plus 的输出功能开启declare-声明部分var_empno number(4):=7369;-声明一个变量var_empno,并给赋值,用:=赋值var_name varchar2(10);-声明一个变量var_name 名师资料总结-精品资料欢
21、迎下载-名师精心整理-第 10 页,共 16 页 -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;-执行部分的结束,end后面要加;-执行结果为:7369 的名字是:SMITH PL/SQL 过程已成功完成。17.编写一 s
22、ql 语句,将7369 号员工的入职日期改为1997/7/1,工资提高800,其他信息不变。update emp set hiredate=to_date(1997/7/1,yyyy-mm-dd),sal=sal+800 where empno=7369;18.假定现在有一张表,表名为 T_emp,其表结构和现有的emp表结构完全相同,但是 T_emp中没有记录,请编写一sql 语句,实现将 emp中部门编号为20 的员工信息添加到T_emp中。19.对所有员工,如果该员工职位是MANAGER,并且在DALLAS工作那么就给他薪金加15;如果该员工职位是CLERK,并且在NEW YORK 工作
23、那么就给他薪金扣除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=c1re
24、c.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;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 16 页 -end;20.对直接上级是BLAKE 的所有员工,按照参加工作的时间加薪:1981 年 6 月以前入职的员工加薪10、1981 年 6 月以后入职的员工加薪5。要求:使用游标或函数编程实现。declare cursor c1 is select*from em
25、p where mgr=(select empno from emp where ename=BLAKE);-直接上级是 BLAKE 的所有员工c1rec c1%rowtype;begin for c1rec in c1 loop if c1rec.hiredate=2000 的所有雇员的详细资料select*from emp where(deptno=10 and job=upper(manager)or(deptno=20 and job=upper(clerk)or(jobupper(,manager?)and jobupper(,clerk?)and sal=2000)4.找出不收取佣
26、金或收取的佣金低于100 的雇员select*from emp where nvl(comm,0)(select avg(sal)from emp);8.显示除 20 部门外,部门平均工资在2500 以上的部门,列出部门编号和平均工资。select avg(sal),deptno from emp where deptno 20 group by deptno having avg(sal)2500;9.列出薪金等于部门30 中员工的薪金的所有员工的姓名和薪金。select*from emp where sal in(select sal from emp where deptno=30);1
27、0.列出所有部门的详细信息和部门人数。select a.*,(select count(*)from emp where deptno=a.deptno)tot from dept a;11.列出各种工作的最低月收入。名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 16 页 -select job,min(sal+nvl(comm,0)from emp group by job;12.返回工资水平(等级)高于平均工资水平的员工详细信息。select*from emp e join salgrade s on(e.sal between s.losal and s.hisal)w
28、here s.grade(select distinct s.grade from emp e join salgrade s on(select avg(sal)from emp)between s.losal and s.hisal);13.列出至少有两个员工的所有部门信息select*from dept where deptno in(select deptno from emp group by deptno having count(*)1);14.查询 emp 表的第 6 行到第 10 行内容Select*from(select rownum r,e.*from emp e)whe
29、re r between 6 and 10;15.查询入职最早的前5 到 10 名员工的姓名和入职日期(按年月日格式显示日期)Select ename,to_char(hiredate,?yyyy-mm-dd?)from(select ename,hiredate,rownum r from(select ename,hiredate from emp order by hiredate)where rownum=5;16.编写一 sql 语句,将 7369 号员工的入职日期改为1997/7/1,工资提高800,其他信息不变。update emp set hiredate=to_date(19
30、97/7/1,yyyy-mm-dd),sal=sal+800 where empno=7369;17.查询雇员和其直接领导姓名及他们所在部门名称,没有领导的雇员也要列出.select e.ename,ed.dname,m.ename,md.dname from emp e,emp m,dept ed,dept md where e.deptno=ed.deptno and e.mgr=m.empno(+)and m.deptno=md.deptno(+);18.列出部门编号,部门名称,部门的员工数量,部门的平均工资.select d.deptno,d.dname,t.cou,t.avg fro
31、m dept d,(select deptno,count(empno)cou,avg(sal)avg from emp group by deptno)t where d.deptno=t.deptno;19.定义游标update_cur,根据职务调整雇员的工资,如果职务为?SALESMAN?或者?ANAL YST?工资上调100 元,如果职务为?MANAGER?工资上调200 元,其它职务工资上调50 元。DECLARE v_job emp.job%TYPE;CURSOR update_cur IS SELECT job FROM emp FOR UPDATE;BEGIN OPEN emp
32、_cur;LOOP FETCH update_cur INTO v_job;EXIT WHEN emp_cur%NOTFOUND;CASE WHEN v_job=SALESMAN OR v_job=ANALYST THEN update emp set sal=sal+100 where current of emp_cur;名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 16 页 -WHEN v_job=MANAGER THEN update emp set sal=sal+200 where current of emp_cur;ELSE update emp set sa
33、l=sal+50 where current of emp_cur;END CASE;END LOOP;END;20.创建一个触发器,使其可以修改DEPT 表的 DEPTNO。create or replace trigger update_dept after update on dept for each row begin update emp set deptno=:new.deptno where deptno=:old.deptno;end;1.对所有员工,如果该员工职位是MANAGER,并且在DALLAS工作那么就给他薪金加15;如果该员工职位是CLERK,并且在 NEW YOR
34、K 工作那么就给他薪金扣除5;其他情况不作处理。要求:使用游标或函数编程实现。1.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 empn
35、o=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;2.用 PL/sql实现输出7369 号员工的姓名。set serveroutput on;-将 sql*plus 的输出功能开启declare-声明部分var_empno number(4):=7369;-声明一个变量var_empno,并给赋值,用:=赋值 var_name varchar2(10);-声明一个
36、变量var_name 名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 16 页 -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;-执行部分的结束,end后面要加;-执行结果为:7369 的名字是:SMITH
37、1.定 义 游 标update_cur,根 据 职 务 调 整 雇 员 的 工 资,如 果 职 务 为?SALESMAN?或者?ANAL YST?工资上调100 元,如果职务为?MANAGER?工资上调200 元,其它职务工资上调50 元。1.DECLARE v_job emp.job%TYPE;CURSOR update_cur IS SELECT job FROM emp FOR UPDATE;BEGIN OPEN emp_cur;LOOP FETCH update_cur INTO v_job;EXIT WHEN emp_cur%NOTFOUND;CASE WHEN v_job=SALE
38、SMAN OR v_job=ANALYST THEN update emp set sal=sal+100 where current of emp_cur;WHEN v_job=MANAGER THEN update emp set sal=sal+200 where current of emp_cur;ELSE update emp set sal=sal+50 where current of emp_cur;END CASE;END LOOP;END;2.创建一个触发器,使其可以修改DEPT 表的 DEPTNO。create or replace trigger update_dept after update on dept for each row begin update emp set deptno=:new.deptno where deptno=:old.deptno;end;名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 16 页 -