文档库 最新最全的文档下载
当前位置:文档库 › oracle练习题-答案

oracle练习题-答案

oracle练习题-答案
oracle练习题-答案

实验一

练习1、请查询表DEPT中所有部门的情况。

select * from dept;

练习2、查询表DEPT中的部门号、部门名称两个字段的所有信息。

select deptno,dname from dept;

练习3、请从表EMP中查询10号部门工作的雇员姓名和工资。

select ename,sal from emp where deptno=10;

练习4、请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。select ename,sal from emp where job='CLERK' or job='MANAGER';

练习5、请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、工资、工作。select ename,deptno,sal,job from emp where deptno between 10 and 30;

练习6、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。

select ename,sal,job from emp where ename like 'J%';

练习7、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。select ename,job,sal from emp where sal<=2000 order by sal desc;

练习8、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。

select ename,sal,emp.deptno,dname,loc from emp,dept where emp.deptno=dept.deptno and job=?CLERK?;

练习9、查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。

select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+) and a.sal>=2000;

练习10、在表EMP中查询所有工资高于JONES的所有雇员姓名、工作和工资。

select ename,job,sal from emp where sal>(select sal from emp where ename=?JONES?);

练习11、列出没有对应部门表信息的所有雇员的姓名、工作以及部门号。

select ename,job,deptno from emp where deptno not in (select deptno from dept);

练习12、查找工资在1000~3000之间的雇员所在部门的所有人员信息

select * from emp where deptno in (select distinct deptno from emp where sal between 1000 and 3000);

练习13、雇员中谁的工资最高。

select ename from emp where sal=(select max(sal) from emp);

select ename from (select * from emp order by sal desc) where rownum<=1;

*练习14、雇员中谁的工资第二高(考虑并列第一的情况,如何处理)。

select ename from (select ename ,sal from (select * from emp order by sal desc) where rownum<=2 order by sal) where rownum<=1;

实验二

1.查询所有雇员的姓名、SAL与COMM之和。

select ename,sal+nvl(comm,0) “sal-and-comm” from emp;

2.查询所有81年7月1日以前来的员工姓名、工资、所属部门的名字

select ename,sal,dname from emp,dept where emp.deptno=dept.deptno and hiredate<=to_date(…1981-07-01?,?yyyy-mm-dd?);

3.查询各部门中81年1月1日以后来的员工数

select deptno,count(*) from emp where hiredate>=to_date(…1981-01-01?,?yyyy-mm-dd?) group by deptno;

4.查询所有在CHICAGO工作的经理MANAGER和销售员SALESMAN的姓名、工资select ename,sal from emp where (job=?MANAGER?or job=?SALES?) and deptno in (select deptno from dept where loc=?CHICAGO?);

5.查询列出来公司就职时间超过24年的员工名单

select ename from emp where hiredate<=add_months(sysdate,-288);

6.查询于81年来公司所有员工的总收入(SAL和COMM)

select sum(sal+nvl(comm,0)) from emp where to_char(hiredate,?yyyy?)=?1981?;

7.查询显示每个雇员加入公司的准确时间,按××××年××月××日时分秒显示。select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;

8.查询公司中按年份月份统计各地的录用职工数量

select to_char(hiredate,'yyyy-mm'),loc,count(*) from emp,dept

where emp.deptno=dept.deptno group by to_char(hiredate,'yyyy-mm'),loc;

9.查询列出各部门的部门名和部门经理名字

select dname,ename from emp,dept where emp.deptno=dept.deptno and job=?MANAGER?;

10.查询部门平均工资最高的部门名称和最低的部门名称

select dname from dept where deptno=(select deptno from (select deptno from emp group by deptno order by avg(sal) ) where rownum<=1)

union all select dname from dept where deptno=(select deptno from (select deptno from emp group by deptno order by avg(sal) desc ) where rownum<=1);

11.*查询与雇员号为7521员工的最接近的在其后进入公司的员工姓名及其所在部门名

select ename,dname

from (select ename,deptno from

(select ename,deptno from emp where hiredate>(select hiredate from emp where empno=7521) order by hiredate ) where rownum<=1) e,dept

where e.deptno=dept.deptno

实验三、

1.建立一个表(表名自定),表结构与EMP相同,没有任何记录。

create table my_emp as select * from emp;

2.用INSERT语句输入5条记录,并提交。

