想要精通算法和SQL的成长之路 - 超过经理收入的员工(SQL)

  • 前言
  • 一. 超过经理收入的员工
    • 1.1 自连接
    • 1.2 子查询
    • 1.3 join 语句

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 超过经理收入的员工

原题链接
我们有这么一张Employee表:

对应SQL如下:

CREATE TABLE `Employee` (`id` int(11) NOT NULL,`name` varchar(100) DEFAULT NULL,`salary` int(11) DEFAULT NULL,`managerId` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

该表的每一行都表示雇员的ID、姓名、工资和经理的ID。编写一个SQL查询来查找收入比经理高的员工。

我们准备下表数据:

这个问题这里给出三种写法:

  • 使用自连接。
  • 使用子查询。
  • 使用join语句。

1.1 自连接

因为Employee表中的 idmanagerId 存在着父子关系,因此我们需要用到两张Employee表。

SELECT e.name as Employee
from Employee e , Employee e2
where e.managerId = e2.id and e.salary > e2.salary

1.2 子查询

子查询这种写法,其实就是相当于自连接的一种变相写法了。只不过把from中的一张表单独提取出来罢了

SELECT e.name as Employee
from Employee e
where e.salary > (SELECT e2.salary from Employee e2 where e2.id = e.managerId)

1.3 join 语句

SELECT e.name as Employee
from Employee e join Employee e2
on (e.managerId = e2.id and e.salary > e2.salary)

这里说明一下,为什么上面的SQL写的都是 e.managerId = e2.id

宏观角度来看,我们使用了两张一模一样的表,分别命名为ee2。那么宏观角度来看,下面的两个SQL语句确实语义是一样的:

  • e.managerId = e2.id
  • e.id = e2.managerId

不过,我们的题目里面的名称,也就是select语句的查询字段都是来自于e这张表。那么结合这一点,上面两个表达式的语义就完全不一样了:

  • e.managerId = e2.id代表筛选了e这张表中,有经理的员工信息。
  • e.id = e2.managerId取的是e这张表中的经理数据。因为e2表中的数据有managerId的就是3和4。对应着e表中的经理数据。

因此记住一点:取的数据来自于哪张表,条件语句就以哪张表为基准来判断。

想要精通算法和SQL的成长之路 - 超过经理收入的员工(SQL)相关推荐

  1. 想要精通算法和SQL的成长之路 - 两两交换链表中的节点

    想要精通算法和SQL的成长之路 - 两两交换链表中的节点 前言 一. 两两交换链表中的节点 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 两两交换链表中的节点 原题链接 给你一个链表,两两 ...

  2. 想要精通算法和SQL的成长之路 - 第N高的薪水(SQL)

    想要精通算法和SQL的成长之路 - 第N高的薪水(SQL) 前言 一. 第二高的薪水 1.1 offset 的使用 1.2 ifnull 的使用 1.3 分页查询 1.3 总结 二. 第N高的薪水 前 ...

  3. 想要精通算法和SQL的成长之路 - 判断子序列问题

    想要精通算法和SQL的成长之路 - 判断子序列问题 前言 一. 判断子序列 1.1 动态规划做法 1.2 双指针 二. 不同的子序列 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 判断子序 ...

  4. sql 181. 超过经理收入的员工

    Employee 表包含所有员工,他们的经理也属于员工.每个员工都有一个 Id,此外还有一列对应员工的经理的 Id. +----+-------+--------+-----------+ | Id ...

  5. leetcode181. 超过经理收入的员工(SQL)

    Employee 表包含所有员工,他们的经理也属于员工.每个员工都有一个 Id,此外还有一列对应员工的经理的 Id. +----+-------+--------+-----------+ | Id ...

  6. 「SQL面试题库」 No_10 超过经理收入的员工

  7. 好想学python机器人_【Python成长之路】从零学GUI -- 制作智能聊天机器人

    [写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...

  8. C语言基于FOC控制算法和STM32主控芯片的双路直流无刷电机控制器源码

    [FOC+STM32]双路直流无刷电机矢量控制器-使用文档

  9. sql删除主键_产品经理的第一节SQL课——ID到底是干什么的?!

    来这里找志同道合的小伙伴! "头脑风暴" 同大家一起学SQL之前,先简单头脑风暴一个问题:一个企业里有1000个员工,假如这1000个员工中有300个全叫张伟,如何进行区别管理呢? ...

最新文章

  1. 微服务架构及其最重要的 10 个设计模式!
  2. 图形图像显示研究(一)
  3. Rxjs debounce 操作符在 SAP Spartacus 函数节流中的一个实际使用例子
  4. 风雨20年:我所积累的20条编程经验 (转)
  5. 实战+练习!用机器学习预测肺癌 | 明晚8点美国西奈山博后免费直播
  6. VMware虚拟机上配置nginx后,本机无法访问问题(转载)
  7. Spring MVC-表单(Form)标签-单选按钮(RadioButton)示例(转载实践)
  8. wps怎么做时间线_品牌锦囊 I 我想做企业宣传册,我的公司有很多业务线,怎么设计?...
  9. Android Multimedia框架总结(一)MediaPlayer介绍之状态图及生命周期
  10. Unity3D加载资源的四种方式
  11. 编译器之词法分析器(Lexical Analyzer)
  12. 结构相似度索引(SSIM)全攻略:理论+代码(PyTorch)
  13. Python Built-in Functions内置函数用法总结(全)
  14. 疑犯追踪第一季/全集Person Of Interest迅雷下载
  15. 搭建多节点以太坊私链 10分钟搞定(超简洁)
  16. 利用opencv-python 进行图像的不规则裁剪
  17. 如何给自己打造好的“口碑”?
  18. 【随笔记】我的 CSDN 两周年创作纪念日
  19. 关于Android中的画笔画画
  20. My SQL 创建数据库

热门文章

  1. Jackson详情分析:用于诊断和疾病监测的血清学检测
  2. 上云发送邮件报 Could‘t connect to host,port: smtp.exmail.qq.com,25; timout -1解决方式
  3. Java基础项目:家庭记录收支程序
  4. [python算法]贪心算法+实例
  5. 华天动力OA客户管理系统如何将细节处理到完美?
  6. 智能无人机课程的硬件清单
  7. 服务器系统(Ubuntu)安装及环境(pytorch+gpu)配置(Tesla T4)
  8. Lake Shore—霍尔(磁性)传感器
  9. 【postgreSQL】时间类型模糊查询
  10. 携创教育:学历提升八种方法和途径