oracle学习篇三:SQL查询

Posted 陈小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle学习篇三:SQL查询相关的知识,希望对你有一定的参考价值。


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;

 

 

以上是关于oracle学习篇三:SQL查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle学习篇之SQL语句的优化

Oracle学习(十三):闪回

Oracle学习(十三):闪回

oracle 学习笔记

Oracle学习笔记——查询

Oracle SQL语言之查询语句_超越OCP精通Oracle视频教程培训29