Oracle.练习题
2018-07-31
---练习3
---创建sporter表
create table sporter(
sporterid number(10) constraint sport_id primary key,
sname varchar2(20) not null,
sex varchar2(10),
department varchar2(10) not null
);
select * from sporter;
---向sporter表中插入数据
insert into sporter values(1001,'李盼','女','计算机系');
insert into sporter values(1002,'王玥','女','数学系');
insert into sporter values(1003,'丁赛','男','计算机系');
insert into sporter values(1004,'汪丽','女','物理系');
insert into sporter values(1005,'李娜','女','心理系');
insert into sporter values(1006,'王骋','女','化学系'); ---创建item表
create table item(
itemid varchar2(10) constraint item_id primary key,
itemname varchar2(20) not null,
loc varchar2(20)
); select * from item ---向item表中插入数据
insert into item values('x001','男子五千米','一操场');
insert into item values('x002','男子标枪','一操场');
insert into item values('x003','男子跳远','二操场');
insert into item values('x004','女子跳高','二操场');
insert into item values('x005','女子三千米','三操场'); ---创建grade积分表
create table grade(
sprterid number(10),
itemid varchar2(10),
mark number(10) constraint grade_mark check(mark in(6,4,2,0))
);
---修改列名
alter table grade rename column sprterid to sporterid; select * from grade ;
---向grade积分表中插入数据
insert into grade values(1001,'x001',6);
insert into grade values(1002,'x001',4);
insert into grade values(1003,'x001',2);
insert into grade values(1004,'x001',0);
insert into grade values(1001,'x003',4);
insert into grade values(1002,'x003',6);
insert into grade values( 1004,'x003',2);
insert into grade values(1004,'x004',6);
insert into grade values(1006,'x004',4);
--要求
--1.求出总积分最高的系名及总积分
select department ,sum(mark)
from sporter natural join grade
group by department
having sum(mark)=(select max(sum(mark))
from sporter natural join grade
group by department );
---???
--2.查询在一操场进行比赛的项目名称及其冠军的姓名
select itemid,max(mark)
from sporter natural join grade
group by itemid
having itemid in(select itemid
from item
where loc='一操场') --3.找出参加了王玥所参加过的项目的其他同学的姓名
select distinct sname
from sporter natural join grade
where itemid in (select itemid
from grade
where sporterid =(select sporterid
from sporter
where sname='王玥'))
and sporterid!=(select sporterid
from sporter
where sname='王玥') --4.经查,王玥因为使用了违禁药品,其成绩都记为0分,
--请在数据库中做出相应修改
update grade set mark =0 where sporterid=(select sporterid from sporter where sname='王玥') ; --5.经组委会协商,需要删除女子跳高比赛项目 delete from item where itemname='女子跳高'
---练习3
---创建sporter表
create table sporter(
sporterid number(10) constraint sport_id primary key,
sname varchar2(20) not null,
sex varchar2(10),
department varchar2(10) not null
);
select * from sporter;
---向sporter表中插入数据
insert into sporter values(1001,'李盼','女','计算机系');
insert into sporter values(1002,'王玥','女','数学系');
insert into sporter values(1003,'丁赛','男','计算机系');
insert into sporter values(1004,'汪丽','女','物理系');
insert into sporter values(1005,'李娜','女','心理系');
insert into sporter values(1006,'王骋','女','化学系'); ---创建item表
create table item(
itemid varchar2(10) constraint item_id primary key,
itemname varchar2(20) not null,
loc varchar2(20)
); select * from item ---向item表中插入数据
insert into item values('x001','男子五千米','一操场');
insert into item values('x002','男子标枪','一操场');
insert into item values('x003','男子跳远','二操场');
insert into item values('x004','女子跳高','二操场');
insert into item values('x005','女子三千米','三操场'); ---创建grade积分表
create table grade(
sprterid number(10),
itemid varchar2(10),
mark number(10) constraint grade_mark check(mark in(6,4,2,0))
);
---修改列名
alter table grade rename column sprterid to sporterid; select * from grade ;
---向grade积分表中插入数据
insert into grade values(1001,'x001',6);
insert into grade values(1002,'x001',4);
insert into grade values(1003,'x001',2);
insert into grade values(1004,'x001',0);
insert into grade values(1001,'x003',4);
insert into grade values(1002,'x003',6);
insert into grade values( 1004,'x003',2);
insert into grade values(1004,'x004',6);
insert into grade values(1006,'x004',4);
--要求
--1.求出总积分最高的系名及总积分
select department ,sum(mark)
from sporter natural join grade
group by department
having sum(mark)=(select max(sum(mark))
from sporter natural join grade
group by department );
---???
--2.查询在一操场进行比赛的项目名称及其冠军的姓名
select itemid,max(mark)
from sporter natural join grade
group by itemid
having itemid in(select itemid
from item
where loc='一操场')
---***
select itemname,sname
from sporter s,item i, grade g
where s.sporterid =g.sporterid and i.itemid=g. itemid
and loc='一操场' and mark=6 --3.找出参加了王玥所参加过的项目的其他同学的姓名
select distinct sname
from sporter natural join grade
where itemid in (select itemid
from grade
where sporterid =(select sporterid
from sporter
where sname='王玥'))
and sporterid!=(select sporterid
from sporter
where sname='王玥') --4.经查,王玥因为使用了违禁药品,其成绩都记为0分,
--请在数据库中做出相应修改
update grade set mark =0 where sporterid=(select sporterid from sporter where sname='王玥') ; --5.经组委会协商,需要删除女子跳高比赛项目 delete from item where itemname='女子跳高'
老师
练习作业
-------------------第五章----------------
---练习1
1.写一个查询,显示所有员工姓名,部门编号,部门名称。
select e.ename,e.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno 2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
select e.ename,d.loc,e.comm
from emp e,dept d
where e.deptno = d.deptno and upper(d.loc)='CHICAGO' and e.comm>0; 3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
select e.ename,d.loc
from emp e,dept d
where e.deptno = d.deptno and e.ename like '%A%'; ---练习2
1.查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序。
select e.empno,e.ename,e.sal,s.grade,d.loc
from emp e,dept d ,salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal
order by e.sal ; ---练习3
1.查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。
select e.ename,e.empno,e.mgr,m.ename
from emp e,dept d,emp m
where e.deptno = d.deptno and e.mgr = m.empno
and upper(d.loc) in ('NEW YORK','CHICAGO') 2.第上一题的基础上,添加没有经理的员工King,并按照员工编号排序。
select e.ename,e.empno,e.mgr,m.ename
---左连接 table1 left join table2 on ...
from dept d,emp e left join emp m on e.mgr = m.empno
where e.deptno = d.deptno
and upper(d.loc) in ('NEW YORK','CHICAGO')
order by e.empno 3.查询所有员工编号,姓名,部门名称,包括没有部门的员工也要显示出来。
select e.empno,e.ename,d.dname
from emp e left join dept d on e.deptno= d.deptno ---练习4
使用SQL-99写法,完成如下练习
1.创建一个员工表和部门表的交叉连接。
select *
from emp cross join dept; 2.使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期
select e.ename,d.dname,e.hiredate
from emp e natural join dept d
---自然连接 自动匹配两个表中的相同字段
where e.hiredate>'1-5月-1980' 3.使用USING子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点
--JOIN...USING(公共列名)
--using后不要忘记加()
select ename,dname,loc
from emp join dept using (deptno)
where upper(loc)='CHICAGO' ---
4.使用ON子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点,薪资等级
--语法:table1 join table2 on 连接条件; select e.ename,d.dname,d.loc,s.grade
from emp e ,dept d ,salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal
and upper(d.loc)='CHICAGO' 5.使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
select e.ename,m.ename
from emp e left join emp m on e.mgr = m.empno 6.使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
select e.ename,m.ename
from emp m right join emp e on e.mgr = m.empno -------------------第六章----------------
---练习1
1.查询部门20的员工,每个月的工资总和及平均工资。
select sum(sal),avg(sal)
from emp
group by deptno
having deptno =20 2.查询工作在CHICAGO的员工人数,最高工资及最低工资。
select count(empno) 员工人数, max(sal),min(sal)
from emp natural join dept
group by loc
having upper(loc)= 'CHICAGO'; 3.查询员工表中一共有几种岗位类型
select job
from emp
group by job ; ---练习2
1.查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
select deptno,dname,count(empno),max(sal),min(sal),sum(sal),avg(sal)
from emp e natural join dept d
group by deptno,dname 2.查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,
最高工资,最低工资,工资总和,平均工资。
select deptno,dname,job,count(empno),max(sal),min(sal),sum(sal),avg(sal)
from emp e natural join dept d
group by deptno,dname,job 3.查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。
select count(e.empno),e.mgr
from emp e left join emp m on e.mgr = m.empno
group by e.mgr ---练习3
1.查询部门人数大于2的部门编号,部门名称,部门人数。
select deptno,dname,count(empno)
from emp natural join dept
group by deptno,dname
having count(empno)>2 2.查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,
部门平均工资,并按照部门人数升序排序。
select deptno,dname,count(empno)
from emp natural join dept
group by deptno,dname
having count(empno)>2 and avg(sal)>2000
order by count(empno) -------------------第七章----------------
---练习1
1.查询入职日期最早的员工姓名,入职日期
SELECT rownum,t.ename,t.hiredate
FROM (SELECT ROWNUM r,emp.* FROM emp) t
where hiredate is not null and t.r=1
order by hiredate 2.查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称
select ename,sal,dname
from emp natural join dept
where sal>(select sal
from emp
where upper(ename)='SMITH')
and upper(loc) ='CHICAGO'; 3.查询入职日期比20部门入职日期最早的员工还要早的员工姓名,入职日期
select ename,hiredate
from emp
where hiredate >all(select hiredate
from emp
where deptno=20); 4.查询部门人数大于所有部门平均人数的的部门编号,部门名称,部门人数
select deptno, dname,count(empno)部门人数
from emp natural join dept
group by deptno,dname
having count(empno)>(select count(empno)/count(distinct deptno)
from emp) ---练习2
1.查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工
select ename,hiredate
from emp
where hiredate>any(select hiredate
from emp
where deptno=10)
and deptno!=10; 2.查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工
select ename,hiredate
from emp
where hiredate>all(select hiredate
from emp
where deptno=10)
and deptno!=10;
---比子查询的返回结果的最大值要大 3.查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员工
select ename,job
from emp
where job in (select job
from emp
where deptno=10)
and deptno!=10; ---练习3
1.查询职位及经理和10部门任意一个员工职位及经理相同的员工姓名,职位,
不包括10部门员工
select ename,job
from emp
where (job,mgr) in (select job,mgr
from emp
where deptno=10)
and deptno!=10; 2.查询职位及经理和10部门任意一个员工职位或经理相同的员工姓名,职位,
不包括10部门员工
select ename,job
from emp
where job in (select job from emp where deptno=10)
or mgr in (select mgr from emp where deptno=10)
and deptno!=10; ---练习4
1.查询比自己职位平均工资高的员工姓名、职位,部门名称,职位平均工资
--相同job,平均工资
--表 j 用job 和其它表建立连接
select job,avg(sal) a
from emp
group by job
-----------------
select e.ename,e.job,d.dname,j.a
from emp e,dept d,(select job,avg(sal) a
from emp
group by job ) j --三个表连接
where e.deptno = d.deptno and e.job = j.job
and e.sal>j.a ; 2.查询职位和经理同员工SCOTT或BLAKE完全相同的员工姓名、职位,不包括SCOOT和BLAKE本人。
select ename,job
from emp
where (job,mgr) in (select job,mgr
from emp
where upper(ename) in('SCOTT','BLAKE'))
and upper(ename) not in('SCOTT','BLAKE'); 3.查询不是经理的员工姓名。
select ename
from emp
where empno not in(select distinct mgr
from emp
where mgr is not null); ---练习5
1.查询入职日期最早的前5名员工姓名,入职日期。
SELECT rownum,t.ename,t.hiredate
FROM (SELECT ROWNUM r,emp.* FROM emp) t
where t.hiredate is not null and t.r<=5
order by t.hiredate 2.查询工作在CHICAGO并且入职日期最早的前2名员工姓名,入职日期。
SELECT rownum,t.ename,t.hiredate
FROM (SELECT ROWNUM r,emp.* FROM emp) t
where t.hiredate is not null and t.r<=2
and t.deptno=(select deptno
from dept
where upper(loc)='CHICAGO')
order by t.hiredate ---练习6
1.按照每页显示5条记录,分别查询第1页,第2页,第3页信息,
要求显示员工姓名、入职日期、部门名称。
select rownum ,t.ename,t.hiredate,t.dname
from (select rownum r, empno,ename,job,mgr,hiredate,sal,comm,deptno,deptno,dname,loc
from emp natural join dept) t
WHERE t.r>(1-1)*5 and t.r<=1*5
or t.r>(2-1)*5 and t.r<=2*5
or t.r>(3-1)*5 and t.r<=3*5 ---练习7
1.按照每页显示5条记录,分别查询工资最高的第1页,第2页,第3页信息,
要求显示员工姓名、入职日期、部门名称、工资。
select rownum ,t.ename,t.hiredate,t.dname,t.sal
from (select rownum r, empno,ename,job,mgr,hiredate,sal,comm,deptno,deptno,dname,loc
from emp natural join dept) t
WHERE t.r>(1-1)*5 and t.r<=1*5
or t.r>(2-1)*5 and t.r<=2*5
or t.r>(3-1)*5 and t.r<=3*5
order by t.sal desc ---课后作业
1.查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。
select empno,ename,sal
from emp
where sal>(select sal
from emp
where empno=7782)
and job = (select job
from emp
where empno=7369);
---
2.查询工资最高的员工姓名和工资。
select rownum,t.ename,t.sal
from (select rownum r,emp.*
from emp
order by sal desc) t
where t.r=1 3.查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。
select deptno,dname,min(sal)
from emp natural join dept
group by deptno,dname
having min(sal)>(select min(sal)
from emp
group by deptno
having deptno=10) 4.查询员工工资为其部门最低工资的员工的编号和姓名及工资。
select empno,ename,sal
from emp
where (deptno,sal) in (select deptno ,min(sal)
from emp
group by deptno) 5.显示经理是KING的员工姓名,工资。
select ename,sal
from emp
where mgr=(select empno
from emp
where upper(ename)='KING') 6.显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。
select ename,sal,hiredate
from emp
where hiredate>(select hiredate
from emp
where upper(ename)='SMITH') 7.使用子查询的方式查询哪些职员在NEW YORK工作。
select *
from emp
where deptno=(select deptno
from dept
where upper(loc)='NEW YORK') 8.写一个查询显示和员工SMITH工作在同一个部门的员工姓名,雇用日期,
查询结果中排除SMITH。
select ename,hiredate
from emp
where deptno in (select deptno
from emp
where upper(ename)='SMITH') 9.写一个查询显示其工资比全体职员平均工资高的员工编号、姓名。
select empno,ename
from emp
where sal>( select avg(sal)
from emp) 10.写一个查询显示其上级领导是King的员工姓名、工资。
select ename,sal
from emp
where mgr=(select empno
from emp
where upper(ename)='KING') 11.显示所有工作在RESEARCH部门的员工姓名,职位。
select ename,job
from emp
where deptno =(select deptno
from dept
where upper(dname)='RESEARCH') 12.查询每个部门的部门编号、平均工资,要求部门的平均工资高于部门20的平均工资。
select deptno,avg(sal)
from emp natural join dept
group by deptno
having avg(sal)>(select avg(sal)
from emp natural join dept
group by deptno
having deptno=20)
---
13.查询大于自己部门平均工资的员工姓名,工资,
所在部门平均工资,高于部门平均工资的额度。
select e.ename,e.sal,a,sal-a
from emp e,(select deptno ,avg(sal) a
from emp
group by deptno) t
where e.deptno= t.deptno
and sal>a 14. 列出至少有一个雇员的所有部门
select deptno
from emp
group by deptno
having count(empno)>0 15. 列出薪金比"SMITH"多的所有雇员
select *
from emp
where sal>(select sal
from emp
where upper(ename)='SMITH') --16. 列出入职日期早于其直接上级的所有雇员
select *
from emp e join emp m on e.mgr=m.empno
where e.hiredate < m.hiredate 17. 找员工姓名和直接上级的名字
select e.ename,m.ename
from emp e join emp m on e.mgr=m.empno 18. 显示部门名称和人数
select dname,count(empno)
from emp natural join dept
group by dname 19. 显示每个部门的最高工资的员工
select *
from emp
where (deptno,sal) in (select deptno,max(sal)
from emp
group by deptno) 20. 显示出和员工号7369部门相同的员工姓名,工资
select ename,sal
from emp
where deptno=(select deptno
from emp
where empno=7369); 21. 显示出和姓名中包含"W"的员工相同部门的员工姓名
select ename
from emp
where deptno=(select deptno
from emp
where upper(ename) like '%W%'); 22. 显示出工资大于平均工资的员工姓名,工资
select ename,sal
from emp
where sal>(select avg(sal)
from emp); 23. 显示出工资大于本部门平均工资的员工姓名,工资
select ename,sal
from emp
where sal > (select avg(sal)
from emp
group by deptno) 24. 显示每位经理管理员工的最低工资,及最低工资者的姓名
select m,ename
from emp e,(select mgr,min(sal) m
from emp
group by mgr) t
where e.mgr = t.mgr
and sal = m 25. 显示比工资最高的员工参加工作时间晚的员工姓名,参加工作时间
select ename,hiredate
from emp
where hiredate>(select hiredate
from emp
where sal=(
select max(sal)
from emp)) 26. 显示出平均工资最高的的部门平均工资及部门名称
select dname,avg(sal)
from emp natural join dept
group by deptno,dname
having avg(sal)=(select max(avg(sal))
from emp
group by deptno)
自己
课后练习
-------------------第五章----------------
---练习1
1.写一个查询,显示所有员工姓名,部门编号,部门名称。
select e.ename,e.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno 2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
select e.ename,d.loc,e.comm
from emp e,dept d
where e.deptno = d.deptno and upper(d.loc)='CHICAGO' and e.comm>0; 3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
select e.ename,d.loc
from emp e,dept d
where e.deptno = d.deptno and e.ename like '%A%'; ---练习2
1.查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序。
select e.empno,e.ename,e.sal,s.grade,d.loc
from emp e,dept d ,salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal
order by e.sal ; ---练习3
1.查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。
select e.ename,e.empno,e.mgr,m.ename
from emp e,dept d,emp m
where e.deptno = d.deptno and e.mgr = m.empno
and upper(d.loc) in ('NEW YORK','CHICAGO') 2.第上一题的基础上,添加没有经理的员工King,并按照员工编号排序。
select e.ename,e.empno,e.mgr,m.ename
---左连接 table1 left join table2 on ...
from dept d,emp e left join emp m on e.mgr = m.empno
where e.deptno = d.deptno
and upper(d.loc) in ('NEW YORK','CHICAGO')
order by e.empno 3.查询所有员工编号,姓名,部门名称,包括没有部门的员工也要显示出来。
select e.empno,e.ename,d.dname
from emp e left join dept d on e.deptno= d.deptno ---练习4
使用SQL-99写法,完成如下练习
1.创建一个员工表和部门表的交叉连接。
select *
from emp cross join dept; 2.使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期
select e.ename,d.dname,e.hiredate
from emp e natural join dept d
---自然连接 自动匹配两个表中的相同字段
where e.hiredate>'1-5月-1980' 3.使用USING子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点
--JOIN...USING(公共列名)
--using后不要忘记加()
select ename,dname,loc
from emp join dept using (deptno)
where upper(loc)='CHICAGO' ---
4.使用ON子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点,薪资等级
--语法:table1 join table2 on 连接条件; select e.ename,d.dname,d.loc,s.grade
from emp e ,dept d ,salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal
and upper(d.loc)='CHICAGO' 5.使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
select e.ename,m.ename
from emp e left join emp m on e.mgr = m.empno 6.使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
select e.ename,m.ename
from emp m right join emp e on e.mgr = m.empno -------------------第六章----------------
---练习1
1.查询部门20的员工,每个月的工资总和及平均工资。
select sum(sal),avg(sal)
from emp
group by deptno
having deptno =20 2.查询工作在CHICAGO的员工人数,最高工资及最低工资。
select count(empno) 员工人数, max(sal),min(sal)
from emp natural join dept
group by loc
having upper(loc)= 'CHICAGO'; 3.查询员工表中一共有几种岗位类型
select job
from emp
group by job ; ---练习2
1.查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
select deptno,dname,count(empno),max(sal),min(sal),sum(sal),avg(sal)
from emp e natural join dept d
group by deptno,dname 2.查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,
最高工资,最低工资,工资总和,平均工资。
select deptno,dname,job,count(empno),max(sal),min(sal),sum(sal),avg(sal)
from emp e natural join dept d
group by deptno,dname,job 3.查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。
select count(e.empno),e.mgr
from emp e left join emp m on e.mgr = m.empno
group by e.mgr ---练习3
1.查询部门人数大于2的部门编号,部门名称,部门人数。
select deptno,dname,count(empno)
from emp natural join dept
group by deptno,dname
having count(empno)>2 2.查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,
部门平均工资,并按照部门人数升序排序。
select deptno,dname,count(empno)
from emp natural join dept
group by deptno,dname
having count(empno)>2 and avg(sal)>2000
order by count(empno) -------------------第七章----------------
---练习1
1.查询入职日期最早的员工姓名,入职日期
SELECT rownum,t.ename,t.hiredate
FROM (SELECT ROWNUM r,emp.* FROM emp) t
where hiredate is not null and t.r=1
order by hiredate 2.查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称
select ename,sal,dname
from emp natural join dept
where sal>(select sal
from emp
where upper(ename)='SMITH')
and upper(loc) ='CHICAGO'; 3.查询入职日期比20部门入职日期最早的员工还要早的员工姓名,入职日期
select ename,hiredate
from emp
where hiredate >all(select hiredate
from emp
where deptno=20); 4.查询部门人数大于所有部门平均人数的的部门编号,部门名称,部门人数
select deptno, dname,count(empno)部门人数
from emp natural join dept
group by deptno,dname
having count(empno)>(select count(empno)/count(distinct deptno)
from emp) ---练习2
1.查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工
select ename,hiredate
from emp
where hiredate>any(select hiredate
from emp
where deptno=10)
and deptno!=10; 2.查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工
select ename,hiredate
from emp
where hiredate>all(select hiredate
from emp
where deptno=10)
and deptno!=10;
---比子查询的返回结果的最大值要大 3.查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员工
select ename,job
from emp
where job in (select job
from emp
where deptno=10)
and deptno!=10; ---练习3
1.查询职位及经理和10部门任意一个员工职位及经理相同的员工姓名,职位,
不包括10部门员工
select ename,job
from emp
where (job,mgr) in (select job,mgr
from emp
where deptno=10)
and deptno!=10; 2.查询职位及经理和10部门任意一个员工职位或经理相同的员工姓名,职位,
不包括10部门员工
select ename,job
from emp
where job in (select job from emp where deptno=10)
or mgr in (select mgr from emp where deptno=10)
and deptno!=10; ---练习4
1.查询比自己职位平均工资高的员工姓名、职位,部门名称,职位平均工资
--相同job,平均工资
--表 j 用job 和其它表建立连接
select job,avg(sal) a
from emp
group by job
-----------------
select e.ename,e.job,d.dname,j.a
from emp e,dept d,(select job,avg(sal) a
from emp
group by job ) j --三个表连接
where e.deptno = d.deptno and e.job = j.job
and e.sal>j.a ; 2.查询职位和经理同员工SCOTT或BLAKE完全相同的员工姓名、职位,不包括SCOOT和BLAKE本人。
select ename,job
from emp
where (job,mgr) in (select job,mgr
from emp
where upper(ename) in('SCOTT','BLAKE'))
and upper(ename) not in('SCOTT','BLAKE'); 3.查询不是经理的员工姓名。
select ename
from emp
where empno not in(select distinct mgr
from emp
where mgr is not null); ---练习5
1.查询入职日期最早的前5名员工姓名,入职日期。
SELECT rownum,t.ename,t.hiredate
FROM (SELECT ROWNUM r,emp.* FROM emp) t
where t.hiredate is not null and t.r<=5
order by t.hiredate 2.查询工作在CHICAGO并且入职日期最早的前2名员工姓名,入职日期。
SELECT rownum,t.ename,t.hiredate
FROM (SELECT ROWNUM r,emp.* FROM emp) t
where t.hiredate is not null and t.r<=2
and t.deptno=(select deptno
from dept
where upper(loc)='CHICAGO')
order by t.hiredate ---练习6
1.按照每页显示5条记录,分别查询第1页,第2页,第3页信息,
要求显示员工姓名、入职日期、部门名称。
select rownum ,t.ename,t.hiredate,t.dname
from (select rownum r, empno,ename,job,mgr,hiredate,sal,comm,deptno,deptno,dname,loc
from emp natural join dept) t
WHERE t.r>(1-1)*5 and t.r<=1*5
or t.r>(2-1)*5 and t.r<=2*5
or t.r>(3-1)*5 and t.r<=3*5 ---练习7
1.按照每页显示5条记录,分别查询工资最高的第1页,第2页,第3页信息,
要求显示员工姓名、入职日期、部门名称、工资。
select rownum ,t.ename,t.hiredate,t.dname,t.sal
from (select rownum r, empno,ename,job,mgr,hiredate,sal,comm,deptno,deptno,dname,loc
from emp natural join dept) t
WHERE t.r>(1-1)*5 and t.r<=1*5
or t.r>(2-1)*5 and t.r<=2*5
or t.r>(3-1)*5 and t.r<=3*5
order by t.sal desc ---课后作业
1.查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。
select empno,ename,sal
from emp
where sal>(select sal
from emp
where empno=7782)
and job = (select job
from emp
where empno=7369);
---
2.查询工资最高的员工姓名和工资。
select rownum,t.ename,t.sal
from (select rownum r,emp.*
from emp
order by sal desc) t
where t.r=1 3.查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。
select deptno,dname,min(sal)
from emp natural join dept
group by deptno,dname
having min(sal)>(select min(sal)
from emp
group by deptno
having deptno=10) 4.查询员工工资为其部门最低工资的员工的编号和姓名及工资。
select empno,ename,sal
from emp
where (deptno,sal) in (select deptno ,min(sal)
from emp
group by deptno) 5.显示经理是KING的员工姓名,工资。
select ename,sal
from emp
where mgr=(select empno
from emp
where upper(ename)='KING') 6.显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。
select ename,sal,hiredate
from emp
where hiredate>(select hiredate
from emp
where upper(ename)='SMITH') 7.使用子查询的方式查询哪些职员在NEW YORK工作。
select *
from emp
where deptno=(select deptno
from dept
where upper(loc)='NEW YORK') 8.写一个查询显示和员工SMITH工作在同一个部门的员工姓名,雇用日期,
查询结果中排除SMITH。
select ename,hiredate
from emp
where deptno in (select deptno
from emp
where upper(ename)='SMITH') 9.写一个查询显示其工资比全体职员平均工资高的员工编号、姓名。
select empno,ename
from emp
where sal>( select avg(sal)
from emp) 10.写一个查询显示其上级领导是King的员工姓名、工资。
select ename,sal
from emp
where mgr=(select empno
from emp
where upper(ename)='KING') 11.显示所有工作在RESEARCH部门的员工姓名,职位。
select ename,job
from emp
where deptno =(select deptno
from dept
where upper(dname)='RESEARCH') 12.查询每个部门的部门编号、平均工资,要求部门的平均工资高于部门20的平均工资。
select deptno,avg(sal)
from emp natural join dept
group by deptno
having avg(sal)>(select avg(sal)
from emp natural join dept
group by deptno
having deptno=20)
---
13.查询大于自己部门平均工资的员工姓名,工资,
所在部门平均工资,高于部门平均工资的额度。
select e.ename,e.sal,a,sal-a
from emp e,(select deptno ,avg(sal) a
from emp
group by deptno) t
where e.deptno= t.deptno
and sal>a 14. 列出至少有一个雇员的所有部门
select deptno
from emp
group by deptno
having count(empno)>0 15. 列出薪金比"SMITH"多的所有雇员
select *
from emp
where sal>(select sal
from emp
where upper(ename)='SMITH') --16. 列出入职日期早于其直接上级的所有雇员
select *
from emp e join emp m on e.mgr=m.empno
where e.hiredate < m.hiredate 17. 找员工姓名和直接上级的名字
select e.ename,m.ename
from emp e join emp m on e.mgr=m.empno 18. 显示部门名称和人数
select dname,count(empno)
from emp natural join dept
group by dname 19. 显示每个部门的最高工资的员工
select *
from emp
where (deptno,sal) in (select deptno,max(sal)
from emp
group by deptno) 20. 显示出和员工号7369部门相同的员工姓名,工资
select ename,sal
from emp
where deptno=(select deptno
from emp
where empno=7369); 21. 显示出和姓名中包含"W"的员工相同部门的员工姓名
select ename
from emp
where deptno=(select deptno
from emp
where upper(ename) like '%W%'); 22. 显示出工资大于平均工资的员工姓名,工资
select ename,sal
from emp
where sal>(select avg(sal)
from emp); 23. 显示出工资大于本部门平均工资的员工姓名,工资
select ename,sal
from emp
where sal > (select avg(sal)
from emp
group by deptno) 24. 显示每位经理管理员工的最低工资,及最低工资者的姓名
select m,ename
from emp e,(select mgr,min(sal) m
from emp
group by mgr) t
where e.mgr = t.mgr
and sal = m 25. 显示比工资最高的员工参加工作时间晚的员工姓名,参加工作时间
select ename,hiredate
from emp
where hiredate>(select hiredate
from emp
where sal=(
select max(sal)
from emp)) 26. 显示出平均工资最高的的部门平均工资及部门名称
select dname,avg(sal)
from emp natural join dept
group by deptno,dname
having avg(sal)=(select max(avg(sal))
from emp
group by deptno)
Oracle.练习题的更多相关文章
- 【Java EE 学习 28 下】【Oracle面试题2道】【Oracle练习题3道】
一.已知程序和数据 create table test1 (id int primary key, name ), money int); ,); ,); ,); ,); 要求根据下图写出相应的sql ...
- oracle练习题
题干:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 建表后数据如下: SQL> select * from ...
- oracle练习题后15个
31,32题更正: SQL> --31. 查询所有教师和同学的name.sex和birthday. SQL> select sname, ssex, sbirthday from stud ...
- Oracle练习题20~33
20.查询score中选学多门课程的同学中分数为非最高分成绩的记录. 21. 查询成绩高于学号为“109”.课程号为“3-105”的成绩的所有记录. 22.查询和学号为108的同学同年出生的所有学生的 ...
- Oracle练习题(1~19)
1. 查询Student表中的所有记录的Sname.Ssex和Class列. 2. 查询教师所有的单位即不重复的Depart列. 3. 查询Student表的所有记录. 4. 查询Score表中成绩在 ...
- oracle练习题 实验一
实验一 练习1.请查询表DEPT中所有部门的情况. select * from dept; 练习2.查询表DEPT中的部门号.部门名称两个字段的所有信息. select deptno,dname fr ...
- SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等
SQL组成 DML数据操作语言 DCL数据控制语言 DQL数据查询语言 DDL数据定义语言 查询基础语法 记录筛选 where 子句 记录筛选 where 子句 实例练习 实例练习 Select语句中 ...
- 另一套Oracle SQL练习题,更新参考答案
题干: create table student( sno ) primary key, sname ), sage ), ssex ) ); create table teacher( tno ) ...
- 一套oracle的练习题
create table student( sno varchar2(10) primary key, sname varchar2(20), sage number(2), ssex varchar ...
随机推荐
- eclipse里安装SVN插件的两种方式
eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 使用eclipse 里Help菜单的“Install New Software”,通过 ...
- ps p图
1. 常用快捷键 ctrl + 单击 选中图层ctrl + j 复制出拷贝的图层 Shift+Alt+S 保存ctrl + s 保存shift + ctrl + alt + s 保存为 web 格式图 ...
- python return dict bug?
def to_dict(self): para = OrdererDict() para['dd'] = self.XXX ... return para 这样一个简单函数 para1 = obj.t ...
- Linux命令echo
echo "hello world" echo 显示字符串内容
- Codeforces 984 D - XOR-pyramid
D - XOR-pyramid 思路: 区间dp dp[l][r]表示ƒ([l, r])的值 显然,状态转移方程为dp[l][r] = dp[l][r-1] ^ dp[l+1][r] 初始状态dp[i ...
- lua中pairs 和 ipairs 的区别
1.table中存储值的时候,是按照顺序存储的,存储 k-v 的时候,是按照 k 的哈希值存储的. 2.ipairs --- 只能输出 table 中的值,并且不可输出nil,遇到 ni l就退出 p ...
- Memcached遇到的问题及解决办法
1. memcached make: *** No targets specified and no makefile found. Stop. 其实是因为在安装libevent时增加了版本号导致的, ...
- 练习:将从表读出来的时间戳除以1000(java读时间戳会多出3个000)用jackson包 实现
练习:将从表读出来的时间戳除以1000(java读时间戳会多出3个000)jackson包 实现 entity @Entity @DynamicUpdate //自动更新日期 @Data //get/ ...
- caffe在solverstate的基础上继续训练模型
以mnist数据集为例: bat训练脚本: Build\x64\Release\caffe.exe train --solver=examples/mnist/lenet_solver.prototx ...
- 【debug、info、warn、error】四者之间的区别与用法
debug:需要在调试过程中输出的信息,但发布后是不需要的(当然发布后,也是看不到的) info:需要持续输出的信息(无论调试还是发布状态) warn:警告级别的信息(不严重) error:错误信息( ...