数据库基本练习

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.jianshu.com/u/66bf7abdc5a8

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容