3.扩大该表的记录数到约40条,并使雇员号不重复;每个雇员都有所属部门,雇员在同一部门的经理是同一人。

insert ….

update …

commit

4.建立一个与DEPT表结构和记录完全相同的新表,并与前项新表建立参照完整性约束。

alter table my_dept add( constraint s1 primary key(deptno));

alter table my_emp add(constraint s2 foreign key(deptno) references dept(deptno));

5.对在‘NEW YORK’工作的雇员加工资,每人加200。

6.*如果雇员姓名与部门名称中有一个或一个以上相同的字母,则该雇员的COMM增加500。

update my_emp a

set comm=NVL(comm,0)+500

where a.ename<>(

select translate(a.ename,b.dname,CHR(27))

from my_dept b where b.deptno=a.deptno

);

--a.deptno与b.deptno必须有主外键连接,否则可能出错,为什么?

commit;

7.删除部门号为30的记录,并删除该部门的所有成员。

delete from emp where deptno=30;

delete from dept where deptno=30;

commit

8.新增列性别SEX,字符型。

alter table emp add(sex char(2));

9.修改新雇员表中的MGR列,为字符型。

该列数据必须为空

alter table emp modify(mgr varchar2(20));

10.试着去删除新表中的一个列。

alter table my_emp drop (comm);

1.查询部门号为30的所有人员的管理层次图。

select level,ename from emp

connect by mgr=prior empno

start with deptno=30and job='MANAGER';

2.查询员工SMITH的各个层次领导。

select level,ename from emp

connect by prior mgr= empno

start with ENAME='SMITH';

3.查询显示EMP表各雇员的工作类型,并翻译为中文显示

用decode函数

4.*查询显示雇员进入公司当年是什么属相年(不考虑农历的年份算法)

用decode函数

5.建立一个视图myV_emp,视图包括myEMP表的empno、ename、sal,并按sal从大到小排列。

create view myV_EMP as select empno,ename,sal from emp;

6.定义一个mySeq,对select mySeq.nextval,my_emp.* from my_emp的执行结果进行说明。7.定义序列mySeq、myEMP、myV_emp的同义词,能否用同义词对上述对象进行访问。8.在myEMP表中建立ename的唯一性索引。

9.如何在sql*plus中,运行sql的脚本(即后缀为.sql的文件)

实验五、

1.观察下列PL/SQL的执行结果

declare

s emp%rowtype;

begin

select * into s

from emp

where ename='KING';

DBMS_OUTPUT.PUT_LINE(s.empno||s.ename||s.job||s.sal);

END;

2.编写一个PL/SQL,显示ASC码值从32至120的字符。

begin

for i in 32..120

loop

dbms_output.put_line(chr(i));

end loop;

end;

3.计算myEMP表中COMM最高与最低的差值,COMM值为空时按0计算。

var1 number;

var2 number;

val_comm number;

begin

select max(nvl(comm,0)) into var1 from myemp;

select min(nvl(comm,0)) into var2 from myemp;

val_comm:=var1-var2;

dbms_output.put_line(val_comm);

end;

4.根据表myEMP中deptno字段的值,为姓名为‘JONES’的雇员修改工资;若部门号为10,则工资加100;部门号为20,加200;其他部门加400。

declare

c1 number;

c2 number;

begin

select deptno into c1 from emp where ename=?JONES?;

if c1=10 then

c2:=100;

elsif c1=20 then

c2:=200;

else c2:=400;

end if;

update emp set sal=sal+c2 where ename=?JONES?;

commit;

end;

5.计算显示部门人数最多的部门号、人数、工资总和,以及部门人数最少的部门号、人数、工资总和。

6.计算myEMP中所有雇员的所得税总和。假设所得税为累进税率,所得税算法为:工资收入为0-1000为免税;收入1000-2000者,超过1000的部分税率10%;2000-3000者超过2000部分按20%税率计算;3000-4000者超过3000部分按30%税率计算;4000以上收入,超过4000部分按40%税率计算。(请查阅累进税率的概念)

declare

sum_xx number:=0;

xx number;

begin

--计算收入为1000-2000的所得税总额

select sum((sal-1000)*0.1) into xx from emp where sal >1000 and sal<=2000;

sum_xx:=sum_xx+xx;

--计算收入为2000-3000的所得税总额

select sum((sal-2000)*0.2+100) into xx from emp where sal >2000 and sal<=3000;

