在很多情况下,子查询的效果与JOIN 表连接很类似,但一些特殊情况下,是必须用子查询而不能用表连接的,如:
SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2)
以及下例:
SELECT * FROM article AS t WHERE 2 = (SELECT COUNT(*) FROM article WHERE article.uid = t.uid)
该例子要找出用户发表了 2 篇文章的所有文章记录。对应的两个数据表如下:
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 |