MySQL --- 子查询 - 子查询概念、规范、分类

子查询概念

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 MySQL 4.1 开始引入。现在使用的是 MySQL 8.0.28

在特定情况下,一个查询语句的条件需要另一个查询语句来获取,内层查询(inner query)语句的查询结果,可以为外层查询(outer query)语句提供查询条件。

内层查询即子查询,外层查询即主查询,只是叫法不同而已。

查询需求

  • 查询公司之中工资最低的员工信息

    • 工资最低是多少?

    • 工资最低的员工是谁?

-- 查询公司中工资最低是多少?
SELECT MIN(sal) FROM emp;

-- 工资最低的员工是谁?
SELECT * FROM emp WHERE sal= 800;

-- 查询公司中工资最低的员工信息
SELECT * FROM emp WHERE sal=(SELECT MIN(sal) FROM emp);

子查询规范

  1. 子查询必须放在小括号()中

  2. 子查询一般放在比较操作符=的右边,以增强代码可读性

  3. 子查询可以出现在几乎所有的SELECT字句中(如:SELECT、FROM、WHERE、ORDER BY、HAVING子句)

子查询分类

根据子查询返回的数据分类

  • 标量子查询(scalar subquery):返回 1 行 1 列一个标量(单行单列,返回的是一个值)

  • 行子查询(row subquery):返回的结果是 1 行 N 列(单行多列)

  • 列子查询(column subquery):返回的结果是 N 行 1 列(多行单列)

  • 表子查询(table subquery):返回的结果是 N 行 N 列(多行多列,返回的是一个表)

子查询可以返回一个标量(就一个值)、一个行、一个列或一个表,这些子查询分别称之为标量、行、列和表子查询。

根据子查询和主查询之间是否有条件关联分类

  • 相关子查询:两个查询之间有一定的条件关联(相互联系)

  • 不相关子查询:两个查询之间没有条件关联(相互独立)

为了方便,对于在何处使用子查询给出几点建议

  • 子查询出现在 WHERE 子句中:此时子查询返回的结果一般都是单行单列(标量查询)、单行多列(行子查询)、多行单列(列子查询)

  • 子查询出现在 HAVING 子句中:此时子查询返回的都是单行单列(标量查询),同时为了使用统计函数操作

  • 子查询出现在 FROM 子句中:此时子查询返回的结果一般都是多行多列(一张表),可以按照一张数据表(临时表)的形式操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qiuqiuyaq

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

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

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

打赏作者

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

抵扣说明:

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

余额充值