sum_xx:=sum_xx+xx;

--计算收入为3000-4000的所得税总额

select sum((sal-3000)*0.3+300) into xx from emp where sal >3000 and sal<=4000;

sum_xx:=sum_xx+xx;

--计算收入为4000以上的所得税总额

select sum((sal-4000)*0.4+600) into xx from emp where sal >4000;

sum_xx:=sum_xx+xx;

dbms_output.put_line(sum_xx);

end;

7.*(可选做,难题)假设有个表如myEMP,未建立主键,含有多条记录重复(列值完全相同),试编制一个PL/SQL,将多余的重复记录删除。

实验六、

1.用外部变量,实现两个PL/SQL程序间的数据交换。

SQL> variable a1 number;

SQL> begin

2 :a1:=1000;

3 end;

4 /

PL/SQL 过程已成功完成。

SQL> begin

2 dbms_output.put_line(:a1);

3 end;

4 /

1000

PL/SQL 过程已成功完成。

2.插入myEMP表中的数据记录,考虑可能出现的例外,并提示。

主要的例外提示:唯一性索引值重复DUP_V AL_ON_INDEX

3.删除myDEPT表中的数据记录一条,考虑例外情况,并提示。

主要的例外提示:违反完整约束条件

4.将下列PL/SQL改为FOR游标

declare

cursor cur_myemp is select * from emp;

r emp%rowtype;

begin

open cur_myemp;

fetch cur_myemp into r;

while cur_myemp%found

loop

dbms_output.put_line(r.ename);

fetch cur_myemp into r;

end loop;

close cur_myemp;

end;

5.工资级别的表salgrade,列出各工资级别的人数。(用游标来完成)

declare

v1 number;

cursor cur1 is select * from salgrade;

begin

for c1 in cur1

loop

select count(*) into v1 from emp where sal between c1.losal and c1.hisal;

dbms_output.put_line('grade'||c1.grade||' '||v1);

end loop;

end;

实验七、

1.在myEMP表中增加一个字段,字段名为EMPPASS,类型为可变长字符。

2.建立一个存储过程,用于操作用户登录的校验,登录需要使用EMPNO和EMPPASS,并需要提示登录中的错误,如是EMPNO不存在,还是EMPNO存在而是EMPPASS错误等。

create or replace procedure p_login(

in_empno in emp.empno%type,

in_emppass in emp.emppass%type,

out_code out number,

out_desc out varchar2)

is

x1 emp.ename%type;

x2 number;

begin

select ename into x1 from emp where empno=in_empno;

select count(*) into x2 from emp where empno=in_empno and emppass=in_emppass;

if x2=1 then

out_code:=0;

out_desc:=x1;

else

out_code:=2;

out_desc:=?用户登陆密码错误!?;

end if;

exception

when NO_DATA_FOUND then

out_code:=1;

out_desc:=?该用户号存在!?;

when TOO_MANY_ROWS then

out_code:=3;

out_desc:=?该用户号有重复值!?;

when others then

out_code:=100;

out_desc:=?其他错误!?;

end;

3.建立一个存储过程,实现myEMP表中指定雇员的EMPPASS字段的修改,修改前必须进行EMPPASS旧值的核对。

CREATE OR REPLACE PROCEDURE P_CHANGEPASS(

IN_EMPNO IN EMP.EMPNO%TYPE,

IN_OLDPASS IN EMP.EMPPASS%TYPE,

IN_NEWPASS IN EMP.EMPPASS%TYPE,

OUT_CODE OUT NUMBER,

OUT_DESC OUT V ARCHAR2)

IS

X1 NUMBER;

BEGIN

SELECT COUNT(*) INTO X1 FROM EMP WHERE EMPNO=IN_EMPNO AND EMPPASS=IN_OLDPASS;

IF X1=1 THEN

update emp set emppass=in_newpass where empno=in_empno;

commit;

OUT_CODE:=0;

OUT_DESC:=?修改口令成功?;

ELSE

OUT_CODE:=1;

OUT_DESC:=?修改口令不成功?;

END IF;

exception

when others then

out_code:=100;

out_desc:=?其他错误?;

END;

4.建立一个函数,输入一个雇员号,返回该雇员的所在同一部门的最高级别上司姓名。create or replace function f_leader(

in_empno in emp.empno%type) return varchar2

is

v1 number;

v2 number;

v3 emp.ename%type;

