| 您的当前位置:首页 --> MYSQL教程 --> MySQL中表子查询与关联子查询的基础学习教程 |
| MYSQL教程 MySQL中表子查询与关联子查询的基础学习教程 |
| 浏览次数:1591 关键词 ( ) |
| 查看使用该CPU的产品 查看CPU天梯 |
| CPU型号:MySQL中表子查询与关联子查询的基础学习教程 |
| 主频:Ghz |
| 睿频:Ghz |
| 核心数:个 |
| 不支持超核心 |
| 制作工艺: |
| 插槽类型: |
| 功耗:0W |
| L3缓存:0MB |
| 支持最大内存: 0GB |
| CPU详细参数 |
|
MySQL 表子查询
blog 表:
SQL 如下: SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog) 查询返回结果如下所示:
该 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 关联子查询
user 用户表:
我们要查出 article 表中的数据,但要求 article 中的某个或某些字段与 user 表字段有逻辑关系(本例为 uid 相等)。SQL 语句如下: SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE article.uid = user.uid) 返回查询结果如下:
将该例 SQL 与如下语句比较更能看出关联子查询与普通子查询的区别: SELECT * FROM article WHERE uid IN(SELECT uid FROM user) 在本实例中,虽然两个 SQL 执行后的返回结果都一样,但它们的实现过程是完全不一样的。后者(普通子查询)实际被执行为: SELECT * FROM article WHERE uid IN(1,2,3) 但在关联子查询中,是无法单独执行子查询语句的。其实际流程大致为:
这个执行流程类似于 EXISTS 子查询,实际上某些情况下 MySQL 就是将关联子查询重写为 EXISTS 子查询来执行的。 MySQL 关联子查询效率 SELECT article.* FROM article INNER JOIN user ON article.uid = user.uid 注意:此处只是为了演示用 INNER JOIN 替换关联子查询的样例,并非表名这种处理是最优处理。 |
| 下一个产品 SQL计算timestamp的差值的方法 上一个产品 深入解析半同步与异步的MySQL主从复制配置 |