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;