v4 emp.deptno%type;

begin

v1:=in_empno;

v3:='未找到';

select deptno into v4 from emp where empno=v1;

loop

select mgr into v2 from emp where empno=v1;

select ename into v3 from emp where empno=v2 and deptno=v4;

v1:=v2;

end loop;

exception

when others then

return v3;

end;

5.试用上题函数,实现各雇员的同一部门最高级别上司的SELECT查询。select f_leader(7521) from dual;

6.*编写实验五中第六题,关于各雇员工资的所得税计算函数

实验八、

1.建立一个触发器,当myEMP表中部门号存在时,该部门不允许删除。create or replace trigger dept_line_delete

before delete on dept for each row

declare

v1 number;

begin

select count(*) into v1 from emp where deptno=:old.deptno;

if v1>=1 then RAISE_APPLICATION_ERROR(-20000,?错误?);

end if;

end;

实验九、

1.建立一个示例包emp_mgmt中,新增一个修改雇员所在部门的过程。create or replace package emp_mgmt as

procedure change_dept(

in_newdept in emp.deptno%type,

out_code out number,

out_desc out varchar2);

mgmt_empno emp.empno%type;

procedure mgmt_login(

in_empno in emp.empno%type,

in_emppass in emp.emppass%type,

out_code out number,

out_desc out varchar2);

end;

create or replace package body emp_mgmt as

procedure change_dept(

in_newdept in emp.deptno%type,

out_code out number,

out_desc out varchar2)

is

begin

update emp set deptno=in_newdept where empno=mgmt_empno;

commit;

out_code:=0;

out_desc:=?ok?;

end;

procedure mgmt_login(

in_empno in emp.empno%type,

in_emppass in emp.emppass%type,

out_code out number,

out_desc out varchar2)

is

begin

--登陆过程见实验七第2题

mgmt_empno:=in_empno;

out_code:=0;

out_desc:=?ok?;

end;

end;

2.假设myEMP表中有口令字段password,试在包emp_mgmt中建立一个登录的过程,并将登录成功的雇员号存入包变量。

见前一题

3.示例包emp_mgmt中,将remove_emp操作设限,只有本部门经理操作才能删除本部门雇员记录,只有公司头头PRESIDENT才能删除部门经理的雇员记录。

--

procedure remove_emp(

remove_empno emp.empno%type,

out_code number,

out_desc varchar2)

is

x emp.job%type;

y number;

begin

select job,deptno into x,y from emp where empno=mgmt_empno;

if x=?PRESIDENT? then

delete from emp where empno=remove_empno and job=?MANAGER?;

else

delete from emp where empno=remove_empno and deptno=y and x=?MANAGER?;

end if

if sql%found then

out_code:=0;

out_desc:=?ok?;

else

out_code:=1;

out_desc:=?未删除记录?;

end if;

commit;

end;

4.*用DELPHI+ORACLE实现上题的软件功能。

实验十

1.编写一段PL/SQL,利用系统工具包,实现对SERVER端数据文件D:\DA TA\A.TXT的读取输出至缓冲区。

2.编写一个存储过程,就myEMP表,输入参数为字段名和匹配值(字符型),对符合匹配条件的工资加100。

3.编写一个存储过程,输入参数为一个表名,通过存储过程处理将该表删除DROP,并返回是否成功的信息。

实验十一

1.以雇员作为对象类型,试根据myEMP表结构设计其属性,方法主要有雇员更换部门、更换工种、MAP排序的定义。

2.编制一个雇员类型的对象表myOBJ_EMP。

3.添加对象表myOBJ_EMP的数据10条。

4.试对对象表排序输出。

5.给对象表中部门号为20的记录的工资增加10%。

6.显示每个雇员所在的雇员名、部门名称。

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练习题及答案

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数据库习题(有答案)

--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试题(含答案)

_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习题练习

