02 Oracle 习题集(V4)

发布时间 : 星期二 文章02 Oracle 习题集(V4)更新完毕开始阅读

Oracle习题集 北京融信学唐科技有限公司

Oracle习题集

目 录

第1章 简单查询 ........................................................................................................................... 2 第2章 多表查询 ........................................................................................................................... 6 第3章 分组查询 ........................................................................................................................... 8 第4章 子查询 ............................................................................................................................. 14 第5章 表、约束、数据插入、修改、删除、SEQUENCE .................................................... 16 第6章 视图 ................................................................................................................................. 19 第7章 用户角色权限 ................................................................................................................. 21 第8章 表空间、分区表 ............................................................................................................. 23 第9章 PL/SQL ........................................................................................................................... 24 第10章 存储过程与函数 ............................................................................................................. 27 第11章 数据库高级 ..................................................................................................................... 31 第12章 数据库设计 ..................................................................................................................... 32

第1页 共32页

Oracle习题集 北京融信学唐科技有限公司

第1章 简单查询

使用SQL PLUS工具登陆,用户名用scott。

1. 在emp表中查询出所有记录的姓名、部门编号、薪水,并且列名要显示为中文。

select ename as 姓名, deptno as 部门编号, sal as 薪水 from emp; 2. 在emp表中查询出薪水大于1500的记录,并且按照薪水的降序排列。 select sal from emp where sal > 1500 order by sal desc; 3. 在emp表中查询出comm字段为空值的记录。

select empno,ename,sal,comm from emp where comm is null;

4. 查询出emp表中含有几个部门的记录。(用DISTINCT去除重复记录) select distinct deptno from emp;

5. 在emp表中查询出部门编号为10或20的记录(请分别使用OR和IN关键字)

select * from emp where deptno=10 or deptno=20; select * from emp where deptno in (10,20);

6. 在emp表中查询出姓名的第二个字母为A的记录。 select * from emp where ename like '_A%'; 7. 查询出emp表中总共有多少条记录。 select count(*) from emp;

8. 查询emp表中1981年雇用的所有员工,或者是1987年5月雇用的员工。

select ename,hiredate from emp

where to_char(hiredate,'yyyy')=1981 or to_char(hiredate,'yyyymm')=198705; 9. 选择部门30的所有员工。

select ename,deptno from emp where deptno=30;

10. 列出所有办事员(CLERK)的姓名,编号和部门编号。 select empno,ename,deptno from emp where job='CLERK';

第2页 共32页

Oracle习题集 北京融信学唐科技有限公司

11. 找出佣金高于薪金的所有员工。

select ename,sal,comm from emp where comm > sal; 12. 找出佣金高于薪金30%的所有员工。

select ename,sal,comm from emp where comm > sal*0.3;

13. 找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。 select * from emp

where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK');

14. 找出部门10中所有经理(MANAGER),部门20 中所有办事员(CLERK),既不是经理又不是办事员(CLERK)但其薪金大于或等于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); 15. 找出收取佣金的员工的不同的工作。

select distinct job from emp where comm is not null; 16. 找出不收取佣金或收取佣金少于100的员工。

select ename,comm from emp where comm is null or comm<100; 17. 显示姓名不带有R的员工的姓名。

select ename from emp where ename not like '%R%'; 18. 显示员工的详细资料,按姓名排序。 select * from emp order by ename desc

19. 显示员工的姓名和受雇日期,根据服务年限,将最老的员工排在最前面。

select ename,hiredate from emp

order by to_char( hiredate,'yyyy-mm-dd');

第3页 共32页

Oracle习题集 北京融信学唐科技有限公司

20. 显示所有员工的姓名,工作和薪金,按工作降序排序,若工作相同则按薪金排序。

select ename,job,sal from emp order by job desc , sal desc;

21. 显示姓名字段的任何位置包含A的所有员工的姓名。 select ename from emp where ename like '%A%'; 22. 找出各月倒数第三天受雇的所有员工。

select ename,hiredate from emp where LAST_DAY(hiredate)-2=hiredate; 23. 找出早于28年前受雇的所有员工。 select ename ,hiredate from emp

where to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy')>28; 24. 以首字大写的方式显示所有员工的姓名。 select initcap(ename) from emp;

25. 显示员工姓名正好为5个字符的员工。 select ename from emp where ename like '_____'; SELECT * FROM emp WHERE length (ename)=5; 26. 显示所有员工姓名的前三个字符。 select substr(ename,1,3) from emp;

27. 显示所有员工的姓名,用 a 替换A。 select replace(ename,'A','a') from emp;

28. 显示满10年服务年限的员工的姓名和受雇日期。

select ename,hiredate from emp

where to_char(sysdate,'yyyymm')-to_char(hiredate,'yyyymm') >=10;

29. 显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同,则将最早年份的员工排在最前面。 select ename,to_char(hiredate,'yyyy-mm') from emp

第4页 共32页

联系合同范文客服:xxxxx#qq.com(#替换为@)