MySQL 表子查询

MySQL 表子查询

表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据。

MySQL 表子查询实例

下面是用于例子的两张原始数据表:

article 表:
aidtitlecontentuid
1 文章1 文章1正文内容... 1
2 文章2 文章2正文内容... 1
3 文章3 文章3正文内容... 2
4 文章4 文章4正文内容... 3
blog 表:
bidtitlecontentuid
1 日志1 日志1正文内容... 1
2 文章2 文章2正文内容... 1
3 文章3 文章3正文内容... 2

SQL 如下:

SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)

查询返回结果如下所示:

aidtitlecontentuid
2 文章2 文章2正文内容... 1
3 文章3 文章3正文内容... 2

对比前面行子查询的例子,将行子查询中的 WHERE bid=2 条件限制去掉之后,其返回的数据就是一个表记录(当然如果符合条件的记录只有一条,而成为行子查询记录,但我们认为这是一个表子查询)。

该 SQL 的意义在于查找 article 表中指定的字段同时也存在于 blog 表中的所有的行(注意 = 比较操作符换成了 IN),实际上等同于下面的条件语句:

SELECT * FROM article,blog 
WHERE (article.title=blog.title AND article.content=blog.content AND article.uid=blog.uid)

实际上,后面的语句是经过 MySQL 优化的而效率更高,或者也可以使用 MySQL JOIN 表连接来实现。在此使用该例子只是为了便于描述表子查询的用法。

衍生数据表子查询

表子查询应用得更多情况是衍生数据表子查询,即首先执行子查询生成临时表,外层主查询再到此临时表中获取数据。具体参见《MySQL FROM 子查询》。

posted @   自由无风  阅读(1136)  评论(0编辑  收藏  举报
编辑推荐:
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
阅读排行:
· 我干了两个月的大项目,开源了!
· 千万级的大表,如何做性能调优?
· 推荐一款非常好用的在线 SSH 管理工具
· 盘点!HelloGitHub 年度热门开源项目
· Phi小模型开发教程:用C#开发本地部署AI聊天工具,只需CPU,不需要GPU,3G内存就可以运行,
点击右上角即可分享
微信分享提示