搜档网
当前位置:搜档网 › oracle练习题

oracle练习题

oracle练习题
oracle练习题

oracle练习题

查询练习一

--查询姓名首字母为“A”或第二个字符为“A”的所有员工信息

SELECT*

FROM emp

WHERE ename LIKE'A%'

OR ename LIKE'_A%';

--查询部门20和30中的、岗位不是“CLERK”或“SALESMAN”的所有员工信息SELECT*

FROM emp

WHERE job !='CLERK'

AND job !='SALESMAN'

AND deptno IN(20,30);

--查询出工资在2500-3500之间,1981年入职的,没有奖金的所有员工信息SELECT*

FROM emp

WHERE EXTRACT(YEARFROM hiredate) =1981

AND sal BETWEEN2500AND3000

AND comm ISNULL;

--查询比平均员工工资高的员工信息

SELECT deptno, dname, loc

FROM dept

WHERE deptno IN(

SELECT deptno

FROM emp

GROUPBY deptno

HAVINGAVG(sal) >2000

);

--查询平均工资高于2000的部门信息

select deptno ,dname,loc

from dept

where deptno in(select deptno

from emp

groupby deptno

havingavg(sal)>2000);

--查询出ward的工作所在地

SELECT loc

FROM dept

WHERE deptno IN(

SELECT deptno

FROM emp

WHERE ename ='WARD'

);

--查询出工资比ADAMS高的所有人姓名、部门、所在地

SELECT a.ename, b.dname, a.sal

FROM emp a, dept b

WHERE a.deptno = b.deptno

AND a.sal> (

SELECT sal

FROM emp

WHERE ename ='ADAMS'

);

--查询出工资排名第7的员工信息

SELECT*

FROM(

SELECT rank() OVER (ORDERBY sal DESC)AS rk, emp.*

FROM emp

)

WHERE rk =7;

/*minue:两个结果值相减,

uniou:两个结果集拼到一起

(1~7)-(1~6)=排名第7

*/

--查询与部门20岗位不同的员工工资

SELECT sal, job,deptno

FROM emp

WHERE job NOTIN(

SELECT job

FROM emp

WHERE deptno =20

);

--验证 --20部门的岗位

/*select job

from emp

where deptno=20;*/

--查询与smith部门岗位完全相同的员工姓名、工作、工资SELECT*

FROM emp

WHERE deptno IN(

SELECT deptno

FROM emp

WHERE ename ='SMITH'

)

AND job IN(

SELECT job

FROM emp

WHERE ename ='SMITH'

);

--查询emp表中的所有信息

select*

from emp;

--查询emp表中的员工姓名和工资

select ename,sal

from emp;

--查询emp表中部门编号为20的并且sal大于3000的所有员工信息select*

from emp

where deptno=20and sal>3000;

--查询emp表中部门编号为20的或者sal大于3000的所有员工信息select*

from emp

where deptno=20or sal>3000;

--使用between and查询工资在2000到4000之间的员工

select*

from emp

where sal between2000and4000;

--使用in查询部门编号10,20的所有员工

select*

from emp

where deptno in(10,20);

--使用like查询所有名字中包括W的员工信息

select*

from emp

where ename like'%W%';

--使用like查询所有员工名字中的第二子字母为W的员工信息

select*

from emp

where ename like'_W%';

--查询所有员工信息并按照部门编号和工资进行排序

select*

from emp

orderby deptno,sal ;

--显示员工共工资上浮20%的结果

select sal+sal*0.2

from emp;

/*最后一题的另一种思路

minue:两个结果值相减,

uniou:两个结果集拼到一起

(1~7)-(1~6)=排名第7

*/

--11显示emp表的员工姓名以及工资和奖金的和

--12显示dept表的内容,使用别名将表头转换成中文显示

--13查询员工姓名和工资,并按工资从小到大排序

--14查询员工姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示

--15查询员工信息,先按部门标号从小到大排序,再按雇佣日期的先后排序

多表查询练习

/*多表查询练习*/

/*多表查询练习*/

select*from emp where job ='MANAGER';

select*from dept;

select*from salgrade;

--列出在部门sales工作的员工的姓名

select ename

from emp a, dept b

where b.dname ='SALES'

and a.deptno = b.deptno;

--列出所有员工的姓名,部门名称和工资

select ename, dname, sal from emp a, dept b where a.deptno = b.deptno;

--列出所有部门的详细信息和部门人数

select*

from dept

fulljoin(select deptno,count(*)from emp groupby deptno) b on dept.deptno = b .deptno;

--列出各个部门职位为manager的最低薪金

select deptno,min(sal) 最低薪金

from emp

where job in'MANAGER'

groupby deptno;

--查询出部门人数至少是1的部门名字

select dname

from dept

fulljoin(select deptno,count(*) 人数from emp groupby deptno)

b on dept.deptno =

b.deptno

where人数>=1;

--列出工资比smith多的员工

select*from emp where sal> (select sal from emp where ename ='SMITH');

--列出所有员工的对应领导的姓名

select a.*, b.ename领导from emp a leftjoin emp b on b.empno = a.mgr;

--求出某个员工的领导,并要求这些领导的薪水高于或等于3000

select a.ename, a.sal

from emp a, emp b

where a.empno = b.mgr

and a.sal>=3000;

--列出部门名称,和这些部门的员工信息

select dname, a.*from emp a, dept b where a.deptno = b.deptno;

--列出所有职位为clerk的员工姓名及其部门名称,部门的人数

SELECT ename, dname, a.*, job

FROM emp, dept b

FULLJOIN(SELECT deptno,COUNT(*)AS人数FROM emp GROUPBY deptno) a ON b.deptno =

a.deptno

WHERE emp.deptno = a.deptno

AND job ='CLERK';

--列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级@

select e1.ename, dname, e2.ename 领导, e1.sal,s.grade

