当前位置:网站首页>MySQL --- 子查询 - 子查询概念、规范、分类

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

2022-07-22 19:19:00 小雪菜本菜

子查询概念

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 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子句中:此时子查询返回的结果一般都是多行多列(一张表),可以按照一张数据表(临时表)的形式操作

原网站

版权声明
本文为[小雪菜本菜]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_60569662/article/details/125912824