MySQL 表子查询
MySQL 表子查询
表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据。
MySQL 表子查询实例
下面是用于例子的两张原始数据表:
| aid | title | content | uid |
|---|---|---|---|
| 1 | 文章1 | 文章1正文内容... | 1 |
| 2 | 文章2 | 文章2正文内容... | 1 |
| 3 | 文章3 | 文章3正文内容... | 2 |
| 4 | 文章4 | 文章4正文内容... | 3 |
| bid | title | content | uid |
|---|---|---|---|
| 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)
查询返回结果如下所示:
| aid | title | content | uid |
|---|---|---|---|
| 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 子查询》。
MySQL 表子查询的更多相关文章
- MySQL 行子查询(转)
MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...
- mysql in 子查询 效率慢 优化(转)
mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...
- MySQL FROM 子查询
FROM 子句中的子查询 MySQL FROM 子查询是指 FROM 的子句作为子查询语句,主查询再到子查询结果中获取需要的数据.FROM 子查询语法如下: SELECT ... FROM (subq ...
- MySQL 行子查询
MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...
- 聊聊MySQL的子查询
1. 背景 在之前介绍MySQL执行计划的博文中已经谈及了一些关于子查询相关的执行计划与优化.本文将重点介绍MySQL中与子查询相关的内容,设计子查询优化策略,包含半连接子查询的优化与非半连接子查询的 ...
- sql字段拆分 ,连表子查询获取值
1.连表子查询获取值 select bas.name,bas.id_card_num,bas.mobil_no,gender,bas.birthday,bas.height,bas.weight,pr ...
- Mysql in子查询中加limit报错
Mysql in子查询中加limit报错 select id from aa where id in ( select id from bb limit 10 ); 改写成 SELECT id FRO ...
- mysql update 子查询锁表问题
mysql在Update带有子查询的时候,子查询的表会锁住,导致该表无法使用.比如 update A set comments = (select count(1) from B where id = ...
- mysql——多表——子查询——示例
子查询: 子查询是将一个查询语句嵌套在另外一个查询语句中,内层查询语句的查询结果,可以作为外来层查询语句提供查询条件. 因此在特定条件下,一个查询语句的条件,需要另外一个查询语句来获取. 前期准备表: ...
随机推荐
- shell之小括号、中括号、大括号
1.Shell中变量的原形:${var} 一串命令的执行 #等价于 $ var=test $ echo $var test #例如,用在这个位置 $ echo ${var}AA testAA 2.命 ...
- 解决mongodb ISODate相差8小时问题
服务端使用mongoose操作mongodb,其中Schema中的日期字段定义如下: date: {type:Date, default:Date.now},//操作日期 插入到mongodb中adt ...
- 理解ThreadLocal(转)
小结 ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题.在很多情况下,ThreadLocal比直接使用synchronized ...
- java签名证书
import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; impo ...
- 【转】Unable to execute dex: Java heap space 解决方案(如何为eclipse.int 添加内存)
原文网址:http://blog.csdn.net/zengyangtech/article/details/7003379 欢迎转载,转载请注明 http://blog.csdn.net/zengy ...
- Delphi 日志的方法 Log
写一个日志的函数,只需要传内容进去即可,自动记录时间的,日志保存在'c:\ErpRunLog.txt'下procedure writeWorkLog(sqlstr: string);var filev ...
- delphi 通过控件的handle取得控件
例子代码如下: vartsg:TstringGrid;begintsg:=Tstringgrid(FindControl(handle));//正常使用TstringGrid//tsg......./ ...
- DataTable排序(来自其他空间)
DataTable排序 DataRow[] rows = dataTable1.Select("", "ord asc"); DataTable t = Dat ...
- [Java] Java 技术和 JVM 基础
Java 由 Sun 公司在 1995 首次发布,既是一门编程语言,也是一个计算平台. Java 运行时版本 Java Runtime Edition 当你下载 Java 完时候,你会得到一个 Jav ...
- 使用 Make 命令构建网站
网站开发正变得越来越专业,涉及到各种各样的工具和流程,迫切需要构建自动化. 所谓”构建自动化”,就是指使用构建工具,自动实现”从源码到网页”的开发流程.这有利于提高开发效率.改善代码质量. 本文介绍如 ...