多表查询练习

来源:互联网 发布:三菱伺服产品选型软件 编辑:程序博客网 时间:2024/06/16 01:48
1)查询所有员工的ID,名字和所在部门的名称

select last_name,dept_id,name 

from s_emp,s_dept

 where s_emp.dept_id=s_dept.id;


2)查询员工的姓名和部门所在地区的名称

select se.last_name,sr.name

 from s_emp se,s_dept sd,s_region sr

where se.dept_id=sd.id and sd.region_id=sr.id;

3)查询部门名称包含Sa的员工姓名薪水

select se.last_name,sd.name,se.salary

 from s_emp se,s_dept sd

where se.dept_id=sd.id and sd.name like '%Sa%';

4)查询欧洲销售部门的薪水在1000到2000的员工信息

select se.id,se.last_name,sd.name,salary,sr.name

 from s_emp se,s_dept sd,s_region sr

where se.dept_id=sd.id and sd.region_id=sr.id and sr.name='Europe' and salary between 1000 and 2000;

5)查询部门名称是5位,该部门员工的薪水不等于1500,并按员工的薪水降序排序

select se.id,se.last_name,salary,sd.name 

from s_emp se,s_dept sd,s_region sr

where se.dept_id=sd.id and sd.region_id=sr.id and length(sd.name)=5 and salary!=1500 

order by salary desc;


6)创建下面这张表并插入数据
create table s_gender(
        id number(5) primary key,
minSal number(7),
maxSal number(7),
name varchar2(20));
insert into s_gender values(1,0,1000,'蓝领');
insert into s_gender values(2,1000,1500,'白领');
insert into s_gender values(3,1500,2500,'金领');
commit;
然后查询所有员工月薪涨500后的工资等级? 

select e.last_name, e.title, e.salary+500, s.name

 from s_emp e,s_gender s

where e.salary+500 between s.minsal and s.maxsal

7)查询所有员工所在部门的名称,但是需要把所有部门给查询出来.

select se.last_name,sd.name

 from s_emp se 

right join s_dept sd on se.dept_id=sd.id;


select se.last_name,sd.name

 from s_emp se,s_dept sd 

where se.dept_id(+)=sd.id;


8)查询员工所在部门的名称,包括没有部门号的员工

select se.last_name,sd.name 

from s_emp se 

left join s_dept sd on se.dept_id=sd.id;


select se.last_name,sd.name 

from s_emp se,s_dept sd 

where se.dept_id=sd.id(+);


9)查询员工所在部门的信息,没有部门号的员工,所有的部门都查询出来

select se.last_name,sd.name 

from s_emp se

 full join s_dept sd on se.dept_id=sd.id;


10)查询所有员工的经理的last_name,salary,包括没有经理的员工。
select s1.last_name,s2.last_name manager_name,s2.salary

from s_emp s1 

left join s_emp s2 on s1.manager_id = s2.id;


11)部门表中前7条记录?

select id,name,region_id 

from s_dept

 where rownum<8;


12)部门表中第3条到第5条数据?

 select id,name,region_id

 from

 (select rownum no,id,name,region_id 

from s_dept

 where rownum<6) 

where no<6 and no>2;


select id,name,region_id 

from s_dept

 where rownum<6

minus

select id,name,region_id 

from s_dept 

where rownum<3;


13)查询员工的全名并取别名name和员工的上级id?

select s1.first_name||s1.last_name name,s2.Manager_id 

from s_emp s1,s_emp s2 

where s1.manager_id=s2.id;


14)查询部门所在的地区名?

select s1.id,s1.name,s2.name 

from s_dept s1,s_region s2 

where s1.region_id=s2.id;


15)查询所有员工的平均工资,最高工资最低工资,工资总和,还有有多少个员工?

select avg(salary),min(salary),max(salary),sum(salary),count(*)

 from s_emp;


16)查询每个部门的平均工资?对平均工资降序排序.平均工资大于1400.

select dept_id,avg(salary) 

from s_emp 

group by dept_id 

having avg(salary)>=1400 

order by avg(salary) desc; 


17)查看各个部门的最高工资 

select dept_id,max(salary)

 from s_emp 

group by dept_id;

 
18)查看各个部门的员工数 

select dept_id,count(*) 

from s_emp

 group by dept_id;

    
19)查询各个部门各个职称的平均薪水和最大薪水,并且平均薪水大于2000的部门id。
select dept_id,title,avg(salary),max(salary)

from s_emp 

group by dept_id,title

 having avg(salary)>2000;


20)查询title中不包含vp字符串的每个职位的平均薪水,并对平均薪水进行降序排列,并且每个职位的总薪水大于5000。

select avg(salary),title 

from s_emp 

where title not like '%vp%'

group by title 

having sum(salary)>5000;


21)查看每个区域部门数?

select count(id),region_id

 from s_dept 

group by region_id

 order by region_id;


22)查询南美地区的部门数?

select sr.name,sd.region_id,count(sd.id) 

from s_dept sd,s_region sr    

where sd.region_id=sr.id and sr.name='South America' 

group by sd.region_id,sr.name 

order by sd.region_id;


23)查询南美地区工资大于1400的员工的信息?

select se.last_name,se.salary,sr.name 

from s_emp se,s_dept sd,s_region sr    

where se.dept_id=sd.id and sd.region_id=sr.id and sr.name='South America' and salary>1400;

原创粉丝点击