Arron的博客

导航

MySQL自连接

自连接是一种单表自我连接的用法,本质还是把一张表当两张表使用,使用时需要定义表的别名。

下面定义一张简单员工表:

CREATE TABLE `emp` (
  `id` int NOT NULL COMMENT '员工id',
  `name` varchar(255) NOT NULL COMMENT '姓名',
  `pid` int NOT NULL COMMENT '领导id',
  `salary` int NOT NULL COMMENT '工资',
  PRIMARY KEY (`id`)
);

执行 select * from emp; 结果如下:

 现在需要查出所有员工的姓名及其领导的姓名,将表emp看成员工表e和领导表p,有自连接查询语句如下:

select e.name '员工姓名',p.name '领导姓名' from emp e left join emp p on e.pid=p.id;

查询结果如下图所示:

 当然使用如下自连接查询语句有同样的效果:

select e.name '员工姓名',(select p.name from emp p where p.id=e.pid)'领导姓名' from emp e;

另有查询需求如下:对所有员工按照salary进行按照1-N的排名,相同salary并列且按照id升序排列。

同样的,我们把emp表看成两张表e1和e2,自连接查询语句如下:

select 
e1.id,
e1.salary,
(select count(distinct e2.salary) from emp e2 where e1.salary<=e2.salary) 'rank'
from emp e1
order by e1.salary desc,e1.id

查询结果如下图所示:

posted on 2016-10-21 22:11  aaron_shu  阅读(269)  评论(0编辑  收藏  举报