from emp e1, dept d, emp e2, salgrade s

where e1.mgr = e2.empno(+)

and e1.deptno = d.deptno

and e1.sal > (selectavg(sal)from emp)

and e1.sal between s.losal and s.hisal;

--列出与scott从事相同工作的所有员工共及部门名称

select ename, dname

from dept d, emp e

where d.deptno = e.deptno

and e.job = (select job from emp where ename ='SCOTT');

--列出薪金大与部门30中的任意员工的薪金的所有员工的姓名和薪金

select ename, sal

from emp

where sal>ANY(select sal from emp where deptno =30);

--列出薪金大雨部门30中的全部员工的信息的所有员工的姓名和薪金,部门名称

SELECT e.*, dname

FROM emp e, dept d

WHERE sal>ALL(SELECT sal FROM emp WHERE deptno =30)

AND d.deptno = e.deptno;

--列出每个部门的员工数量,平均工资

SELECTcount(*) 人数,avg(sal), deptno FROM emp GROUPBY deptno;

--列出每个部门的员工数量,平均工资和平均服务期限(月)@

select deptno,

count(*) 员工数量,

trunc(avg(sal + nvl(comm,0))) 平均工资,

to_char(to_date('0001-01','yyyy-mm') +avg(sysdate- hiredate) -366-31,

'yy"年"mm"月') 平均服务期限

from emp

groupby deptno;

/*select sysdatesysdate+(sysdate-hiredate),

from emp*/

--列出各种工作的最低工资及从事工资最低工资的雇员名称@

select e.ename, a.*

from emp e

rightjoin(selectmin(sal) 最低工资, job from emp groupby job) a on e.job =

a. job

where e.sal = a.最低工资;

--求出部门名称带字符…S?的部门员工,工资合计,部门人数@

select dname, a.*

from dept d

fulljoin(selectsum(sal) 工资合计, deptno from emp groupby deptno)

a on d.deptno =

a.deptno

where dname like'%S%';

--求出部门平均工资以及等级

select d.dname, b.*, s.grade

from salgrade s,

dept d,

(selectavg(sal) 平均工资, deptno from emp groupby deptno) b

where d.deptno(+) = b.deptno

and b.平均工资between s.losal and s.hisal;

--不使用函数查询工资最高人的信息

select*from emp where sal>=all(select sal from emp);

--求出平均工资最高的部门名称

select d.dname, b.平均工资

from dept d,

(selectavg(sal) 平均工资, deptno from emp groupby deptno) b

where d.deptno = b.deptno

and b.平均工资>=all

(selectavg(sal) 平均工资from emp groupby deptno);

--求平均工资的等级最低的部门名称 @

select dname, b.grade

from dept,

(select grade, deptno

from salgrade,

(select deptno,avg(sal) 平均工资from emp e groupby deptno) a where a.平均工资between losal and hisal) b

where b.grade =

(selectmin(grade)

from salgrade,

(select deptno,avg(sal) 平均工资from emp e groupby deptno) a where a.平均工资between losal and hisal)

and b.deptno = dept.deptno;

--部门经理人中平均工资最低的部门名称

select dname, a.*

from dept,

(selectavg(sal), rank() over(orderbyavg(sal)) rk, deptno from emp

where job ='MANAGER'

groupby deptno) a

where a.rk =1

and dept.deptno = a.deptno;

selectsysdate,sysdate-hiredate,sysdate+(sysdate-hiredate)

fromemp

selectdeptno,count(*) 员工数量,

trunc(avg(sal+nvl(comm,2))) 平均工资,

to_char(to_date('0001-01','yyyy-mm')

+avg(sysdate-hiredate)-366-31,'yy"年"mm"月') 平均服务期限fromempgroupbydeptno;

to_char(to_date('0001-01','yyyy-mm')

+avg(sysdate-hiredate)-366-31,'ddddd"天') 平均服务期限

pl/sql练习题

--1.自定义输入任意员工编号,输出该员工编号、姓名、工资、部门名称、所在地

declare

empno integer;

ename varchar2(10);

sal integer;

dname varchar2(20);

loc varchar2(20);

i integer;

begin

select empno, ename, sal, dname, loc

into empno, ename, sal, dname, loc

from emp,dept

where emp.deptno = dept.deptno

and empno = &i;

