码迷,mamicode.com
首页 > 数据库 > 详细

Oracle简单查询实例

时间:2017-07-26 23:48:01      阅读:365      评论:0      收藏:0      [点我收藏+]

标签:xxx   manager   code   red   comm   有奖   简单   esc   详细   

--查询不重复的职位
select distinct job from emp;
--查询年薪,起别名,别名不要用单引号括起来
select sal*12 as nianxin from emp sal;
--以这样的形式显示具体数据:雇员编号是:姓名是:工资为:职位是:!
select 雇员编号是:||empno,姓名是:||ename,工资是:||sal,职位是:||job||! from emp;
--查询不是职位不是“CLERK”的员工信息(至少用2种方式查询)
select * from emp where job != CLERK;
select * from emp where job not like %CLERK%;
--查询下员工姓名中有O和T的
select * from emp where ename like %O% and ename like %T%;
--将员工工资按照由高到低的顺序排列
select sal from emp order by sal desc;
--查询显示工资大于各个部门工资的平均值的员工的年龄
select empno,a.deptno,a.sal,b.deptno,b.gsal,round((sysdate - hiredate) / 365, 0) --年龄
from emp a,(select deptno,round(avg(sal),0)as gsal from emp group by deptno) b --基表和视图表
where a.deptno=b.deptno --主键连接基表和视图
and a.sal>b.gsal; --工资大于各部门平均工资
--查询各个部门工资范围,按照1000~2000,2000~3000.。。。这样的格式显示人数
--------------------------没看懂意思
--要求查询出工资比SMITH工资要高的全部雇员信息
select * from emp where sal>(select sal from emp where ename=SMITH);
--要求查询出高于公司平均工资的全部雇员信息
select * from emp where sal>(select avg(sal) from emp);
--查询出每个部门的编号、名称、位置、部门人数、平均工资
select deptno,avg(sal) from emp group by deptno;
--统计各个部门的人数*/
select deptno,count (*) from emp group by deptno;
select * from emp;
--1  选择部门30中的所有员工。
select ename from emp where deptno = 30;
--2  列出所有办事员(CLERK)的姓名,雇员编号和部门编号。
select ename,empno,deptno from emp where job=CLERK;
--3  找出奖金高于薪金的员工。
select ename from emp where comm>sal;
--4  找出奖金高于薪金60%的员工。
select ename from emp where comm>(sal*0.6);
--5  找出部门10中所有经理(MANAGER)
select * from emp where deptno = 10 and job = MANAGER;
--6  找出部门10中所有经理(MANAGER),以及所有部门中即不是经理又不是办事员但薪金大于或等于2000的所有员工的详细资料。
select * from emp where (deptno=10 and job = MANAGER) or (job not in(MANAGE,CLERK) and sal>=2000)
select * from emp;
--7  找出有奖金的员工的不同工作。
select distinct job from emp where comm>0;
--8  找出没有奖金或奖金低于100的员工。
select * from emp where (comm<100 or comm is not null);
--9  找出每个月倒数第3天受雇的所有员工。
select * from emp where hiredate=(last_day(hiredate)-2);
--10  找出早于30年前受雇的员工。
select * from emp where add_months(sysdate,-30*12)>=hiredate; --add_months(xxxx,+or-) 当前时间+或者减月份
--11  以首字母大写的方式显示所有员工的姓名。
select initcap(ename) from emp;
--12  显示正好为5个字符的员工的姓名。
select ename from emp where length(ename)=5;
--13  显示不带有‘R‘的员工的姓名。
select ename from emp where ename not like %R%;
--14  显示所有员工姓名的前三个字符。
select substr(ename,3) from emp;
--15  显示所有员工的姓名,用‘L‘代替所有‘A‘
select replace (ename,L,A) from emp;
--16  显示满30年服务年限的员工的姓名和受雇日期。
select months_between(sysdate,hiredate)/12 from emp;
select ename,hiredate from emp where months_between(sysdate,hiredate)/12 >=30 ;
--17  显示员工的详细资料,按姓名排序。
select * from emp order by ename desc;
--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)年份,to_char(hiredate,mm) 月份 from emp order by 月份,年份;--------------------------------
--21  显示在一个月为30天的情况所有员工的日薪金,忽略余数。
select 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%;

 

Oracle简单查询实例

标签:xxx   manager   code   red   comm   有奖   简单   esc   详细   

原文地址:http://www.cnblogs.com/loyer/p/7242228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!