习题1安装和运行Oracle数据库 一、填空题 1.数据库管理系统采用的数据模型主要有:(网状模型)、(层次模型)和(关系模型)。 2.(交换方式)是指数据库使用者利用数据库管理系统提供的软件工具,直接对数据库进行操作,操作结果立即返回到操作界面。 3.(数据库)是存储在计算机内,按一定数据模型组织的、可共享的数据集合。 4.通常,把每一个类数据对象的个体称为(实体)。 5.对于每一个实体集,可指定一个码为(主码)。 6.Oracle是(面向对象的关系型)数据库管理系统。 7.Oracle系统主要是由(oracle database)和(oracle application)两大产品及Oracle管理程序包等其他产品组成的。 8.从Oracle DataBase 10g开始,通过设置初始化参数(SHAED_SERVERS)可以自动激活共享服务器特征。 9.(Oracle数据库10g企业版)是为关键任务的应用程序(如大业务的在线事务处理(OLTP)环境、查询密集的数据仓库和要求苛刻的因特网应用程序)提供了高效、可靠、安全的数据管理的Oracle DataBase 10g版本。 10.Oracle 10g提供了(Automatic Storage Management ),从而在不需要第三方面产品的情况下实现冗余性和数据分离。 二、选择题 1.两个实体集A和B之间的联系不可能是以下(D)种情况。 A.1:1 B.1 : n C.m : n D.以上答案都不对 2.绘制E-R图时,当一个属性或属性组合指定为主码时,在实体集与属性的连接线上标记( D)。 A.矩形框 B.带圆角矩形框 C.线段 D.斜线 3.绘制E-R图时,实体用(A )表示。 A.矩形框 B.带圆角矩形 C.线段 D.斜线 4.(C)语言是过程化SQL的缩写。

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.在多进程Oracle实例系统中,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:数据定义语句(DDL)、数据操纵语句(DML)和数据控制语句(DCL)。 3.在需要滤除查询结果中重复的行时,必须使用关键字Distinct; 在需要返回查询结果中的所有行时,可以使用关键字ALL。 4.当进行模糊查询时,应使用关键字like和通配符问号(?)或百分号"%"。 5.Where子句可以接收From子句输出的数据,而HA VING子句则可以接收来自WHERE、FROM或GROUP BY子句的输入。 6.在SQL语句中,用于向表中插入数据的语句是Insert。 7.如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使用Select 语句。 8.使用Describe命令可以显示表的结构信息。 9.使用SQL*Plus的Get命令可以将文件检索到缓冲区,并且不执行。 10.使用Save命令可以将缓冲区中的SQL命令保存到一个文件中,并且可以使用Run命令运行该文件。 11.一个模式只能够被一个数据库对象所拥有,其创建的所有模式对象都保存在自己的模式中。 12.根据约束的作用域,约束可以分为表级约束和列级约束两种。列级约束是字段定义的一部分,只能够应用在一个列上;而表级约束的定义独立于列的定义,它可以应用于一个表中的多个列。 13.填写下面的语句,使其可以为Class表的ID列添加一个名为PK_CLASS_ID 的主键约束。 ALTER TABLE Class Add ____________ PK_LASS_ID (Constraint) PRIMARY KEY ________ (ID) 14. 每个Oracle 10g数据库在创建后都有4个默认的数据库用户:system、sys、sysman和DBcnmp

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数据库试题及答案

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)) 5、下列叙述中正确的就是_C_。 A、数据库就是一个独立的系统,不需要操作系统的支持 B、数据库设计就是指设计数据库管理系统 C、数据库技术的根本目标就是要解决数据共享的问题 D、数据库系统中,数据的物理结构必须与逻辑结构一致 6、SQL语句中修改表结构的命令就是 C 。 A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE 7、数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间的关系就是__ A___。 A、DBS包括DB与DBMS B、DBMS包括DB与DBS C、DB包括DBS与DBMS D、DBS就就是DB,也就就是DBMS 8、要控制两个表中数据的完整性与一致性可以设置"参照完整性",要求这两个表_A___。 A、就是同一个数据库中的两个表 B、不同数据库中的两个表 C、两个自由表 D、一个就是数据库表另一个就是自由表 9、在关系模型中,实现"关系中不允许出现相同的元组"的约束就是通过__B_ __。 A、候选键 B、主键 C、外键 D、超键 10、索引字段值不唯一,应该选择的索引类型为___ B__。 A、主索引 B、普通索引 C、候选索引 D、唯一索引 11、从数据库中删除表的命令就是___C __。 A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE 12、DELETE FROM S WHERE 年龄>60语句的功能就是___B___。 A、从S表中彻底删除年龄大于60岁的记录

Oracle数据库查询练习及答案