dbms_output.put_line('姓名:'||ename||chr(13)||'工

资:'||sal||chr(13)||'部门名称:'||dname||chr(13)||'所在地:'||loc); exception

when no_data_found then

dbms_output.put_line('工号不存在');

end;

--2.自定义输入任意员工编号,如果该员工入职时间大于10年,则奖金加1W,如果该员工入职时间大于五年,奖金加5000,否则奖金不加,最终输出员工编号、姓名、入职时间、原奖金、现奖金

--【--第六天1.2】

declare

empno integer;

ename varchar2(10);

hiredate date;

comm integer;

comm1 integer;

years int;

i number;

begin

i := &i;

select empno, ename, hiredate, comm

into empno, ename, hiredate, comm

from emp

where empno = i;

select months_between(sysdate, hiredate)

into years

from emp

where empno = i;

dbms_output.put_line('员工编号:'|| empno || chr(13) ||'姓名:'|| ename ||

chr(13) ||'入职时间'|| hiredate || chr(13) ||'原奖金'|| comm ||

chr(13));

if years /12>10then

select comm +10000into comm1from emp where empno = i;

elsif years /12>5then

select comm +5000into comm1from emp where empno = i;

endif;

dbms_output.put_line('现奖金'|| comm1);

end;

--3.自定义输入部门编号,查询出该部门编号下所有员工信息(姓名、工资、部门编号),并显示信息条数

declare

ename emp.ename%type;

sal emp.sal%type;

deptnoemp.deptno%type;

i number:= &i;

cursor c1is

select ename, sal, deptno from emp where deptno = i;

begin

open c1;

loop

fetch c1

into ename, sal, deptno;

if c1%foundthen

dbms_output.put_line('姓名'|| ename || chr(13) ||'工资'|| sal || chr(13) ||'部门编号:'|| deptno || chr(13));

else

dbms_output.put_line('查询完毕!');

dbms_output.put_line('共有'|| c1%rowcount||'条记录');

exit;

endif;

endloop;

close c1;

end;

--4.自定义输入员工编号,若该员工工资低于5000,则加奖金500l;

--若员工工资高于5000,则加奖金100;

--最终输出员工编号、姓名、工资、原奖金、先奖金

declare

empnoemp.empno%type;

enameemp.ename%type;

sal emp.sal%type;

comm https://www.sodocs.net/doc/d69589049.html,m%type;

comm1 https://www.sodocs.net/doc/d69589049.html,m%type;

i number:= &i;

begin

select empno, ename, comm, sal

into empno, ename, comm, sal

from emp

where empno = i;

dbms_output.put_line('员工编号:'|| empno || chr(13) ||'姓名:'|| ename ||

chr(13) ||'原奖金:'|| nvl(comm,0) || chr(13));

if sal<5000then

select nvl(comm,0) +5001into comm1from emp where empno = i;

else

select nvl(comm,0) +100into comm1from emp where empno = i;

endif;

dbms_output.put_line('现奖金'|| comm1);

exception

when no_data_found then

dbms_output.put_line('工号不存在');

end;

--5.对每位员工的薪水进行判断,如果该员工薪水高于其所在部门的平均薪水,则将其薪水减50 ,更新前后的薪水,员工姓名,所在部门编号

declare

t_ename emp.ename%type;

t_sal emp.sal%type;

sal1 emp.sal%type;

t_deptnoemp.deptno%type;

avsal emp.sal%type;

cursor c_1is

select ename, sal, deptno from emp;

begin

open c_1;

loop

fetch c_1

into t_ename, t_sal, t_deptno;

exitwhen c_1%notfound;

selectavg(sal)into avsal from emp where deptno = t_deptno;

if t_sal>avsal then

sal1 := t_sal -50;

else

sal1 := t_sal;

endif;

dbms_output.put_line('员工姓名:'|| t_ename || chr(13) ||'部门编号'||

t_deptno || chr(13) ||'原薪水:'|| t_sal || chr(13) ||

'现薪水'|| sal1 || chr(13));

endloop;

close c_1;

end;

--6.创建一个存储过程,实现:通过输入员工编号查看员工姓名、工资、奖金:

--1.1如果输入的编号不存在,进行异常处理;

--1.2如果工资高于4000,进行异常处理提示;

--1.3如果奖金没有或为0,进行异常处理提示

createorreplaceprocedure proc(t_empno in emp.empno%type)as

t_https://www.sodocs.net/doc/d69589049.html,m%type;

t_sal emp.sal%type;

t_nameemp.ename%type;

i number;

begin

selectcount(*)into i from emp where empno = t_empno;

if i =0then

RAISE_application_error(-20114,'编号不存在');

else

select comm, sal, ename

into t_comm, t_sal, t_name

from emp

where empno = t_empno;

endif;

if t_sal>4000then

RAISE_application_error(-20112,'工资高于4000');

elsif t_comm =0or t_comm isnullthen

RAISE_application_error(-20113,'奖金为空');

else

dbms_output.put_line('姓名:'|| t_name || chr(13) ||'工资:'|| t_sal ||

chr(13) ||'奖金:'|| t_comm);

endif;

end proc;

call proc(654);

oracle课后题答案

一、选择题 1. 若关系的某一属性组的值能唯一地标识一个元组,我们称之为(B)。 A、主码 B、候选码 C、外码 D、联系 2. 以下不属于数据库模式的三要素的是(C)。 A、数据结构 B、数据操作 C、数据控制 D、完整性约束 3. 以下对关系性质的描述中,哪个是错误的?(B) A、关系中每个属性值都是不可分解的 B、关系中允许出现相同的元组 C、定义关系模式时可随意指定属性的排列次序 D、关系中元组的排列次序可以任意交换 二、填空题 1.数据管理发展的三个阶段是人工管理、文件管理和数据库系统管理。 2.数据库系统的三级模式包括逻辑模式、用户模式、物理模式。 三、思考题 1. 数据库管理系统的主要功能有哪些? 1)数据定义功能。DBMS提供相应数据语言来定义(DDL)数据库结构,它们是刻画数据库框架,并被保存在数据字典中。 2)数据存取功能。DBMS提供数据操纵语言(DML),实现对数据库数据的基本存取操作:检索,插入,修改和删除。 3)数据库运行管理功能。DBMS提供数据控制功能,即是数据的安全性、完整性和并发控制等对数据库运行进行有效地控制和管理,以确保数据正确有效。 4)数据库的建立和维护功能。包括数据库初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能。 5)数据库的传输;DBMS提供处理数据的传输,实现用户程序与DBMS之间的通信,通常与操作系统协调完成。 2.思考关系规范化的过程。 答:对于存在数据冗余、插入异常、删除异常问题的关系模式,应采取将一个关系模式分解为多个关系模式的方法进行处理。一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式,这就是所谓的规范化过程。 3.思考数据库设计的步骤。 答:1需求分析、2概念设计阶段、3逻辑结构设计阶段、4数据库物理结构设计阶段、5数据库实施阶段、6数据库运行和维护阶段。

中南大学oracle数据库期末考试试题及答案

