orcale :SQL语句小测试select * from emp order by hiredate asc;

select ename from emp where instr(ename,'R')=0;
select translate(ename,'A','a') from emp;
select replace(ename,'A','a') from emp;
显示所有员工的姓名、加入公司的年份和月份、an受雇佣日期所在月排序
select ename,to_char(hiredate,'yyyy"年"mm"月"') as 年月,hiredate from emp order by to_char(hiredate,'mm'),to_char(hiredate,'yyyy');

显示星期几

select to_char(sysdate,'day')from dual;

1. 将emp表的职员信息按雇佣日期由早到晚的先后顺序列出

select * from emp order by hiredate asc;

2. 查询职员表中没有奖金的员工信息

   select * from emp where nvl(comm,0)=0;
   select * from emp where comm is null;

3. 查询工资高于所有员工平均工资的员工

  select * from emp where sal>(select avg(sal) from emp);
4.	构造SQL语句,查询emp表的信息,格式为“员工编码empno,姓名ename,月收入(工资+奖金)”
   select '员工编码' ||empno ||',姓名是' ||ename ||',月收入(工资+奖金)'||nvl2(comm,sal+comm,sal) 格式  from emp;
  

5. 查找员工姓名的长度是五个字符的员工信息

  select * from emp where length(ename)=5;
    select * from emp WHERE ename like '_____';

6. 查询每个部门的职位种类,要去掉重复的职位

select distinct deptno,job from emp order by deptno ;

7. 查询每个部门中每种职位的最高薪水???

select deptno,job,max(sal) from emp group by deptno,job order by deptno;
 select deptno,job,max(sal) from emp group by deptno,job;
  

6. 查询每个部门工资最高的员工

select job,sal, deptno from emp where sal in(select max(sal) from emp group by deptno);

8. 查询员工的姓名和他在公司工作的年限(以月份数表示)

   select ename, trunc(months_between(sysdate, hiredate)) from emp;

**9. 查询工资大于2000的员工的姓名,雇佣日期和薪水,其中雇佣日期以“1980年12月17日”这样的形式显示,薪水值以“RMB5000.00”这样的形式显示,查询结果按降序排序

 select ename,to_char(hiredate,'yyyy"年"mm"月"dd"日"') day,'RMB'||round(sal,2) sal from emp where sal>2000 order by sal desc;

10. 列出工资比SMITH多的所有员工

  select * from emp where sal>(select sal from emp where ename='SMITH');

11. 列出所有员工的姓名及其直接上级的姓名

select s.ename 上级,e.ename 员工 from emp e,(select empno,ename,mgr from emp ) s where s.empno= e.mgr ;
select m.ename 上级,e.ename 员工 from emp e join emp m on e.mgr=m.empno ;

12. 列出最低工资大于1500的各种工作

  select job from emp where sal>1500;

13. 列出所有员工的年工资(不含奖金),按年薪从低到高排序。

select ename,sal from emp order by sal asc;

14. 列出所有部门的详细信息和部门人数。

  select d.*,ssc.人数 from dept d left join (select deptno,count(ename) 人数 from emp group by deptno )ssc on d.deptno=ssc.deptno;

15. 找出部门10中的经理(manager)和部门20中的普通员工(clerk)

  select * from emp where deptno=10 and job='MANAGER' or deptno=20 and job='CLERK';

16. 找出部门 10 中既不是经理也不是普通员工,而且工资大于等于 2000 的员工

  select * from emp where deptno=10 and (job!='MANAGER' or job!='CLERK') and sal>2000;

17. 找出部门 30 中得到最多奖金的员工姓名

 select ename from emp where comm=(select max(comm) from emp where deptno=30);
    

18. 分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金)

 select deptno,job, AVG(comm),sum(nvl2(comm,sal+comm,sal)) from emp group by deptno,job;

19. 查找出工资等级不为 4 级的员工的员工名字,部门名字,部门地点。

  select ename,dname,loc from dept d,(select emp.deptno,emp.ename,emp.sal from emp, salgrade where  sal between losal and hisal and grade!=4) new where d.deptno=new.deptno;

20. 生成一个1—20之间的随机数,再对其进行四舍五入处理,保留一位小数点。

  
   select round(dbms_random.value(1,20),1) from dual;

21.计算 计算2000年1月1日到现在有多少月,多少周(四舍五入)

SELECT round(months_between(sysdate,'01-1月-2000'),2) as "月",round((sysdate-to_date('2000-01-01','yyyy-mm-dd'))/7,2) as "周" FROM dual;

select sysdate from dual;
22.返回参数一年中的第几天的写法:

SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL; 

23.返回参数中一年的第几周的写法:

SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL; 

24.得到工资大于自己部门平均工资的员工信息

select * from emp e1,(select deptno,avg(sal) as avgsal from emp group by deptno) e2 where e1.deptno=e2.deptno  and e1.sal>e2.avgsal;
发布了105 篇原创文章 · 获赞 37 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43615815/article/details/102900807
今日推荐