数据库(exists与单行函数)

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';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值