A1、以下()内存区不属于SGA。 A.PGA B.日志缓冲区C.数据缓冲区D.共享池 D2、()模式存储数据库中数据字典的表和视图。 A.DBA B.SCOTT C.SYSTEM D.SYS C3、在Oracle中创建用户时,若未提及DEFAULT TABLESPACE 关键字,则Oracle就将()表空间分配给用户作为默认表空间。 A.HR B.SCOTT C.SYSTEM D.SYS A4、()服务监听并按受来自客户端应用程序的连接请求。 A.OracleHOME_NAMETNSListener B.OracleServiceSID C.OracleHOME_NAMEAgent D.OracleHOME_NAMEHTTPServer B5、()函数通常用来计算累计排名、移动平均数和报表聚合等。 A.汇总B.分析C.分组D.单行 B6、()SQL语句将为计算列SAL*12生成别名Annual Salary A.SELECT ename,sal*12 …Annual Salary? FROM emp; B.SELECT ename,sal*12 “Annual Salary” FROM emp; C.SELECT ename,sal*12 AS Annual Salary FROM emp; D.SELECT ename,sal*12 AS INITCAP(“Annual Salary”) FROM emp; B7、锁用于提供( )。 A.改进的性能

B.数据的完整性和一致性 C.可用性和易于维护 D.用户安全 C8、( )锁用于锁定表,允许其他用户查询表中的行和锁定表,但不允许插入、更新和删除行。 A.行共享B.行排他C.共享D.排他 B9、带有( )子句的SELECT语句可以在表的一行或多行上放置排他锁。 A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH C10、使用( )命令可以在已分区表的第一个分区之前添加新分区。 A.添加分区B.截断分区 C.拆分分区D.不能在第一个分区前添加分区 C11、( )分区允许用户明确地控制无序行到分区的映射。 A.散列B.范围C.列表D.复合 C12、可以使用()伪列来访问序列。 A.CURRVAL和NEXTVAL B.NEXTVAL和PREVAL C.CACHE和NOCACHE D.MAXVALUE和MINVALUE A13、带有错误的视图可使用()选项来创建。 A.FORCE B.WITH CHECK OPTION C.CREATE VIEW WITH ERROR

oracle练习题及答案

WORD格式 1.找出各月倒数第3天受雇的所有员工 selectenamefromempwherelast_day(hiredate)-2=hiredate; 2.找出早于12年前受雇的员工 selectenamefromempwheremonths_between(sysdate,hiredate)>=144; 3.以首字母大写的方式显示所有员工的姓名 selectinitcap(ename)fromemp; 4.显示正好为5个字符的员工的姓名 selectenamefromempwherelength(ename)=5; 5.显示不带有“R”的员工姓名 selectenamefromempwhereinstr(ename,'R',1,1)=0; 6.显示所有员工姓名的前三个字符 selectsubstr(ename,1,3)fromemp; 7.显示所有员工的姓名,用“a”替换所有的“A” selectename,replace(ename,'A','a')fromemp; 8.显示满10年服务年限的员工的姓名和受雇日期 selectename,hiredatefromempwheremonths_between(sysdate,hiredate)>=120; 9.显示员工的详细资料,按姓名排序 select*fromemporderbyenamedesc; 10.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面selectename,hiredatefromemporderbyhiredate; 11.显示所有员工的姓名、工作和薪金,按照工作的降序排序,若工作相同则按薪金排序selectename,job,salfromemporderbyjobdesc,sal; 12.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份 相同则将最早年份的员工排在最前面 selectename,to_char(hiredate,'yyyy')h,to_char(hiredate,'mm')m fromemporderbym,h; 13.显示在一个月为30天的情况所有员工的日薪金,忽略余数 selecttrunc(sal/30)fromemp; 14.找出在(任何年份的)2月受聘的所有员工 selectenamefromempwhereto_char(hiredate,'mm')=2; 15.对于每个员工显示其加入公司的天数 selectename,sysdate-hiredatefromemp; 16.显示姓名字段的任何位置包含“A”的所有员工姓名 selectenamefromempwhereinstr(ename,'A',1,1)<>0; selectenamefromempwhereenamelike'%A%'; 专业资料整理

oracle课后题答案总教学内容

o r a c l e课后题答案总

第一章 一、选择题 1. 若关系的某一属性组的值能唯一地标识一个元组,我们称之为(B)。 A、主码 B、候选码 C、外码 D、联系 2. 以下不属于数据库模式的三要素的是(C)。 A、数据结构 B、数据操作 C、数据控制 D、完整性约束 3. 以下对关系性质的描述中,哪个是错误的?(B) A、关系中每个属性值都是不可分解的 B、关系中允许出现相同的元组 C、定义关系模式时可随意指定属性的排列次序 D、关系中元组的排列次序可以任意交换 二、填空题 1.数据管理发展的三个阶段是人工管理、文件管理和数据库系统管理。 2.数据库系统的三级模式包括逻辑模式、用户模式、物理模式。 三、思考题 1. 数据库管理系统的主要功能有哪些? 1)数据定义功能。DBMS提供相应数据语言来定义(DDL)数据库结构,它们是刻画数据库框架,并被保存在数据字典中。 2)数据存取功能。DBMS提供数据操纵语言(DML),实现对数据库数据的基本存取操作:检索,插入,修改和删除。

3)数据库运行管理功能。DBMS提供数据控制功能,即是数据的安全性、完整性和并发控制等对数据库运行进行有效地控制和管理,以确保数据正确有效。 4)数据库的建立和维护功能。包括数据库初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能。 5)数据库的传输;DBMS提供处理数据的传输,实现用户程序与DBMS之间的通信,通常与操作系统协调完成。 2.思考关系规范化的过程。 答:对于存在数据冗余、插入异常、删除异常问题的关系模式,应采取将一个关系模式分解为多个关系模式的方法进行处理。一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式,这就是所谓的规范化过程。 3.思考数据库设计的步骤。 答:1需求分析、2概念设计阶段、3逻辑结构设计阶段、4数据库物理结构设计阶段、5数据库实施阶段、6数据库运行和维护阶段。 第二章 一、选择题 1、Oracle 11g不具备的版本是(C) A.个人版 B.标准版 C. 扩展板 D.企业版 2、oracle 数据库的数据字典不能做的工作有(B) A.查找oracle数据库用户信息

