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.练习题的更多相关文章

  1. 【Java EE 学习 28 下】【Oracle面试题2道】【Oracle练习题3道】

    一.已知程序和数据 create table test1 (id int primary key, name ), money int); ,); ,); ,); ,); 要求根据下图写出相应的sql ...

  2. oracle练习题

    题干:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 建表后数据如下: SQL> select * from ...

  3. oracle练习题后15个

    31,32题更正: SQL> --31. 查询所有教师和同学的name.sex和birthday. SQL> select sname, ssex, sbirthday from stud ...

  4. Oracle练习题20~33

    20.查询score中选学多门课程的同学中分数为非最高分成绩的记录. 21. 查询成绩高于学号为“109”.课程号为“3-105”的成绩的所有记录. 22.查询和学号为108的同学同年出生的所有学生的 ...

  5. Oracle练习题(1~19)

    1. 查询Student表中的所有记录的Sname.Ssex和Class列. 2. 查询教师所有的单位即不重复的Depart列. 3. 查询Student表的所有记录. 4. 查询Score表中成绩在 ...

  6. oracle练习题 实验一

    实验一 练习1.请查询表DEPT中所有部门的情况. select * from dept; 练习2.查询表DEPT中的部门号.部门名称两个字段的所有信息. select deptno,dname fr ...

  7. SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等

    SQL组成 DML数据操作语言 DCL数据控制语言 DQL数据查询语言 DDL数据定义语言 查询基础语法 记录筛选 where 子句 记录筛选 where 子句 实例练习 实例练习 Select语句中 ...

  8. 另一套Oracle SQL练习题,更新参考答案

    题干: create table student( sno ) primary key, sname ), sage ), ssex ) ); create table teacher( tno ) ...

  9. 一套oracle的练习题

    create table student( sno varchar2(10) primary key, sname varchar2(20), sage number(2), ssex varchar ...

随机推荐

  1. Java SE LinkedList的底层实现

    关于实现链表的底层原理 链表便于增删,不便于查询 package com.littlepage.linkedList; /** * 基于底层实现LinkedList * @author Littlep ...

  2. hashtable详解

    hashtable也比称作哈希表,键值对或者关联数组 1. 先引用using System.Collections;命名空间 用于处理和表现key/value的键值对,其中key通常用来快速查找,同时 ...

  3. MySQL学习(十六)

    MySQL高级部分 触发器 触发器是一类特殊的事务,可以监视某种数据操作(insert/update/delete),并触发相关的操作(insert/update/delete) 触发器创建语法之4要 ...

  4. 理解css相邻兄弟选择器

    今天在菜鸟教程看到了css组合选择符的“相邻兄弟选择器”,刚开始对这个概念有些不太理解,通过查阅资料并且经过一些试验总算有了些头绪. 原文解释是“相邻兄弟选择器(Adjacent sibling se ...

  5. mongodb分享(二)

    上次讲的:查询find\findone\pretty.条件操作符 (大于.小于.大于等于.小于等于.不等于,$type).limit\skip.sort.Db.postjson.getIndexes( ...

  6. java ----> java.lang.NoClassDefFoundError

    环境: centos 6.10,vim,jdk1.8_u72,zookeeper-3.4.6,maven3+ 正文: 使用zk的api操作创建节点发生java.lang.NoClassDefFound ...

  7. C#流(stream)

    http://www.cnblogs.com/liuxinls/archive/2013/02/15/2912968.html 流用于对IO处理 在System.IO名称空间中有以下类 BinaryR ...

  8. 20171022xlVBA练手提取入所记录

    Sub GetWordText改进() Dim Wb As Workbook Dim Sht As Worksheet Dim Rng As Range Dim wdApp As Object Dim ...

  9. win10系统同时安装python2和python3

    1.官网下载python2和python3版本 2.安装python3,勾上Add Python3.5 to PATH,自定义选择安装目录,安装,验证:WIN+R--->cmd,输入python ...

  10. Card Game Again CodeForces - 818E (双指针)

    大意: 给定序列, 求多少个区间积被k整除. 整除信息满足单调性, 显然双指针. 具体实现只需要考虑k的素数向量, 对每一维维护个指针即可. 这题看了下cf其他人的做法, 发现可以直接暴力, 若当前的 ...