Oracle——SQL基础练习

  • Post author:
  • Post category:其他




Oracle——SQL基础练习

题目 1:查询当前用户下的所有表

select *from user_tables;

题目 2:查询雇员表中所有信息

select * from emp;

题目 3:查询雇员编号, 姓名, 工作, 工资

select empno,ename,job,sal from emp;

题目 4:查询雇员编号, 姓名, 工作, 工资, 列标题需显示中文

select empno 编号,ename 姓名,job 工作,sal 工资 from emp;

题目 5:消除重复列, 查询雇员工作种类

select distinct job from emp;

题目 6:查询所有雇员编号, 姓名, 工作

select empno,ename,job from emp;

题目 7:查询雇员编号, 姓名, 工作, 年薪

 select empno,ename,job,sal*12 from emp;

题目 8:查询工资大于 1500 的雇员所有信息

select * from emp where sal > 1500;

题目 9:查询可以得到奖金的雇员所有信息

select * from emp where comm is not null;

题目 10:查询工资大于 1500 或可以得到奖金的雇员

select * from emp where sal > 1500 or comm is not null;

题目 11:查询工资大于 1500 并且可以领取奖金的雇员

select * from emp where sal >1500 and comm is not null;

题目 12:查询工资不大于 1500 或者不可以领取奖金的雇员

select * from emp where sal <= 1500 or comm is null;

题目 13:查询工资在 1500 到 3000 的所有雇员信息

select * from emp where sal between 1500 and 3000;

题目 14:查询在 1981 年雇用的员工信息

elect * from emp where to_char(hiredate,'yyyy') = 1981;

题目 15:查询雇员姓名中第二个字母为 “M” 的雇员信息

select * from emp where ename like '_M%';

题目 16:查询雇员工资中带 8 这个数字的

select * from emp where sal like '%8%';

题目 17:查询编号是 7369,7499,7521,7900 的雇员信息

select * from emp where empno in(7369,7499,7521,7900);

题目 18:查询雇员编号不是 7369,7499,7521,7900 的所有雇员信息

 select * from emp where empno not in(7369,7499,7521,7900);

题目 19:查询雇员编号为 7369 的雇员信息

select * from emp where empno =7369;

题目 20:查询雇员编号不为 7369 的雇员信息

select * from emp where empno <>7369;

题目 21:查询雇员信息, 按工资由低到高排序

select * from emp order by sal asc;

题目 22:查询雇员信息, 按工资由高到低排序

select * from emp order by sal desc;

题目 23:HR 需要得到一个月薪资 $12000 以上的员工名 (last_name) 和薪水报告, 请完成查询语句

select last_name,salary from employees where salary > 12000

题目 25:HR 需要识别高收入和低收入员工群体不在5000到12000之间的

select * from employees where salary <=5000 or salary >=12000;

题目 26:请查询中 1994 年雇员的员工名和雇佣日期

select ename,hiredate from emp where to_char(hiredate,'yyyy') = '1994';

题目 27:请查询没有领导的员工名和职位

select ename,job from emp where mgr is null;

题目 28:请查询有奖金的员工名和月薪、奖金,并按奖金系数排降序

select ename,sal,comm from emp where comm is not null order by comm desc;

题目 29:请查询月薪大于 1000 的员工名和月薪

 select ename,sal from emp where sal >1000;

题目 30:请查询第三个字母是 a 的员工名

select ename from emp where ename like '__a%'; 

题目 31:请查询员工名包含 a 或 e 的员工名

select ename from emp where ename like '%a%' or ename like '%e%';

题目 32:请查询职位是 “SA_REP” 或“ST_CLERK”,且月薪不是 $2500、$3500、$7000 的员工信息

select * from emp where job in('SA_REP','ST_CLERK') AND SAL not in(2500,3500,7000);

题目 33:请查询奖金系数是 20% 的员工名、薪水和奖金系数

select first_name,salary,commission_pct from employees where commission_pct = 0.2;

题目 34:查询部门 30 中的所有员工信息

select * from employees where department_id = 30;

题目 35:列出所有办事员 (CLERK) 的姓名, 编号和部门编号

select first_name,employee_id,department_id from employees where job_id ='PU_CLERK';

题目 36:找出佣金高于薪金的员工信息

select * from emp where comm > sal;

题目 37:找出佣金高于薪金的 60% 的员工信息

 select * from emp where comm >sal*0.6;

题目 38:找出部门 10 中所有经理 (MANAGER) 和部门 20 中所有办事员 (CLERK) 的详细资料

select * from emp where deptno in(10,20) and job in ('MANAGER','CLERK');

