Oracle 数据库基础练习

1.选择在部门 30 中员工的所有信息 
 select * from emp where deptno=30;

2 列出职位为(MANAGER)的员工的编号,姓名
 
select ename,empno from emp where job='MANAGER'

3 找出奖金高于工资的员工 

select ename from emp where comm>sal;

4 找出每个员工奖金和工资的总和 

select ename,sal+ nvl(comm,0) total from emp;
select ename,nvl2(comm,sal+comm,sal) total from emp;

5 找出部门 10 中的经理(MANAGER)和部门 20 中的普通员工(CLERK) 

select * from emp where (deptno=10 and  job='MANAGER') or (deptno=20 and  job='CLERK');
 
6 找出部门 10 中既不是经理也不是普通员工,而且工资大于等于 2000 的员工

 select ename from emp where (deptno=10 and sal>2000)and job!='MANAGER' and job!='CLERK' ;
 select ename from emp where (deptno=10 and sal>2000)and job not in('MANAGER','CLERK') ;

7 找出有奖金的员工的不同工作 

select distinct job from emp where comm>0 and comm is not null;

8 找出没有奖金或者奖金低于 500 的员工 
select ename from emp where comm<500 or comm is null or comm=0;
 
9 显示雇员姓名,根据其服务年限,将最老的雇员排在最前面
select ename,to_char(hiredate,'yyyy-mm-dd') from emp order by to_char(hiredate,'yyyy-mm-dd');

select ename,hiredate from emp order by hiredate

***************************************************************************************************************

--1 找出每个月倒数第三天受雇的员工(如:2009-5-29)
 
select ename from emp where hiredate=last_day(hiredate)-2;

--2 找出 25 年前雇的员工 
select ename, to_char(hiredate,'yyyy-mm-dd') from emp hiredate<add_months(sysdate,-25*12);
select ename, to_char(hiredate,'yyyy-mm-dd') from emp where months_between(sysdate,hiredate)>25*12;
select ename, to_char(hiredate,'yyyy-mm-dd') from emp where (to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy')) >25;

--3 所有员工名字前加上 Dear ,并且名字首字母大写 
select concat('Dear',initcap(ename)) from emp;


4 找出姓名为 5 个字母的员工 
select ename from emp where  length(ename)=5; -- ename like '_____';


5 找出姓名中不带 R 这个字母的员工 
select ename from emp where ename not like '%R%';


6 显示所有员工的姓名的第一个字 
select ename,substr(ename,0,1) from emp;


7 显示所有员工,按名字降序排列,若相同,则按工资升序排序 
select ename from emp order by ename desc , sal asc;


8 假设一个月为 30 天,找出所有员工的日薪,不计小数 
select ename,sal,round(sal/30,0) from emp; 


9 找到 2 月份受雇的员工 
select ename from emp where to_char(hiredate,'mm')='02';


10 列出员工加入公司的天数(四舍五入) 
select ename,round(sysdate-hiredate) from emp;


11 分别用 case 和 decode 函数列出员工所在的部门,
   deptno=10 显示'部门 10', 
   deptno=20 显示'部门 20'    
   deptno=30 显示'部门 30'    
   deptno=40 显示'部门 40'  
  否则为'其他部门' 
select deptno,ename,sal,( case deptno when 10 then '部门 10' when 20 then '部门 20'
when 30 then '部门 30' when 40 then '部门 40' else '其他部门' end) dept from emp;

select deptno,ename,sal,decode(deptno,10,'部门 10',20,
 '部门 20',30,'部门 30','其他部门') dept from emp;



猜你喜欢

转载自blog.csdn.net/banpu/article/details/78229699