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;