oracle练习及答案

2018-11-28 18:13

实验一

练习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=30 and 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计算。

declare

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;


oracle练习及答案.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018-2019学年人教部编版七年级第一学期第一次月考语文试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: