select * from emp;
--1.找出部门30的员工
select * from emp where deptno = 30;
--2.列出所有办事员(CLERK)的姓名,变化和部门编号
select * from emp where job = upper('clerk');
--3.找出佣金高于薪金的员工。
select * from emp where comm > sal;
--4.找出佣金高于薪金60%的员工。
select *
from emp
where comm > sal * 0.6
--5.找出部门10中所有的经理(MANAGER)和部门20中所有的办事员(CLERK)的详细资料
select *
from emp
where (deptno = 10 and job = upper('manager'))
or (deptno = 20 and job = upper('clerk'));
--6.找出部门10中所有的经理(MANAGER)和部门20中所有的办事员(CLERK)的详细资料,既不是经理又不是办事员,但薪资大于等于2000的所有员工地详细信息
select *
from emp
where (deptno = 10 and job = upper('manager'))
or (deptno = 20 and job = upper('clerk'))
or (job not in ('MANAGER', 'CLERK') and sal >= 2000);
--7.找出收取佣金的员工地不同工作
select distinct job from emp where comm is not null;
--8.找出不收取佣金或收取佣金低于100的员工.
select *
from emp
where comm is null
or comm < 100;
--9.找出各个月倒数第3天受雇的员工
select LAST_DAY(HIREDATE)
from emp
select * from emp where LAST_DAY(HIREDATE) - 2 = HIREDATE;
--10.找出早于12年前受雇的员工.
select * from emp where months_between(sysdate, hiredate) / 12 > 12;
--11.以首字母大写的方式显示所有员工姓名
select initcap(ename) from emp;
--12.显示正好为5个字符的员工姓名.
select * from emp where length(ename) = 5;
--13.显示不带“R”的员工姓名.
select * from emp where ename not like '%R%';
--14.显示所有员工共姓名前三个字符.
select substr(ename, 0, 3) from emp;
--15.显示所有员工,用“a"替换"A"
select replace(ename, 'A', 'a') from emp;
--16.显示满10年的员工姓名和授雇日期
select ename, hiredate
from emp
where months_between(sysdate, hiredate) / 12 > 10;
--17.显示员工的详细资料,按姓名排序
select * from emp order by ename;
--18.显示员工姓名和授雇日期,根据其服务年限,将最老的员工牌在最前面
select ename, hiredate from emp order by hiredate;
--19.显示所有员工的姓名/工作和薪资,按工作的降序排序,若共工作相同则按薪资排序
select ename, job, sal from emp order by job desc, sal;
--20.显示所有员工的姓名/加入公司的年份和月份,安排受雇日前所作的月排序,若月份相同则将最早年份的员工排在最前面。
select ename, to_char(hiredate, 'yyyy') y, to_char(hiredate, 'mm') m
from emp
order by m, y;
--21.显示在一个月为30天的情况,所有员工日薪资,忽略余数。
select ename, round(sal / 30) from emp;
--22.找出在(任何年份的)2月份受雇的员工。
select * from emp where to_char(hiredate, 'mm') = '02';
--23.对于每个员工显示其加入公司的天数。
select ename, trunc(sysdate - hiredate) from emp;
--24.显示姓名字段的任何位置包含“A”的所有员工地姓名。
select ename from emp where ename like '%A%';
--25.以年月日的方式显示所有员工的服务年限(大概)
select ename,
hiredate,
trunc(months_between(sysdate, hiredate) / 12) y,
trunc(mod(months_between(sysdate, hiredate), 12)) m,
trunc(mod(sysdate - hiredate, 30)) d
from emp;