题目 39:找出部门 10 中所有经理 (MANAGER), 部门 20 中的所有办事员 (CLERK), 既不是经理又不是办事员但薪金大于或等于 2000 的所有员工的详细资料

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

题目 40:找出收取佣金的员工的不同工作

select distinct job from emp where comm is not null;

题目 41:找出不收取佣金或收取佣金低于 100 的员工信息

select * from emp where comm is null or comm <100;

题目 42:找出各月倒数第 3 天受雇的所有员工信息

select * from emp where hiredate =  last_day(hiredate)-2;

题目 43:找出早于 12 年前受雇的员工信息

select * from emp where months_between(sysdate,hiredate)/12 >12;

题目 44:以首字母大写的方式显示所有员工的姓名

select initcap(ename) from emp;

题目 45:显示正好为 5 个字符的员工的姓名

select ename from emp where length(ename) = 5;

题目 46:显示不带有 “R” 的员工的姓名

select ename from emp where ename like '%R%';

题目 47:显示所有员工的姓名的前三个字符

select substr(ename,1,3) from emp;

题目 48:显示所有员工的姓名, 用 “a” 代替所有的 “A”

select replace(ename,'A','a') from emp;

题目 49:显示满 10 年服务年限的员工的姓名和受雇日期

select ename,hiredate from emp where months_between(sysdate,hiredate)/12 >10;

题目 50:显示员工详细信息, 按姓名排升序

select * from emp order by ename asc;

题目 51:显示员工的姓名和受雇日期, 根据其服务年限, 将最老的员工排在前面

select ename,hiredate from emp order by hiredate asc;

题目 52:显示所有员工的姓名, 工作和薪金, 按工作的降序排序, 若工作相同则薪金升序排序

select ename,job,sal from emp order by job desc,sal asc;

题目 53:显示所有员工的姓名, 加入公司的年份和月份, 按受雇日期所在月排序, 若月份相同则将最早年

份的员工排在前面(要求使用 extract 函数)

select ename,extract(year from hiredate) year,extract(month from hiredate) month from emp order by month asc,year desc;

题目 54:显示在一个月为 30 天的情况, 所有员工的名字和日薪金, 忽略余数

select ename,trunc(sal/30) from emp ;

题目 55:找出在 (任何年份的)2 月受雇的所有员工信息

select * from emp where extract(month from hiredate) = 2;

题目 56:对于每个员工, 显示名字和其加入公司的天数, 保留 2 位小数 (四舍五入)

select ename,around(sysdate - hiredate,2) from emp;

题目 57:显示姓名字段的任何位置包含 “A” 的所有员工的姓名

select ename from emp where ename like '%A%';

题目 58: 查询系统当前日期

select sysdate from dual;

题目 59 : 请查询每个员工的名字、薪水和加薪15.5%之后的薪水(trunc取整)

select ename,sal,trunc(sal*1.155) from emp;

题目 60 : 显示员工加薪 15

select sal+15 from emp;

题目 61 : 显示所有以’J’,‘A’,’M’打头的员工的名字和名字长度,且按照名字排升序

select ename,length(ename) from emp where  substr(ename,1,1) in('J','A','M');

题目 62 : 请查询员工名和工作时间(换算成月并取整),并按工作时间排降序

select ename,round((sysdate - hiredate)/30) worktime from emp order by worktime desc

题目 63 : 请查询员工的名字和薪水,并将薪水列变成 15 个字符长度,左边填充 “$” 符号

select ename,lpad(sal,15,'$') from emp;

题目 64 : 请查询部门 id 为 90 的所有员工的名字和他们参加工作的星期数 (保留 2 位小数,不需要四舍

五入) 使用

select ename,trunc((sysdate - hiredate)/7,2) from emp where deptno = 90;

题目 65 : 创建报告,显示员工名和奖金系数, 如果奖金系数为空, 则显示 $ 无奖金

select last_name,decode(commission_pct,'','$无奖金',commission_pct) from employees;

题目 66 : 请使用 case 语句,查询员工的 job_id 和级别

select job_id,case job_id when 'AC_ACCOUNT' THEN 'A'
                   WHEN 'FI_MGR' THEN 'B'
                   else 'C' end grade
from employees;
				   

题目 67 : 请使用 decode 语句,查询员工的 job_id 和级别

select job_id,decode(job_id,'AC_ACCOUNT','A','FI_MGR','B','C') from employees;

题目 69:查询 emp 和 dept 表, 产生笛卡尔积 (多表行相乘)

select * from emp,dept;

题目 70:加 where 条件过滤查询 emp 和 dept 表产生的笛卡尔积

select * from emp e,dept d where e.deptno = d.deptno;

