数据库基本练习

1、查询部门30中的所有员工的全部信息。 

select * from emp where deptno=30;

2、查询所有办事员(CLERK)的姓名,编号和部门编号。 

select ename,empno,deptno from emp where job='CLERK';

3、查询补助高于薪金的员工的全部信息。 

select * from emp where nvl(comm,0) > sal;

4、查询补助高于薪金的60%的员工的全部信息。 

select * from emp where nvl(comm,0) > (sal*0.6);

5、查询部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。 

select * from emp where (deptno=10 and job='MANAGER') or (deptno=20 And job='CLERK');


 

6、查询部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料。 

理解1:查询部门10中所有经理(MANAGER),部门20中所有办事员(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);


 

理解2:查询部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),以及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 And deptno In (10,20));


 

7、查询收取补助的员工的不同工作。 

select ename,job,comm from emp where nvl(comm,0) > 0;


 

8、查询不收取佣金或收取的补助小于100的员工。 

select * from emp where nvl(comm,0) <100;


 

9、查询各月倒数第3天受雇的所有员工。 

Select * From emp Where (last_day(hiredate) - hiredate) = 2;


 

10、查询早于12年前受雇的员工。 

Select * From emp Where to_char(Sysdate,'yyyy') - to_char(hiredate,'yyyy') >= 12;


 

11、查询首字母大写的方式显示所有员工的姓名。 

Select ename,Initcap(ename) From emp;


 

12、查询正好为5个字符的员工的姓名。 

Select ename From emp Where Length(ename)=5;


 

13、查询不带有“R”的员工的姓名。 

做法1:Select ename From emp Where ename Not Like '%R%';

做法2:Select ename From emp Where Instr(ename,'R')=0; 


 

14、查询所有员工姓名的前三个字符。

Select ename, Substr(ename,1,3) From emp; 


 

15、查询所有员工的姓名,用“a”替换所有“A” 

Select ename,Replace(ename,'A','a') From emp;


 

16、查询满10年服务年限的员工的姓名和受雇日期。 

方法1:如果不考虑到闰年平年的话,10*365可以代表10年。

Select ename, hiredate From emp Where (Sysdate-hiredate)>=10*365;

方法2:如果考虑到闰年平年,10*365是不满足10年的要求。

如果服务年限满10年,那排除月日,sysdate和hiredate在年份上肯定也是>=10

Select ename, hiredate From emp Where (to_char(Sysdate,'yyyy') - to_char(hiredate,'yyyy')) >= 10;


 

17、查询员工的详细资料,按姓名排序。 

Select * From emp Order By ename;


 

18、查询员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面。

Select ename, hiredate From emp Order By hiredate Desc; 


 

19、查询所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序。 

Select ename,job,sal From emp Order By job Desc,sal Desc; 


 

20、查询所有员工的姓名,加入公司的年份和月份,按受雇日期所在月份排序,若月份相同则将最早年份的员工排在最前面。 

Select ename,to_char(hiredate,'yyyy'),to_char(hiredate,'mm') From emp Order By to_char(hiredate,'mm'),to_char(hiredate,'yyyy');


 

21、查询在一个月尾30天的情况所有员工的日薪金,忽略余数。 

Select ename,Trunc(sal/30) From emp;


 

22、查询在(任何年份的)2月受聘的所有员工。 

Select * From emp Where to_char(hiredate,'mm')=2;


 

23、查询每个员工加入公司的天数。 

Select ename,(Sysdate-hiredate) From emp;


 

24、查询姓名字段的任何位置包含“A”的所有员工的姓名。 

Select ename From emp Where ename Like '%A%';


 

25、查询以年月日的方式显示所有员工的服务年限。(大概)

Select ename,sysdate,hiredate,Round(sysdate-hiredate) 天数,

Nvl(Trunc((sysdate-hiredate)/365),0)||'年'||

Nvl(Trunc((Mod((sysdate-hiredate),365))/30),0)||'月'||

Nvl(Round(Mod((Mod((sysdate-hiredate),365)),30)),0)||'日' 年月日 From emp;


 

作者:kerwin-chyl

文章链接:https:////www.cnblogs.com/kerwin-chyl

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

猜你喜欢

转载自www.cnblogs.com/kerwin-chyl/p/12366961.html
今日推荐