1 找出佣金高于薪金60%的雇员。 SELECT * FROM emp WHERE comm>sal*; 2 找出部门10中所有经理和部门20中所有办事员的详细资料。 SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK'; 3 找出部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等2000的所有雇员的详细资料。 SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR JOB NOT IN('MANAGER','CLERK') AND SAL>=2000; SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR (JOB<>'MANAGER' AND JOB<>'MANAGER' AND SAL>=2000); 4 找出收取佣金的雇员的不同工作。 SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL; 5 找出不收取佣金或收取的佣金低于300的雇员。 SELECT * FROM EMP WHERE COMM IS NULL OR COMM<300; 6 找出各月最后一天受雇的所有雇员。 SELECT * FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE); --找出各月最后受雇的所有雇员 SELECT * FROM emp WHERE hiredate IN (SELECT maxh FROM (SELECT MAX(HIREDATE) maxh,EXTRACT(MONTH FROM hiredate)FROM EMP GROUP BY EXTRACT(MONTH FROM hiredate))); 7 找出晚于26年之前受雇的雇员。 SELECT * FROM emp WHERE months_between(SYSDATE,hiredate)<=26*12; 8 显示只有首字母大写的的所有雇员的姓名。 SELECT * FROM emp WHERE ename=initcap(ename); 9 显示正好为5个字符的雇员的姓名。 SELECT * FROM emp WHERE length(ename)=5; 10显示不带有“R”的雇员姓名。 SELECT * FROM emp WHERE instr(ename,'R')=0; SELECT * FROM emp WHERE ename NOT LIKE '%R%'; 11显示所有雇员的姓名的前三个字符。 SELECT substr(ename,1,3) AS en3 FROM emp; 12显所有雇员的姓名,用a替换所有“A”。

Oracle试题(含答案)

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

oracle习题及答案

1.查询工资大于12000的员工姓名和工资 Select last_name||' '||first_name,salary from employees where salary >12000; 2.查询员工号为176的员工的姓名和部门号 Select last_name||' '||first_name,department_id from employees where employee_id=176; 3.选择工资不在5000到12000的员工的姓名和工资 Select last_name||' '||first_name,salary from employees where salary not between 5000 and 12000; 4.选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id 和雇用时间 Select last_name||' '||first_name,job_id,hire_date from employees where hire_date between '1-2月-98' and '1-5月-98'; 5.选择在20或50号部门工作的员工姓名和部门号 Select last_name||' '||first_name,department_id from employees where department_id in (20,50); 6.选择在1994年雇用的员工的姓名和雇用时间 Select last_name||' '||first_name,hire_date from employees where hire_date like '%94'; 7.选择公司中没有管理者的员工姓名及job_id Select last_name||' '||first_name,job_id from employees where Manger_id is null;

Oracle简单Scott用户表练习 带答案

一、使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下: emp员工表 (empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号) dept部门表 (deptno部门编号/dname部门名称/loc地点) 工资=薪金+佣金 1. 列出在每个部门工作的员工数量、平均工资和平均服务期限。Select deptno,count(*),avg(sal+nvl(comm,0)),avg(sysdate-hiredate) from emp group by deptno; 2. 列出所有员工的姓名、部门名称和工资。Select ename,bname,sal+nvl(comm,0) from dept,emp where dept.deptno=emp.deptno; 3. 列出从事同一种工作但属于不同部门的员工的一种组合。Select distinct a.ename , a.job,a.deptno from emp a,emp b where (a.deptno> b.deptno) or (a.deptno(select sal from emp where ename=‘SMITH’); 11. 列出所有员工的姓名及其直接上级的姓名。select a.ename 员工姓名,b.ename 直接上级from emp a,emp b where a.mgr=b.empno; 12. 列出受雇日期早于其直接上级的所有员工。select a.ename from emp a,emp b where a.hiredate< b.hiredate and a.mgr=b.empno; 13. 列出所有“CLERK”(办事员)的姓名及其部门名称。 14. 列出最低薪金大于1500的各种工作。select job from emp where sal>1500; 15. 列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。Select ename from emp where deptno=(select deptno from dept where dname=’SALES’); 16. 列出薪金高于公司平均薪金的所有员工。Select ename from emp where sal>(select avg(sal) as avg_sal from emp); 17. 列出与“SCOTT”从事相同工作的所有员工。Select ename from emp where job=(select job from emp where ename =’SCOTT’); 18. 列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。Select ename,sal from emp where deptno!= 30,sal in (select sal from emp where deptno=’30’);

相关文档
相关文档 最新文档