子查询(MySQL)


前言

介绍MySQL的子查询操作我们选择使用可视化软件Navicat,对应的数据库使用了某公司员工数据库,该数据库包含员工信息表、部门信息表、公司地址信息表、工作职业信息表、员工等级表。

各个表的字段即字段类型如下:

子查询分类

子查询:我们出现在其他语句中的select语句,称为子查询或内查询;而在外部的查询语句称为主查询或外查询。

按结果集的列数不同

∙ \bullet 标量子查询(结果集只有一行一列),一般搭配单行操作符使用,>、<、=、<=、>=

∙ \bullet 列子查询(结果集只有一列多行),一般搭配多行操作符使用in、any、some、all

∙ \bullet 行子查询(结果集有一行多列)

∙ \bullet 表子查询(一般为多行多列)

按子查询出现的位置

∙ \bullet 放在select后面:一般为标量子查询

∙ \bullet 放在from后面:一般为表子查询

∙ \bullet 放在where或having后面:标量子查询、列子查询、行子查询(用的较少)

∙ \bullet 放在exists后面(相关子查询):表子查询

下面以子查询出现的位置进行详细的介绍。

放在where或having后面

标量子查询(单行子查询)

放在where之后

示例一:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和 工资(先求出141号员工的job_id,143号员工的salary,然后进行匹配)

示例二:返回公司工资最少的员工的last_name,job_id和salary(先求工资最少的员工工资)

放在having之后

示例三:查询最低工资大于50号部门最低工资的部门id与其最低工资(先求50部门的最低工资)

列子查询(多行子查询)

首先介绍一下列子查询的基本操作符:

操作符含义
IN / NOT IN等于列表中的任意一个
ANY / SOME和子查询返回的某一个值比较
ALL和子查询返回的所有值比较

示例一:返回location_id是1400或1700的部门中的所有员工姓名(先求出location_id是1400或1700的部门id,然后使用部门id去匹配符合的员工姓名)

示例二:返回其他工种中比job_id=”IT_PROG“工种任一工资低的员工的员工号、姓名、job_id和salary

行子查询(结果集一行多列或多行多列)

通常将要查询的多个行结果值放在一个括号中当作一个字段。

示例一:查询员工编号最小并且工资最高的员工信息

放在select后面

一般可以用连接查询来求解该类问题。

示例一:查询每个部门的员工个数

示例二:查询员工号为102的部门名

放在from后面

该种情况下将子查询结果充当一张表,要求必须起别名。

示例一:查询每个部门的平均工资的工资等级

放在exists后面(相关子查询)

exists 语法:exists(完整的查询语句),返回结果为布尔值0或1。

示例一:查询没有员工的部门名

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比奇堡咻飞兜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值