Oracle常见sql语句练习及答案(经典题目,方便练习)

注意: 所有的题目基于scott账户的表来进行写SQL。

1.查询员工号为7499的员工的姓名和部门号
select ename,deptno from emp where empno=7499;

2.选择工资不在5000到12000的员工的姓名和工资
select ename ,sal from emp where sal<5000 or sal>12000;或
select ename ,sal from emp where sal not between 5000 and 12000;

3.选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id 和雇用时间
select ename,job,hiredate from emp where hiredate>to_date(‘1998-02-01’,‘yyyy-mm-dd’)
and hiredate<to_date(‘1998-05-01’,‘yyyy-mm-dd’);

4.选择在20或50号部门工作的员工姓名和部门号
select ename,deptno from emp where deptno in(20,50);或
select ename,deptno from emp where deptno =20 or deptno =50

5.选择在1992年雇用的员工的姓名和雇用时间
select ename,hiredate from emp
where extract(year from hiredate) = ‘1992’;

6.选择公司中没有管理者的员工姓名及job
select ename,job from emp where mgr is null;

8.选择员工姓名的第三个字母是a的员工姓名
select ename from emp where instr(ename,‘A’)= 3;或
select ename from emp where ename like ‘__A%’;

9.选择姓名中有字母a和e的员工姓名
select ename as 姓名 from emp where instr(ename,‘A’)>0 and instr(ename,‘E’)>0; 或
select ename from emp
where ename like ‘%A%’ and ename like ‘%E%’;

10.查询员工号,姓名,工资,以及工资提高百分之20%后的结果
select empno,ename,sal,(sal+sal0.2) from emp;*

11.将员工的姓名按首字母排序,并写出姓名的长度(length)
select ename,length(ename) from emp
order by ascii(substr(ename,1,1));

12.查询各员工的姓名,并显示出各员工在公司工作的月份数
select ename,trunc(months_between(sysdate,hiredate)) from emp;

13.查询员工的姓名,以及在公司工作的月份数 (worked_month),并按月份数降序排列
select ename,trunc(months_between(sysdate,hiredate)) worked_month from emp order by worked_month desc;

14.查询公司员工工资的最大值,最小值,平均值,总和
select max(sal),min(sal),avg(sal) ,sum(sal) from emp;

15.查询各工种(job)的员工工资的最大值,最小值,平均值,总和
select max(sal),min(sal),avg(sal) ,sum(sal) from emp group by job;

16.选择各个工种(job)的员工人数
select job,count(1) from emp group by job

17.查询员工最高工资和最低工资的差距(DIFFERENCE)
select max(sal)-min(sal) difference from emp

18.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
select mgr,min(sal) from emp where mgr is not null
group by mgr having min(sal)>4000;

19.查询所有部门的名字,工作地点,员工数量和工资平均值.
select d.dname,d.loc,count(1),avg(sal) from dept d inner join emp e on e.deptno=d.deptno group by d.dname,d.loc;

20. 查询和scott相同部门的员工姓名和雇用日期
select ename,hiredate,deptno from emp
where deptno=(select deptno from emp where ename=‘SCOTT’);

21. 查询工资比公司平均工资高的员工的员工号,姓名和工资。
select empno,ename,sal from emp where sal>(select avg(sal) from emp);

22. 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
select empno,ename,sal from emp e
where sal>(select avg(sal) from emp where deptno=e.deptno);

23. 查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
select empno,ename
from emp where deptno in(select deptno from emp
where instr(ename,‘U’)>0);


select e1.empno,e1.ename from emp e1 ,emp e2
where instr(e2.ename,‘U’,1,1) > 0 and e1.deptno=e2.deptno;

24. 查询管理者是King的员工姓名和工资
select ename,sal from emp
where mgr = (select empno from emp where ename = ‘KING’ );

25. 使用PL/SQL实现9*9的乘法口诀表
declare
v_result number;
v_i number;
v_j number;
begin
for v_i in 1…9
loop
for v_j in 1…v_i
loop
v_result:=v_i
v_j;
dbms_output.put(v_i||’’||v_j||’=’||v_result||’ ‘);
end loop;
dbms_output.put_line(’’);
end loop;
end;

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值