《Oracle总结 06》--简单业务操作测试

1.查询所有员工信息?

Select * from emp_xiangyoulu;

 

2.查看所有部门信息?

Select * from dept_xiangyoulu;

 

3:查看公司工资排名的第2-5名(分页查询rownum )

select * from(

  select rownum rn,ename,sal from emp_xiangyoulu order by sal desc)

where rn between 2 and 5;--->错! 伪列rownum和排序order by 同时出现时,先生成伪列号,再按条件排序--->导致rn对应的序号在排序之前就定了,查出的结果和预期不符;;

SELECT ROWNUM rn,e.* FROM (

  SELECT * FROM  emp_xiangyoulu ORDER BY sal desc) e

WHERE rn BETWEEN 2 AND 5;--->错! "RN": 标识符无效,伪列号不能直接当成一般属性直接用;

select rownum,e.* from(

  select * from emp_xiangyoulu order by sal desc)e

where rownum between 2 and 5;--->错! 不报错,但查询结果为0条,原因同上;

select * from(

  select rownum,e.* from(

  select * from emp_xiangyoulu order by sal desc)e)

where rownum between 2 and 5;--->错! 不报错,但查询结果为0条,rownum没取别名,直接用有影响;

select * from(

  select rownum rn,e.* from(

  select * from emp_xiangyoulu order by sal desc)e)

where rn between 2 and 5;--->结果正确!!!

3.2:查看奖金为NULL的员工

select * from emp_xiangyoulu where comm is  null;(不能用=,=只能判断是否为" "空字符串)

 

4.数据库中出现两条一样的数据,如何只留一条?

DISTINCT关键字(distinct)去重;

在SELECT子句中使用,用来对指定的字段值去除重复行。

查看公司有哪些职位?

SELECT DISTINCT job FROM emp;

多字段去重时,不保证单一的某个字段的值没有重复,而去重原则是这些字段值的

组合没有重复行。

SELECT DISTINCT job,deptno FROM emp

4.2 删除除了ID之外,其他都一样的冗余数据(重复数据只保留一条);

delete student where (code,name) in(

  select code,name from student group by code,name having count(name)>1)

and id not in(

  select min(id) from student group by code,name having count(name)>1);

delete student where id not in(

  select min(id) from student group by code,name);

select * from student;

  

5.查询最低薪水高于30号部门最低工资的部门信息?

SELECT deptno, MIN(sal) min_sal FROM    emp

GROUP BY deptno

HAVING  min_sal >(SELECT MIN(sal)

 FROM  emp  WHERE deptno = 30);

//select deptno,MIN(sal) from emp group by deptno

   hiving MIN(sal)>(select MIN(sal) from emp where deptno=30);

 

8.查询部门平均薪资大于2000的所有员工信息;

   select * from emp where deptno in (

   select deptno from emp group by deptno

   hiving AVG(sal)>2000

);

 

9.查询每个部门每种职位的员工人数;

Select count(job),deptno,job

from  emp_xiangyoulu

group by rollup(deptno,job);

 

10:查看从2008-08-08号到今天为止一共经历了多少天?

SELECT SYSDATE-TO_DATE('2008-08-08','YYYY-MM-DD')

FROM DUAL;

--向上取整 ;;

--SELECT CEIL(SYSDATE-TO_DATE('2008-08-08','YYYY-MM-DD'))

 FROM DUAL;

 

11:将每名员工入职时间以例如:(1981年12月3日的形式显示)

select ename,to_char(hiredate, 'yyyy"年"MM"月"dd"日"')

from emp_xiangyoulu;

 

12:查看SMITH的上司在哪个城市工作?(三表关联查询)

Select e.ename,e.mgr,m.empno,m.ename,d.loc

from emp_xiangyoulu e,emp_xiangyoulu m,dept_xiangyoulu d

Where e.mgr=m.empno and m.deptno=d.deptno and e.ename='smith';

 

13:查看平均工资高于2000的那些部门名字以及所在城市?

select e.deptno,avg(e.sal),d.dname,d.loc from emp_xiangyoulu e,dept_xiangyoulu d

where e.deptno=d.deptno group by e.deptno,d.loc,d.dname having avg(e.sal)>2000;

 

14.在NEW YORK工作的员工有多少人?

select count(e.ename),d.loc from emp_xiangyoulu e,dept_xiangyoulu d

where e.deptno=d.deptno and d.loc='NEW YORK' group by d.loc;

 

15:查看低于自己所在部门平均工资的员工?(将查询结果作为表来关联查询 )

select e.ename,e.sal,d.deptno from emp_xiangyoulu e,(

select avg(sal) a_sal,deptno from emp_xiangyoulu group by deptno) d

where e.deptno=d.deptno and e.sal<d.a_sal ;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值