1、在SCOTT模式下,使用“选择”、“投影”运算符,实现以下查询操作:
(1)显示员工名字和入职日期;
select ename,hiredate from emp
(2)显示员工编号、名字、经理编号 ;
select empno,ename,mgr from emp
(3)查询每个雇员的编号、姓名、雇佣日期、职位和年基本工资信息;
select empno,ename,hiredate,job,sal*12 from emp
(4)查询月奖金是0或是空的雇员编号,名字,奖金,部门编号;
select empno,ename,comm,deptno from emp where comm=0 or comm is null
(5)查询入职日期是1981-2-20的员工的名字,入职日期,部门编号;
select ename,hiredate,deptno from emp where hiredate='20-2月-81'
(6)显示10 号部门的所有经理(‘MANAGER’)和20 号部门的所有职员(‘CLERK’)的详细信息;
select * from emp where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK')
(7)显示各个部门经理(‘MANAGER’)的工资;
select empno,ename,deptno,sal from emp where job='MANAGER'
(8)查询月奖金高于月基本工资60%的雇员信息;
select * from emp where comm>(0.6*sal)
(9)显示姓名为5个字符的雇员的姓名和职位;
select ename,job from emp where length(ename)=5
(10)显示员工姓名以‘TH’结尾的雇员的姓名,月奖金和年薪;
select ename,comm,sal*12 from emp where ename like'%TH'
(11)显示员工编号中以‘7’开头,以‘9’结尾,中间不含‘3’和‘4’的雇员的编号、姓名、雇佣日期。
select empno,ename,hiredate from emp where regexp_like (empno,'^7[^3-4]{2}9$');--or
select empno,ename,hiredate from emp where regexp_like(empno,'^7[^3-4]{1,}9$');--or
select empno,ename,hiredate from emp where regexp_like(empno,'^7[^3-4]+9$');
2、在SCOTT模式下,掌握各种常见的限定查询运算符:
(1)查询工资(sal)同时不等于3000、950和800的员工信息;
select * from emp where sal!=all(3000,950,800)
(2)查询emp表中1981年雇佣的所有员工信息;
select * from emp where hiredate between '01-1月-1981' and '31-12月-1981'
(3)查询emp表中,职位(job)的第1个字符是‘S’,第3个字符是‘L’,第5个字符为‘S’的员工信息;
select * from emp where job like'S_L_S%'
(4)查询部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其月薪大于或等2000的所有雇员的详细资料;
select * from emp where (deptno=10 and job='manager') or (deptno=20 and job='clerk') or
(job not in('manager','clerk') and (sal+comm)>=2000)
(5)查询没有月奖金或月奖金低于300的雇员信息;
select * from emp where (comm is null or comm<300)
(6)查询雇员编号、姓名和职位,根据职位排序,职位相同的按照月基本工资降序排列;
select * from emp order by job,sal desc
(7)查询各个职位及人员数量。
select job,count(empno) from emp group by job
3、在SCOTT模式下,掌握各种常见函数:
(1)查询以S结尾的员工姓名及月薪
select ename,sal+nvl(comm,0) from emp where ename like'%S'
(2)求ename列的长度,查询员工编号,名字,长度(按smith查找员工,显示编号,名字,小写名字)
select ename,empno,length(ename),lower(ename) from emp
(3)查询编号,名字,第二个字符(查询ename的第二个字符为M的员工,显示编号,名字(substr))
select ename,empno,substr(ename,2,1) from emp
(4)将员工名字从M开始截取,查询员工姓名和截取之后名字(instr和substr)
select ename,substr(ename,instr(ename,'M')) from emp
(5)将员工工资增加500之后,求比原工资增加了百分之几,四舍五入保留两位小数,显示员工编号, 名字,工资,百分比(比如:20%)
select empno,ename,sal,round(500/sal*100,2)||'%' from emp
(6)查询1981年下半年入职的员工
select * from emp where hiredate between to_date(19810731,'YYYY-MM-DD')and to_date(19811231,'YYYY-MM-DD')
(7)如果工资<1000,显示成’1级’,1001至2000显示成’2级’,2001至3000显示成’3级’,其他显示成’4级’
select sal,case when sal<1000 then '1级' when sal<2000 then '2级' when sal<3000 then '3级' else '4级' end case from emp
(8)分别用case和decode实现,如果有提成,显示成’有提成’,没提成,显示’没提成’
select comm,case when nvl(comm,0)>0 then '有提成' else '没有提成' end case from emp
(9)替换手机号中间的4位为*号(dual表)(substr、replace)
select replace ('18320633333',substr('18320633333',4,4),'****') from dual
4、在SCOTT模式下,掌握分组和排序:
(1)查询雇员编号、姓名和服务年限,根据其服务年限,将最老的雇员排在最前面;
select empno,ename,hiredate from emp order by hiredate
(2)查询至少有一个雇员的所有部门;
select deptno,count(*) from emp group by deptno having count(*)>=1
(3)查询从事同一种工作但属于不同部门的雇员数量;
会的同学能在评论区打出来嘛,我不会┭┮﹏┭┮
(4)列出各个部门的MANGER (经理)的最低薪金;
select deptno,min(sal) from emp where job='MANAGER' group by deptno
(5)列出薪金水平处于第四位的雇员。
select empno,ename from (select rownum num,empno,ename from emp order by sal desc) where num=4