8.2.6exists
-查询销售部与会计部的员工信息
select *
from emp
where exists
(select * from dept where dname in('SALES','ACCOUNTING') and dept.deptno = emp.deptno);
select *
from emp e
where exists
(select * from dept d where dname in('SALES','ACCOUNTING') and d.deptno = e.deptno);
--查询所有的
select *
from emp e
where exists
(select * from dept d where dname in('SALES','ACCOUNTING') and d.deptno != e.deptno);
--查询除了10.30部门|'SALES','ACCOUNTING'的员工信息
select *
from emp e
where not exists
(select * from dept d where dname in('SALES','ACCOUNTING') and d.deptno = e.deptno);
--给所有的员工 涨薪,10-->10% 20-->8% 30 -->15% 其他-->20%
select ename,
sal,
deptno,
decode(deptno,
10,
sal * 1.1,
20,
sal * 1.08,
30,
sal * 1.15,
sal * 1.2) raisesal
from emp;
--给20部门的所有员工都涨薪10%,显示出员工的名称, 原来的薪水, 所属部门编号, 涨薪后的薪水
select
ename,sal,deptno,(
case deptno
when 20 then
(sal*1.1)
end)sal
from emp;
-- 10部门涨薪10%, 20涨薪20%,30降薪1% , 40部门翻倍3倍
select ename,
sal 原工资,
deptno,
decode(deptno,
10,
sal / 1.1,
20,
sal / 1.2,
30,
sal / 0.1,
40,
sal * 3) 现工资
from emp;
8.2.7函数(单行函数)
-- 函数 :
-- 单行函数 : 一条记录返回一个结果
-- 多行函数|聚合函数|组函数 : 多条记录返回一个结果
--单行函数
-- 当前时间 :
select distinct sysdate from emp;
select distinct current_date from emp;
-- 2天以后是几号
select sysdate+2 from dual;
-- 所有员工入职的3天后是几号
select ename,hiredate,hiredate+3 from emp;
-- 查询所有员工的试用期到期(转正的日期) 3个月试用期
select ename,sal,hiredate,hiredate+90 from emp;
--日期可以直接+-
--add_months(基准日期,+-月份)
select ename,sal,hiredate,add_months(hiredate,3) from emp;
-- 查询所有员工到目前为止一共工作了几个月
select ename,sal,hiredate,months_between(sysdate,hiredate) from emp;
--trunc() 参数取整
select ename,
sal,
hiredate,
months_between(sysdate, hiredate),
trunc(months_between(sysdate, hiredate))
from emp;
-- 查询当前月的最后一天
select ename,last_day(hiredate) d from emp;
-- 下一个星期三是几号
select next_day(sysdate , '星期三') from dual;
--to_date(c,m) -> 字符串以指定格式转换为日期
select to_char(sysdate,'yyyy-mm-dd')from dual;
--to_char(d,m) -> 日期以指定格式转换为字符串
select to_date('1982-3-30','yyyy-mm-dd')time from dual;
--查询1982年入职的员工信息
select * from emp where to_char(hiredate,'yyyy') = '1982';