oracle数据库试题

ORACLE数据库试题 74 姓名:戴希引 一、选择题(总分50分,每题1分,*为多选)42 1.下列不属于ORACLE的逻辑结构的是(C) A 区 B 段 C 数据文件 D表空间 2. 下面哪个用户不是ORACLE缺省安装后就存在的用户( A ) A . SYSDBA B. SYSTEM C. SCOTT D. SYS 3 下面哪个操作会导致用户连接到ORACLE数据库,但不能创建表(A ) A 授予了CONNECT的角色,但没有授予RESOURCE的角色 B没有授予用户系统管理员的角色 C数据库实例没有启动 D数据库监听没有启动 4. 在Oracle中,当FETCH语句从游标获得数据时,下面叙述正确的是( C ) A 游标打开 B游标关闭 C当前记录的数据加载到变量中 D创建变量保存当前记录的数据 5. 在Oracle中,下面关于函数描述正确的是( A D)* A SYSDATE函数返回Oracle服务器的日期和时间 B ROUND数字函数按四舍五入原则返回指定十进制数最靠近的整数 C ADD_MONTHS日期函数返回指定两个月份天数的和 D SUBSTR函数从字符串指定的位置返回指定长度的子串 6. 阅读下面的PL/SQL程序块: BEGIN INSERT INTO employee(salary,last_name,first_name)VALUES(35000,’Wang’,'Fre d ’); SAVEPOINT save_a; INSERT INTO employee(salary,last_name,first_name) VALUES(40000,’Woo’,'David’); SAVEPOINT save_b; DELETE FROM employee WHERE dept_no=10; SAVEPOINT save_c; INSERT INTO employee(salary,last_name,first_name) VALUES(25000,’Lee’,'Bert’); ROLLBACK TO SAVEPOINT save_c;

Oracle试题(含答案)

_C++_CSD/ESD1405 1. 把工资大于1000的first_name,salary 显示出来,按工资排序,工资相同按first_name降序的SQL语句是? A. select first_name,salary from s_emp order by salary,first_name B. select first_name,salary from s_emp order by salary,first_name asc C. select first_name,salary from s_emp order by salary desc,first_name D. select first_name,salary from s_emp order by salary,first_name desc 正确答案:D 2. 已知数据库中有员工表s_emp和部门表s_dept,具体字段如下: 员工表字段介绍: ID 员工编号 LAST_NAME 员工姓 FIRST_NAME 员工名 USERID 用户编号 START_DATE 入职日期 COMMENTS 员工备注信息 MANAGER_ID 员工的领导ID TITLE 员工的职位 DEPT_ID 部门的编号 SALARY 员工的月薪 COMMISSION_PCT 提成 部门表的字段介绍: ID 部门编号 NAME 部门名 REGION_ID 地区编号 注:以下所有数据库相关题目,均使用这两个表 把s_emp表中的每个人的全名和工资列出来的SQL语句是? A. select first_name|last_name ,salary from s_emp

Oracle 考试试题_带答案_

Oracle考试试题 一、选择(每题3分) 1) 当Oracle服务器启动时,下列哪种文件不是必须的()。 a) 数据文件 b) 控制文件 c) 日志文件 d) 归档日志文件 参考答案 D 2) 在Oracle中,当用户要执行SELECT语句时,下列哪个进程从磁盘获得用 户需要的数据()。 a) 用户进程 b) 服务器进程 c) 日志写入进程(LGWR) d) 检查点进程(CKPT) 参考答案 B 3) 在Oracle中,一个用户拥有的所有数据库对象统称为()。 a) 数据库 b) 模式 c) 表空间 d) 实例 参考答案 B 4) 在Oracle中,可用于提取日期时间类型特定部分(如年、月、日、时、分、 秒)的函数有()。 a) DATEPART b) EXTRACT c) TO_CHAR d) TRUNC 参考答案bc 5) 在Oracle中,有一个教师表teacher的结构如下: ID NUMBER(5) NAME V ARCHAR2(25) EMAIL V ARCHAR2(50) 下面哪个语句显示没有Email地址的教师姓名()。 a) SELECT name FROM teacher WHERE email = NULL;

b) SELECT name FROM teacher WHERE email <> NULL; c) SELECT name FROM teacher WHERE email IS NULL; d) SELECT name FROM teacher WHERE email IS NOT NULL; 参考答案 C 6) 在Oracle数据库的逻辑结构中有以下组件: A 表空间 B 数据块 C 区 D 段 这些组件从大到小依次是()。 a) A→B→C→D b) A→D→C→B c) A→C→B→D d) D→A→C→B 参考答案 b 7) 在Windows操作系统中,Oracle的()服务监听并接受来自客户端应用程 序的连接请求。 a) OracleHOME_NAMETNSListener b) OracleServiceSID c) OracleHOME_NAMEAgent d) OracleHOME_NAMEHTTPServer 参考答案 a 8) 在Windows操作系统中,Oracle的()服务是使用iSQL*Plus必须的。 a) OracleHOME_NAMETNSListener b) OracleServiceSID c) OracleHOME_NAMEAgent d) OracleHOME_NAMEHTTPServer 参考答案 B 9) 在 Oracle 中创建用户时,若未提及 DEFAULT TABLESPACE 关键字,则 Oracle 就将()表空间分配给用户作为默认表空间。。 a) USER b) SYSTEM c) SYS d) DEFAULT 参考答案 B 10) 在Oracle数据库中,()用户模式存储数据字典表和视图对象。 a) SYSTEM

oracle数据库练习题参考答案

