oracle如何查询年薪 oracle查询上年末

用SQL语句怎样查年薪和月薪这个问题,首先要有个思路:
1 求年薪和月薪,那么首先要确定,年薪和月薪是怎么算的 ,
根据你的描述,发薪水没有固定日期 , 比如说这个月发了4次薪水,那么这个人的这个月的月薪水就是这四次的钱加起来,这样算的话,月薪就是每个月单独计算特有的,但是你说的这个月薪是年平均的还是按月单独算呢?
假设是年平均的吧:
select t1.staff_name, sum(t1.staff_salary)/12 as 月薪 from salary t1
where t1.salary_dateto_date('2010-01-01','YYYY-MM_DD')
and t1.salary_dateto_date('2010-12-31','YYYY-MM_DD')
group by t1.staff_name
年薪:
select t1.staff_name, sum(t1.staff_salary) as 年薪 from salary t1
where t1.salary_dateto_date('2010-01-01','YYYY-MM_DD')
and t1.salary_dateto_date('2010-12-31','YYYY-MM_DD')
group by t1.staff_name
月薪在500-800之间的员工姓名,这个不用我写了吧 。
当然 , 单独算月薪也是可以的,需要的话给我留言~
Oracle数据库中 查询高于自己部门平均工资的员工信息 用相关子查询怎么做?。?/h2>每个部门俯场碘渡鄢盗碉醛冬互大于所有人平均工资的员工:
Select BM,YG From TB WHERE Salary(Select Avg(Salary) From TB)
每个部门大于所在部门所有人平均工资的员工:
Select BM,YG From TB
Join (Select BM,Avg(Salary) as AvgSalary From TB
Group By BM) As Temp
On TB.BM=Temp.BM
where SalaryTemp.AvgSalary
SELECT DEPT.DNAME, EMP.ENAME, (EMP.SALNVL(EMP.COMM, 0)) AS SC
FROM EMP,
DEPT,
(SELECT DEPT.DEPTNO AS D, AVG(EMP.SALNVL(EMP.COMM, 0)) ESC
FROM DEPT, EMP
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DEPT.DEPTNO) T
WH俯场碘渡鄢盗碉醛冬互ERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.DEPTNO = T.D
AND (EMP.SALNVL(EMP.COMM, 0))T.ESC;
select a.empname, b.deptname ,a.salary
from emp as a,
( select d俯场碘渡鄢盗碉醛冬互eptid,deptname ,avg(salary) c from dept group by deptid,deptname ) b
where a.deptid=b.deptid
and a.salary b.c
一、单行子查询:
1、单行子查询指在子查询中只返回单行值,这种子查询需要使用单行比较运算符,包括=、、=、、=、 。
2、单行子查询出现在WHERE子句中,如下所示:
3、单行子查询中有分组函数,要求分组函数返回的是单行数据 。如下图为查询出薪水比本部门平均薪水高的员工信息:
4、单行子查询出现在HAVING子句中,如下图为查询出平均薪水高于部门30最高薪水的部门信息 。
二、多行子查询:
如果子查询返回了多行,则主查询中的比较操作符应该使用多行比较操作符 。Oracle数据库中的多行比较操作符包括IN、ALL、ANY,其中ALL和ANY不能单独使用 , 需要配合单行比较操作符、=、、=一起使用 。
1、多行子查询中使用IN:
IN后面是值的列表,只不过这里的值是子查询查出来的多个数据 。如下图:
三、多行子查询中使用ANY操作符:
ANY操作符不能单独使用 , 必须和、等比较操作符一起使用 。ANY表示大于列表中任何一个数据即为TRUE;ANY表示小于列表中的任何数据即为TRUE 。具体实现如下图:
oracle中查询每个部门的年薪怎么写不知道你要统计什么时间的 。我按最简单的来说明一下 。如统计2017年的说明一下 。
select deptno,sum(sal nvl(comm,0))*12 from scott.emp group by deptno
如果是要统计1981年的年薪 , 就需要用到HIREDATE 也就是入职时间 , 每一个人员按月计算
selectDEPTNO, sum(JE* (CASEWHEN NY=12 THEN 12 ELSE NY END ))FROM
(select empno,deptno,(sal nvl(comm,0)) JE ,
months_between(to_date(198201,'yyyymm'),to_date(to_char(hiredate,'yyyymm'),'yyyymm')) NY
from scott.emp
where hiredateto_date(19820101,'yyyymmdd'))
group by deptno
如上,需要months_between比较二个月之差,用CASE when then 控制超出12个月的数据 。
数据库常用查询操作--注释
--select *|字段名1,字段名2... from 表名;
--1)
--查询|检索|获取 所有员工的所有信息
--查询的数据: 员工的所有信息
--数据的来源:员工表emp
--条件:
select * from emp;
--2)
--查询所有的员工名字
select ename from emp;
--3)
--查询所有的员工编号和员工名称,员工上级的编号
--查询的数据: empno,ename,mgr
--数据的来源:员工表emp
select empno,ename,mgr from emp;
--4)
--查询所有部门部门编号
select deptno from dept;
--5)
--查询出所有员工所在的部门的部门编号
select distinctdeptno from emp;
--对查询数据进行去重(非字段去重) distinct
--6)
--查询出所有存在员工的部门的部门编号,以及员工名称
select deptno,ename from emp;
select distinct sal,deptno from emp;
--7)
--查询表达式,结果是表达式的值,显示的字段名就是表达式,计算值
select 1 1 from emp;
select 'a' from emp;
--8)
--给字段取别名select 字段1 (as) 别名1,字段2 别名2 from 表名 别名;表的别名不能加as
--查询所有员工的名称(别名为:名字),员工编号(编号)
--别名默认变大写,别名中的内容原封不动出现 ""-中的内容原封不动出现
select 123 456 "get sum" from emp;
select empno as 员工编号,ename "员工 姓名" from emp;
--9)
--字符串 ''原封不动显示""
select distinct '哈哈' 笑 from emp e;
--10)
--字符串拼接 java中使用这里使用||
--查询 ab--cd表达式
select distinct 'ab-'||'-cd' from emp;
--查询所有的员工名字,给他们来一个前缀SXT
select 'sxt-'||ename from emp;
--11)
--伪列 : 不存在的列就是伪列比如:表达式,字符串
--12)
--虚表: 在oracle中不存在的表,也可以说是这个表中没有任何数据,没有任何字段 --oracle中的虚表:dual
--虚表的作用:可以不使用distinct就可以去重的效果,因为里面没有数据,不会出现多行
select * from dual;
select distinct 123*456 from emp;
select 123*456 from dual;
select sysdate from dual;
--比如查询当前时间
--13)
--给每一个员工在原来的基础上 100块钱奖金
--null 空
--null与数字运算,结果还为null
--null与字符串运算,结果原串
--nvl(参数1,参数2) 处理null使用如果参数1为null,最终结果参数2,如果参数1不为null,最终的结果就是参数1
select comm 原奖金,comm||'100' 新奖金 from emp;
select comm 原奖金,nvl(comm,0) 100 新奖金from emp
--一节结尾小练习
--查询所有员工的名字, 工种, 年薪(不带奖金)
select ename,job,sal*12 年薪 from emp;
--查询所有员工的名字,工种,年薪(带12月奖金的)
select ename,job,(sal nvl(comm,0))*12 年薪 from emp;
--查询所有员工的名字, 工种, 年薪(带一次奖金的)
select ename,job,sal*12 nvl(comm,0) 年薪 from emp;
--select *|表达式|字符串|伪列|字段1 别名1,字段2 as 别名2... from 表名 别名|结果集 where 行过滤条件;
--执行流程: from--where--select确定结果集
-- 查询20部门的员工信息
--数据: *
--来源: emp
--条件: deptno=20
select * from emp where deptno=20;
--=== !=
-- 查询工资大于1000的员工的姓名 工作岗位工资所属部门编号
--数据: ename,job,sal,deptno
--来源: emp
--条件: sal1000
select ename,job,sal,deptno from emp where sal=1000;
-- 查询不在20部门工作的员工信息
select * from emp where deptno != 20;
select * from emp where deptno20;
--where 中不能使用字段的别名
-- 查询员工的年薪大于20000的 员工名称、岗位 年薪
select ename 姓名,job 岗位,(sal nvl(comm,0))*12 sum from emp where ((sal nvl(comm,0))*12)20000;
select ename 姓名,job 岗位,(sal nvl(comm,0))*12 sum from emp;
select 岗位, sum
from (select ename 姓名, job 岗位, (salnvl(comm, 0)) * 12 sum from emp)
where sum20000;
-- 查询any(任意一个)some(任意一个)all(所有)
select * from emp where deptno = any(10,20);
select * from emp where deptno = some(10,20);
--大于最小的
select * from emp where sal any(1500,2000); --薪资1500的就可以
--大于最大的
select * from emp where sal all(1500,2000); --薪资2000的就可以
-- 查询 工种不为’SALESMAN’的员工信息 (注意 内容区分大小写)
select * from emp where not job ='SALESMAN';
--or或 and并且|都not取反
-- -检索 工资 1600, 3000员工名称 岗位 工资
select ename,job,sal from emp where sal=1600 or sal=3000;
select ename,job,sal from emp where not (sal=1600 or sal=3000);
-- 工资在2000到3000之间的员工信息
select * from emp where sal2000 and sal3000;
--between 小范围值and 大范围的值两者之间= =
select * from emp where sal between 1600 and 3000;
---查询 岗位 为 CLERK 且部门编号为 20的员工名称 部门编号,工资
select ename ,deptno ,sal from emp where job='CLERK' and deptno=20;
-- 查询 岗位 为 CLERK 或部门编号为 20的员工名称 部门编号,工资
select ename ,deptno ,sal,job from emp where job='CLERK' or deptno=20;
--查询 岗位 不是 CLERK 员工名称 部门编号,工资
select ename ,deptno ,sal,job from emp where job!='CLERK';
select ename ,deptno ,sal,job from emp where not job='CLERK';
select ename ,deptno ,sal,job from emp where job'CLERK';
-- 查询 岗位 不为 CLERK 并且部门编号不为 20的员工名称 部门编号,工资
select ename ,deptno ,sal,job from emp where job!='CLERK' and deptno!=20;
select ename ,deptno ,sal,job from emp where not (job='CLERK' or deptno=20);
--存在佣奖金的员工名称
select ename,comm from emp where not comm is null;
select ename,comm from emp where comm is not null;
--不存在奖金的员工名称
select ename,comm from emp where comm is null;
--集合
--Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
--Union All , 全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;
--Intersect , 交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
--Minus,差集( 减去重复 ) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序
--查询工资大于1500 或 含有佣金的人员姓名
select ename,sal,comm from emp where sal1500 or comm is not null;
select ename,sal,comm from emp where sal1500;
select ename,sal,comm from emp where comm is not null;
--并集
select ename,sal,comm from emp where sal1500
Union
select ename,sal,comm from emp where comm is not null;
select ename,sal,comm from emp where sal1500
Union all
select ename,sal,comm from emp where comm is not null;
--查询显示不存在雇员的所有部门号 。
--求出所有的部门号
select deptno from dept;
--有员工的部门号
select distinct deptno from emp;
select deptno from dept
Minus
select distinct deptno from emp;
-- 查询显示存在雇员的所有部门号 。
select deptno from dept
Intersect
select distinct deptno from emp;
--模糊匹配like %任意任意字符_一个任意字符一起使用
--查询员工姓名中包含字符A的员工信息
select * from emp where ename like '%A%';
--完全匹配
select * from emp where ename like 'SMITH';
--查询员工姓名以'A'结尾的员工信息
select * from emp where ename like 'A%';
--查询员工姓名中第二个字母为A的员工信息
select * from emp where ename like '_A%';
insert into emp(empno,ename,sal) values(1000,'t_%test',8989);
insert into emp(empno,ename,sal) values(1200,'t_tes%t',8000);
--escape('单个字符')指定转义符
--查询员工姓名中包含字符%的员工信息
select * from emp where ename like '%B%%' escape('B');
--当执行插入数据,删除数据,修改的时候,默认开启事务
--可提交commit
--可回滚rollback
--多个人中任意一个值就可以
select * from emp where sal=1600 or sal=3000 or sal=1500;
select * from emp where sal in(1500,1600,3000);
--select 字段.. from 结果集 where 行过滤条件 order by 排序字段 desc降序|asc升序(默认)..;
--执行流程: from-- where--select--排序
select empno,ename,sal from emp order by sal desc,empno asc;
--按照奖金升序排序,如果存在null值,所有的奖金null值的数据最先显示
select empno,ename,sal,comm from emp where deptno in (10,30) order by comm asc nulls first;
【oracle如何查询年薪 oracle查询上年末】oracle如何查询年薪的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于oracle查询上年末、oracle如何查询年薪的信息别忘了在本站进行查找喔 。

    推荐阅读