链接:https://leetcode-cn.com/problems/employees-earning-more-than-their-managers/
一、答案;
解法-1
SELECT a.name AS Employee FROM Employee a (这里省略了,没用AS指定别名 ,而是直接认为数据库里面就存在一个虚拟的表 Employee a )
join Employee b
ON a.managerid= b.id
WHERE a.Salary > b.Salary;
解法-2
完整的写法应该是
SELECT a.name AS Employee (指定列名)
FROM Employee AS a (指定表名)
JOIN Employee AS b
ON a.ManagerId = b.Id
Where a.Salary > b.Salary; (注:这里的where 可以用 AND代替 效果一样)
明显:解法-1 的运行更快
二、解题思路
”和自己的xxx比” 这种问题基本都是自连接问题
三、涉及的知识点
3.1自连接
SELECT * FROM Employee AS a ,Employee AS b;
从表a,以及表b里使用select查询语句,会导致笛卡尔积
会产生 4*4=16 条记录
3.2 SQL 语句执行的顺序
7 select 查询列表
1 from 表1 别名 【连接类型】
2 join 表2 别名
3 on 连接条件
4【where 筛选条件】
5【group by 分组】
6【having 分组后的筛选条件】
8【order by 排序列表】
下面的例子很好的说明:笛卡尔积
原文:https://www.cnblogs.com/caifu12ziyou13-jingshen96zioyu/p/14491657.html