第1章Oracle 11g简介 软件122班王平安 一、选择题 1.D 2.D 3.C 4.A 5.D 6.D 7.B 二、填空题 1.视图2.索引3.簇4.DB_BLOCK_SIZE 5.SYSTEM 6.数据文件7.日志文件8.控制文件 9.系统全局区(System Global Area,SGA) 10.程序全局区(Program Global Area,PGA) 11.数据库管理员12.安全官员 13.网络管理员14.应用程序开发员 15.应用程序管理员16.数据库用户。 三、简答题 1.答: 数据库由若干个表空间组成,表空间由表、索引、视图等逻辑对象组成,表由段组成,段由区组成,区则由数据块组成。 2.答: 物理结构由构成数据库的操作系统文件所决定。每个Oracle数据库都由3种类型的文件组成:数据文件、日志文件和控制文件。 Oracle数据库有一个或多个物理的数据文件。数据库的数据文件包含全部数据库数据。逻辑数据物理地存储在数据文件中。 每个数据库有两个或多个日志文件组,日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改记录在日志中。在出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到修改记录,从而保证已经发生的操作成果不会丢失。 每个Oracle数据库有一个控制文件,记录数据库的物理结构。控制文件包含数据库名、数据库数据文件和日志文件的名字、位置和数据库建立日期等信息。 3.答: SGA是一组共享内存结构,其中包含一个Oracle数据库例程数据及控制信息。如果有多个用户同时连接到同一个例程,则此例程的SGA数据由这些用户共享。因此,SGA也称为共享全局区(Shared Global Area)。 SGA包含以下数据结构。

oracle考试试题及答案

试题一 一、填空题(每小题4分,共20分) 1、数据库管理技术经历了人工管理、文件系统、数据库系统三个阶段 2、数据库三级数据结构是外模式、模式、内模式 3、Oracle数据库中,SGA由数据库缓冲区,重做日志缓冲区,共享池组成 4、在Oracle数据库中,完正性约束类型有Primay key约束。Foreign key约束,Unique约束,check约束,not need约束 5、PL/SQL中游标操作包括声明游标,打开游标,提取游标,关闭游标 二、正误判断题(每小题2分,共20分) 1、数据库中存储的基本对象是数据(T) 2、数据库系统的核心是DBMS(T) 3、关系操作的特点是集合操作(T) 4、关系代数中五种基本运算是并、差、选择、投影、连接(F) 5、Oracle进程就是服务器进程(F) 6、oraclet系统中SGA所有用户进程和服务器进程所共享(T) 7、oracle数据库系统中数据块的大小与操作系统有关(T) 8、oracle数据库系统中,启动数据库和第一步是启动一个数据库实例(T) 9、PL/SQL中游标的数据是可以改变的(F) 10、数据库概念模型主要用于数据库概念结构设计() 三、简答题(每小题7分,共35分) 1、何谓数据与程序的逻辑独立性和物理独立性? 2、试述关系代数中等值连接与自然连接的区别与联系? 3、何谓数据库,数据库设计一般分为哪些阶段? 4、简述Oracle逻辑数据库的组成?

5、试任举一例说明游标的使用方法? 五、设有雇员表emp(empno,ename,age,sal,tel,deptno), 其中:empno-----编号,name------姓名,age -------年齡,sal-----工资,tel-----电话 deptno-----部门号。 请按下列要求分别晨SQL*PLUS下编程。(每小题3分,共15分)?1、查询家有电话的职工信息。 ?2、查询工资在500至800元之间的雇员信息 ?3、按年龄递增顺序显示雇员编号、姓名、年龄、工资 ?4、求部门号为D_01的平均工资 ?5、查找部门号为D_01的40岁以上而工资在400元以下的雇员名单。 1、SQL>SELECT * FROM emp WHERE tel NOT NULL; 2、SQL>SELECT * FROM emp WHERE BETWEEN 500 AND 800; 3、SQL>SELECT empno,ename,age,sal FROM emp ORDER BY age ASC; 4、SQL>SELECT AVG(sal) FROM emp WHERE deptno='D_01'; 5、SQL>SELECT ename FROM emp WHERE deptno='D_01' AND age>40 AND Sal<400; ? 试题一答案 一、填空题 1、人工管理、文件系统、数据库系统 2、外模式、模式、内模式 3、数据库缓冲区,重做日志缓冲区,共享池 4、Primay key约束。Foreign key约束,Unique约束,check约束,not need 约束 5、声明游标,打开游标,提取游标,关闭游标 二、正误判断题 1、T 2、T 3、T 4、F 5、F 6、T 7、T 8、T 9、F 三、(略) 五、 1、SQL>SELECT * FROM emp WHERE tel NOT NULL; 2、SQL>SELECT * FROM emp WHERE BETWEEN 500 AND 800; 3、SQL>SELECT empno,ename,age,sal FROM emp ORDER BY age ASC; 4、SQL>SELECT AVG(sal) FROM emp WHERE deptno='D_01'; 5、SQL>SELECT ename FROM emp WHERE deptno='D_01' AND age>40 AND Sal<400; 试题二

Oracle基础练习题及答案(子查询)

子查询 1.查询和scott相同部门的员工姓名ename和雇用日期hiredate select ename,hiredate from emp where deptno=(select b.deptno from emp a,dept b where a.deptno=b.deptno and ename='SCOTT'); 2.查询工资比公司平均工资高的所有员工的员工号empno,姓名 ename和工资sal。 select empno,ename,sal from emp where sal>(select avg(sal) from emp ); 3.查询和姓名中包含字母u的员工在相同部门的员工的员工号 empno和姓名ename select empno,ename from emp a,dept b where a.deptno(+)=b.deptno and a.deptno=(select deptno from emp where ename like'%U%'); 4.查询在部门的loc为newYork的部门工作的员工的员工姓名 ename,部门名称dname和岗位名称job select ename,dname,job from emp a,dept b where a.deptno=b.deptno and loc='NEW YORK'; 5.查询管理者是king的员工姓名ename和工资sal select a.ename,a.sal from emp a,emp b where a.mgr=b.empno and b.ename='KING';

