SQL执行顺序 经典 例题

来源:互联网 发布:java string length 编辑:程序博客网 时间:2024/06/06 19:09

 已知表Create Table Department

   ( dept_id varchar(2) not null,  -- 部门编号  
    dept_name varchar(20) not null, -- 部门名称  
    dept_leader varchar(10) –部门经理 );  

 Create Table Personnel 
    ( id varchar(4) not null, --员工号  
name varchar(10) not null, --姓名  
          dept_id varchar(2) not null, --部门编号  
                                 ); 

已知表:

 

 

Create Table Department 

 

dept_id varchar(2) not null, 

 

-- 

部门编号

 

 

dept_name varchar(20) not null, -- 

部门名称

 

 

dept_leader varchar(10) 

部门经理

 

); 

Create Table Personnel 

id varchar(4) not null, 

--

员工号

 

 

name varchar(10) not null, --

姓名

 

 

dept_id varchar(2) not null, --

部门编号

 

 

age integer, --

年龄

 

 

gzsj date, --

参加工作时间

 

 

technical_post varchar(10), --

职称

 

 

salary integer 

薪水

 

); 

已知表:

 

 

Create Table Department 

 

dept_id varchar(2) not null, 

 

-- 

部门编号

 

 

dept_name varchar(20) not null, -- 

部门名称

 

 

dept_leader varchar(10) 

部门经理

 

); 

Create Table Personnel 

id varchar(4) not null, 

--

员工号

 

 

name varchar(10) not null, --

姓名

 

 

dept_id varchar(2) not null, --

部门编号

 

 

age integer, --

年龄

 

 

gzsj date, --

参加工作时间

 

 

technical_post varchar(10), --

职称

 

 

salary integer 

薪水

 

); 

1 现在要查找人数排名前2位部门的经理及部门人数

Select  top 2   d.dept_leader, (select count(*) from Personnel p where p.dept_id = d.dept_id) '总人数'
   from Department d,  personnel p 
   group by d.dept_id,   d.dept_leader 

   order by 总人数 desc -- order 后接列名(或用数字表示列名,此题中可以显示 order by 2 )


2 查找排名在第三位的部门领导名字及人数(注意用上一步的结果)

步骤1 首先找到各部门总的排名表 

 Select d.dept_leader, (select count(*) from Personnel p where p.dept_id = d.dept_id) '总人数'
   from Department d,personnel p 
   group by d.dept_id,d.dept_leader order by 总人数 desc

步骤2 在总表中查找前两名的的部门编号(领导名字) (找一个字段作为桥梁,部门编号或领导名字)

   select Y.dept_id 
   from(Select top 2 d.dept_leader,d.dept_id, (select count(*) from Personnel p where p.dept_id = d.dept_id) '总人数'
                          from Department d,personnel p 
   group by d.dept_id,d.dept_leader order by 总人数 desc)as Y  --- from 后面是子查询 必须 另起一表名,否则报错。 (对应图中 not in 部分)


步骤3  找出排名第三的 部门编号和部门经理 

 select dept_id ,dept_leader from ( Select top 1 d.dept_leader,d.dept_id, (select count(*) from Personnel p where p.dept_id = d.dept_id) '总人数'
                            from Department d,personnel p 
                             where d.dept_id not in ( select dept_id from ( Select top 2 d.dept_leader,d.dept_id, (select count(*) from Personnel p where p.dept_id = d.dept_id) '总人数'
                                                  from Department d,personnel p 
                                       group by d.dept_id,d.dept_leader order by 总人数 desc) as Z)
   group by d.dept_id,d.dept_leader order by 总人数 desc) as Z  



from (select * from ab )as X  ------(select * from ab )当一张表,名字叫做X

0 0
原创粉丝点击