题目 71:查询 emp 和 dept 表, 产生笛卡尔积 (多表行相乘), 并为表取别名

select * from emp e,dept d;

题目 72:查询雇员姓名, 所在部门编号和名称

select e.ename,e.deptno,d.dname from emp e,dept d where e.deptno = d.deptno;

题目 73:查询所有雇员姓名, 工作, 领导的姓名

select e.ename,e.job,e2.ename mgrname from emp e,emp e2 where e.mgr = e2.empno(+);

题目 74:查询雇员姓名, 工作, 领导姓名及部门名称

select e.ename,e.job,e2.ename mgrname,d.dname from emp e,emp e2,dept d where e.mgr = e2.empno(+) and d.deptno = e.deptno;

题目 75:查询雇员姓名, 工作, 工资及工资等级

select e.ename,e.job,e.sal,sg.grade from emp e,salgrade sg where e.sal between sg.losal and sg.hisal;

题目 76:查询雇员姓名, 工作, 工资及工资等级, 要求工资等级显示为 A B C D E

select e.ename,e.job,e.sal,sg.grade ,decode(sg.grade,1,'A',2,'B',3,'C',4,'D',5,'E') from emp e,salgrade sg where e.sal between sg.losal and sg.hisal;

题目 77:查询雇员姓名, 年薪, 按年薪从高到低排序

select ename,(sal*12) yearSal from emp order by yearSal desc;

题目 78:查询每个部门中工资最高的雇员姓名, 工作, 工资, 部门名称, 最后按工资从高到低排序

select e.ename,e.job,e.sal,dd.dname from emp e,(select e.deptno,d.dname,max(e.sal) maxsal from emp e,dept d where e.deptno = d.deptno group by e.deptno,d.dname) dd where e.deptno = dd.deptno and e.sal = dd.maxsal order by e.sal desc;

题目 79:查询每个部门的部门编号和雇员数量

select d.deptno,count(e.deptno) from emp e,dept d where d.deptno = e.deptno group by d.deptno; 

题目 80:求出每个部门的部门名和平均工资 (保留 2 位小数,截断)

select d.dname,trunc(avg(e.sal),2) from emp e,dept d where e.deptno(+) = d.deptno group by d.dname;

题目 81:按部门分组,并显示部门的名称,以及每个部门的员工数

select d.deptno,d.dname,count(e.deptno) from emp e,dept d where d.deptno = e.deptno(+) group by d.deptno,d.dname; 

题目 82:要求显示平均工资大于 2000 的部门编号和平均工资 (保留 2 位小数,截断)

select d.deptno,trunc(avg(e.sal),2) avgSal from emp e,dept d where e.deptno(+) = d.deptno group by d.deptno having trunc(avg(e.sal),2) >2000 ;

题目 83:显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资大于 $1500,输出结果按月工资的合计升序排列

select job,sum(sal) sumsal from emp where job <>'SALESMAN' and sal > 1500 group by job order by sumsal;

题目 84:求出平均工资最高的部门名称

select d.dname from emp e,dept d where e.deptno = d.deptno group by
d.dname having avg(e.sal) =(select max(avgsal) from(select d.dname,avg(e.sal) as avgsal from dept d,emp e where e.deptno = d.deptno group by d.dname)) ;

题目 85:要求查询出比 7654 工资要高的全部雇员的信息

select * from emp where sal >(select sal from emp where empno = 7654);

题目 86:要求查询工资比 7654 高,与 7788 从事相同工作的全部雇员信息

select * from emp where sal >(select sal from emp where empno = 7654) and job =(select job from emp where empno = 7788);

题目 87:查询出工资最低的雇员姓名,工作,工资

select ename,job,sal from emp where sal = (select min(sal) from emp);

题目 88:查询出各部门工资最低的雇员姓名,工作,工资

select e.ename,e.job,e.sal from emp e where sal in(select min(e.sal) minsal from dept d,emp e where d.deptno = e.deptno(+) group by d.deptno);

题目 89:要求查询出部门名称,部门的员工数,部门的平均工资,部门的最低收入雇员姓名

select e.ename,dd.dname,dd.counts,dd.avgsal,dd.minsal from emp e,(select d.deptno, d.dname,count(e.empno) counts,avg(e.sal) avgsal,min(e.sal) minsal from emp e,dept d where d.deptno=e.deptno(+) group by d.dname,d.deptno) dd where dd.deptno = e.deptno and e.sal in (dd.minsal); 

题目 90: 查询部门人数大于 2 的部门

select d.dname,count(e.deptno) from emp e,dept d where e.deptno (+)= d.deptno group by d.dname having count(e.deptno) >2;



版权声明:本文为qq_43078133原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。