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
查询结果如下图所示: