oracle简单查询和限定查询

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

猜你喜欢

转载自blog.csdn.net/sinat_62012394/article/details/128960854
今日推荐