ORACLE数据库习题(有答案)

--1.列出至少有一个雇员的所有部门。 SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP); --2.列出薪金比“SMITH”多的所有雇员。 SELECT * FROM EMP WHERE SAL>(SELECT SAL FROM EMP WHERE ENAME='SMITH'); --3.列出所有雇员的姓名及其上级的姓名。 SELECT AS empName, AS mgrName FROM emp ygb,emp sjb WHERE =; --4.列出入职日期早于其直接上级的所有雇员。 SELECT * FROM emp ygb WHERE hiredate<(SELECT hiredate FROM emp sjb WHERE =; --5.列出所有部门的名称和这些部门的雇员编号及姓名(没有雇员的部门包含在内) SELECT dname,ename FROM dept a LEFT JOIN emp b ON =; --6.列出所有JOB 为“CLERK”(办事员)的员工姓名及其部门名称 SELECT ename,dname FROM dept a,emp b WHERE = AND job='CLERK'; --7.列出各种类型的最低薪金,并使最低薪金大于。 SELECT job,MIN(sal) FROM emp GROUP BY job HAVING MIN(sal)>1500; --8.列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。 SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES'); --9.列出薪金高于公司平均水平的所有雇员。 SELECT * FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP); --10.列出与“SCOTT”从事相同工作的所有雇员。 SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='SCOTT') AND ENAME<>'SCOTT'; --11.列出薪金等于部门中任何一个雇员薪金的员工姓名和 薪金 SELECT ENAME,SAL FROM EMP WHERE SAL IN(SELECT SAL FROM EMP WHERE DEPTNO=30); SELECT ENAME,SAL FROM EMP WHERE SAL =ANY(SELECT SAL FROM EMP WHERE DEPTNO=30); --12.列出薪金高于部门中所有雇员薪金的员工姓名和薪金SELECT * FROM EMP WHERE SAL >ALL(SELECT SAL FROM EMP WHERE DEPTNO=30); --13.列出所有部门的部门名称、地点以及该部门中雇员的数量 SELECT DNAME,DEPTNO,LOC, (SELECT COUNT(*) FROM EMP E WHERE = AS TOTAL FROM DEPT; --14.列出各种类别工作的最低工资 SELECT job,MIN(sal) FROM emp GROUP BY job; --15.列出各个部门的MANAGER(经理)的最低薪金。 SELECT MIN(sal) FROM emp WHERE job='MANAGER' GROUP BY DEPTNO; --1. 查询所有部门员工的编号、姓名、月薪及奖金。 select empno,ename,sal,comm from emp where deptno=10; --2. 查询员工WHITE的员工编号。 select empno from emp where ename='WHITE'; --3. 查询所有员工的编号及收入。(提示:收入=月薪+奖金)select empno 编号,sal+nvl(comm,0) as 收入from emp; --4. 查询所有员工的编号、姓名、工种及其工龄,按工龄降序排序,工龄相同时按编号升序排序。 Select empno,ename,job,trunc(months_between(sysdate,hiredate)/12) 工龄from emp order by 工龄desc,empno asc; --5. 统计各部门的员工人数及工种类型数。 select deptno,count(*) 人数,count(distinct job) 工种类型数from emp group by deptno; --6. 查询部门人数多于人的部门编号。 select deptno,count(*) from emp group by deptno having count(*) > 3; --7. 统计各部门各种工作类别的最低月薪,显示最低薪金大于的记录。 select deptno,job,min(sal) from emp group by deptno,job having min(sal)>1500; --8. 统计、及部门员工平均工资。 select deptno,coung(*) from emp where deptno in (10,20,30) group by deptno; --9. 查询工资水平在至间的各部门员工人数。 select deptno,count(*) from emp where sal between 2000 and 5000 group by deptno; --10. 查询公司最高领导人的员工编号及姓名。 select empno,ename from emp where mgr is null; --1、编写一查询,显示与Blake在同一部门工作的雇员的姓名和受雇日期,但是Blake不包含在结果内。 select ename,hiredate from emp where deptno in (select deptno from emp where lower(ename)='black') and lower(ename)!='black'; --2、创建一查询,显示工资大于平均工资水平的雇员的编号及姓名,输出结果按工资降序排列。 select empno,ename,sal from emp where sal>(select avg(sal) from emp) order by sal desc; --3、显示位置在Dallas的部门内的雇员的姓名、编号及工作。 select ename,empno,job from emp inner join dept on = where lower(loc)='dallas'; --4、显示被King直接管理的雇员的姓名及其工资。 select , from emp e1 inner join emp e2 on = where lower='king'; --5、显示在Sales部门工作的雇员的部门编号、姓名及工作。 select empno,ename,job from emp inner join dept on = where lower(dname)='sales'; --6、编写一查询,显示与能获得奖金的雇员的奖金和工资同时匹配的雇员的编号和工资。 select ,, from emp e1 inner join emp e2 on = and = where !=; --7、显示与工作在Dallas的雇员的工资及奖金同时匹配的雇员的姓名、部门名称及工资。 select ,, from emp e inner join dept d on = where (sal,nvl(comm,0)) in (select sal,nvl(comm,0) from emp where deptno in (select deptno from dept where lower(loc)='dallas') ); --8、创建一查询,显示能获得与Scott一样工资和奖金的其他雇员的姓名、受雇日期及工资。 select ename,hiredate,sal from emp where (sal,nvl(comm,0)) in

Oracle数据库试题及答案word版本

O r a c l e数据库试题及 答案

Oracle数据库试题 一、选择题 1、段是表空间中一种逻辑存储结构,以下( D )不是ORACLE数据库使用的段类型。 (A)索引段(B)临时段(C)回滚段(D)代码段 2、 ORACLE数据库物理结构包括以下三种文件,以下不属于的是( A )。(A)系统文件(B)日志文件(C)数据文件(D)控制文件 3、数据库中有两个用户scott和muuser,物资表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; 4、若当前日期为’25-5月-06’,以下( D )表达式能计算出5个月后那一天所在月份的最后一天的日期。 (A)NEXT_DAY(ADD_MONTHS(28-5月-06,5)) (B)NEXT_DAY(MONTHS_BETWEEN(28-5月-06,5)) (C)NEXT_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) (D)NEXT_DAY(ADD_MONTHS(’28-5月-06’,5))

