MySQL 子查询(subquery)语法与用法实例
MySQL 子查询
子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用。MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性。
子查询没有固定的语法,一个子查询的例子如下:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)对应的两个数据表如下:
aid | title | content | uid |
---|---|---|---|
1 | 文章1 | 文章1正文内容... | 1 |
2 | 文章2 | 文章2正文内容... | 1 |
3 | 文章3 | 文章3正文内容... | 2 |
4 | 文章4 | 文章4正文内容... | 3 |
uid | username | password | status |
---|---|---|---|
1 | admin | b7e591c246d010bb2ccd77d52490c85e | 1 |
2 | 小明 | a193686a53e4de85ee3f2ff0576adf01 | 1 |
3 | Jack | 0193686a35e4de85ee3f2ff0567adf490 | 0 |
查询返回结果如下所示:
aid | title | content | uid |
---|---|---|---|
1 | 文章1 | 文章1正文内容... | 1 |
2 | 文章2 | 文章2正文内容... | 1 |
3 | 文章3 | 文章3正文内容... | 2 |
在该例子中,首先通过子查询语句查询出所有 status=1 的 uid,实际的查询类似于:
SELECT * FROM article WHERE uid IN(1,2)
MySQL 子查询分类
上面演示了一个简单的子查询例子,根据子查询的返回数据形式(如上例中返回的 uid 序列),可以分为如下几类:
- 标量子查询:返回单一值的标量,最简单的形式。
- 列子查询:返回的结果集是 N 行一列。
- 行子查询:返回的结果集是一行 N 列。
- 表子查询:返回的结果集是 N 行 N 列。
MySQL 子查询操作符
在主查询中,可以使用比较操作符以使用操作符来对子查询返回的结果进行比较,从而确定查询的条件。如上面例子使用了 IN 操作符。
可以使用的操作符有:= > < >= <= <> ANY IN SOME ALL