Oracle基础练习题及答案(多表查询1)

利用scott用户自带的四张表完成如下作业: 1.列出至少有一个员工的所有部门 selectb.deptno,b.dnamefromemp a,dept bwherea.deptno=b.deptnogroupbyb.deptno,b.dnamehavingcount(*)>=1; 2.列出薪金比SMITH高的所有员工 select*fromempwheresal>(selectsalfromempwhereename='SMITH'); 3.列出所有员工的姓名及其直接上级领导的姓名 selecta.ename,b.ename "leader"fromemp a,emp bwherea.mgr=b.empno; 4.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称 selecta.empno,a.ename,a.hiredate,c.dnamefromempa,empb,deptcwherea.mgr= b.empnoanda.deptno=c.deptnoanda.hiredate

Oracle数据库试题

请将下列试题的正确答案写在答题栏里。(每小题2分) 1.当Oracle服务器启动时,下列哪种文件不是必须的()。 A.数据文件 B.控制文件 C.日志文件 D.归档日志文件 2.在Oracle中,当用户要执行SELECT语句时,下列哪个进程从磁盘获得用户需要的数据()。 A.用户进程 B.服务器进程 C.日志写入进程(LGWR D.检查点进程(CKPT) 3.在Oracle中,一个用户拥有的所有数据库对象统称为()。 A.数据库 B.模式 C.表空间 D.实例 4.在Oracle中,有一个教师表teacher的结构如下: ID NUMBER(5) NAME V ARCHAR2(25) EMAIL VARCHAR2(50) 下面哪个语句显示没有Email地址的教师姓名()。 A.SELECT name FROM teacher WHERE email = NULL; B.SELECT name FROM teacher WHERE email <> NULL; C.SELECT name FROM teacher WHERE email IS NULL; D.SELECT name FROM teacher WHERE email IS NOT NULL; 5.在Oracle数据库的逻辑结构中有以下组件: A 表空间 B 数据块 C 区 D 段 这些组件从大到小依次是()。 A.A→B→C→D B.A→D→C→B C.A→C→B→D D.D→A→C→B 6.在Windows操作系统中,Oracle的()服务监听并接受来自客户端应用程序的连接请求。 A.OracleHOME_NAMETNSListener

Oracle练习题习题答案张表题

Oracle练习题+习题答案(张表+题) create table student( sno varchar2(10) primary key, sname varchar2(20), sage number(2), ssex varchar2(5) ); create table teacher( tno varchar2(10) primary key, tname varchar2(20) ); create table course( cno varchar2(10), cname varchar2(20), tno varchar2(20), constraint pk_course primary key (cno,tno) ); create table sc( sno varchar2(10),

cno varchar2(10), score number(4,2), constraint pk_sc primary key (sno,cno) ); /*******初始化学生表的数据******/ insert into student values ('s001','张三',23,'男'); insert into student values ('s002','李四',23,'男'); create table student( insert into student values ('s003','吴鹏',25,'男'); sno varchar2(10) primary key, insert into student values ('s004','琴沁',20,'女'); sname varchar2(20), insert into student values ('s005','王丽',20,'女'); sage number(2), insert into student values ('s006','李波',21,'男'); ssex varchar2(5) insert into student values ('s007','刘玉',21,'男'); ); insert into student values ('s008','萧蓉',21,'女'); insert into student values ('s009','陈萧晓',23,'

oracle数据库期末考试试题及答案(0001)

oracle数据库期末考试试题及答案

A13、带有错误的视图可使用()选项来创建。 A.FORCE B.WITH CHECK OPTION C.CREATE VIEW WITH ERROR D.CREATE ERROR VIEW B14、在联接视图中,当()时,该基表被称为键保留表。 A.基表的主键不是结果集的主键 B.基表的主键是结果集的主键 C.基表的主键是结果集的外键 D.基表的主键不是结果集的外键 D15、在列的取值重复率比较高的列上,适合创建()索引。 A.标准B.唯一C.分区D.位图 C16、要以自身的模式创建私有同义词,用户必须拥有()系统权限 A.CREATE PRIVATE SYNONYM B.CREATE PUBLIC SYNONYM C.CREATE SYNONYM D.CREATE ANY SYNONYM D17、PL/SQL块中不能直接使用的SQL命令是()。 A.SELECT B.INSERT C.UPDATE D.DROP B18、以零作除数时会引发()异常。

A.VALUE_ERROR B.ZERO_DIVIDE C.STORAGE_ERROR D.SELF_IS_NULL A19、要更新游标结果集中的当前行,应使用()子句。 A.WHERE CURRENT OF B.FOR UPDATE C.FOR DELETE D.FOR MODIFY B20、用于处理得到单行查询结果的游标为()。 A.循环游标B.隐式游标 C.REF游标D.显式游标 C21、公用的子程序和常量在()中声明。 A.过程B.游标 C.包规范D.包主体 C22、数据字典视图()包含存储过程的代码文本A.USER_OBJECTS B.USER_TEXT C.USER_SOURCE D.USER_DESC C23、以下不属于命名的PL/SQL块的是()。 A.程序包B.过程 C.游标D.函数 A24、()包用于显示PL/SQL块和存储过程中的调试信息。 A.DBMS_OUTPUT B.DBMS_STANDARD C.DBMS_INPUT D.DBMS_SESSION

相关主题